ポッドキャスト広告の挿入時刻を計算
エピソードの長さと3つの広告位置を割合で指定すると、制作にそのまま使える正確な時刻へ変換できます。長さを秒で入力し、プレロール、ミッドロール、ポストロールを0から100パーセントのどこに置くか指定してください。数値の秒数と読みやすいタイムコードの両方を返します。計算結果は常に一定なので、制作者、広告運用担当者、配信システムは、各エピソードを手作業で再生しなくても同じ配置ルールを繰り返し適用できます。
無料で実行
キャンペーンの割合を編集用の時刻へ変換します
ポッドキャストの広告計画では、長さが異なるエピソードにも同じ考え方を適用できるため、位置を割合で示すことがよくあります。「ミッドロールを50パーセントに配置する」という指示は統一しやすい一方、編集担当者や配信システムには正確なタイムコードが必要です。この計算機は、エピソードの長さに各割合を掛け、秒単位の位置と読みやすいHH:MM:SS.mmm形式の時刻を返します。全体の長さを秒で入力し、プレロール、ミッドロール、ポストロールの割合をそれぞれ指定してください。3,600秒のエピソードでは、2.5パーセントは90秒、50パーセントは1,800秒、97.5パーセントは3,510秒になります。結果には広告種別の名前が付くため、別の欄へ誤って転記する危険を減らせます。毎回同じ演算を行うので、制作メモ、広告挿入マニフェスト、承認表、カタログ全体で一貫したマーカーを必要とする自動処理にも利用できます。
精度、入力範囲、検証方法を確認します
すべての割合はエピソードの先頭を基準に測ります。そのため、0パーセントは開始時刻、100パーセントは入力した長さの終了時刻と一致します。12.5や87.25のような小数を含む中間値も、比例した位置として計算できます。数値の秒数は最大6桁の小数で返し、表示用タイムコードは音声編集や配信画面で一般的な1ミリ秒単位に丸めます。0未満または100を超える割合は、自動的に範囲へ収めずエラーにします。値を黙って修正すると、広告が意図と異なる位置へ移動しても、処理が成功したように見えるためです。長さが未入力、数値以外、無限大、または0以下の場合も受け付けません。この検証により、挿入処理へ時刻を渡す前に誤りを発見できます。なお、編集上ふさわしい場所かどうかの判断、無音や発話境界の検出、音楽や会話を避けるための自動移動は行いません。割合から時刻への変換だけを正確に実行します。
ポッドキャスト制作工程で結果を活用します
結果の一覧は、プレロール、ミッドロール、ポストロールの順に並びます。各項目には、入力した割合、秒単位の数値位置、整形済みタイムコードが含まれます。制作担当者は読みやすい時刻を編集指示書やエピソード管理表へ貼り付けられ、連携システムは文字列を解析せず数値を直接利用できます。人が画面で配置を確認し、別の担当が広告サーバーへ構造化データを送る場合にも、この2種類の表現が役立ちます。定期番組ではキャンペーン割合を固定ルールとして保管し、新しいエピソードの最終尺だけを毎回入力してください。週ごとに長さが変わっても、想定した相対間隔を維持できます。公開前には仮編集版ではなく最終マスターでマーカーを確認してください。導入部の短縮やクレジットの追加により全体尺が変わると、すべての比例位置も変化します。APIの料金は1回$0.002で、ブラウザー版も同じ計算ロジックを使用します。音声のアップロードは不要で、長さと割合だけを処理します。
活用例
広告挿入シートを作成します
スポンサーが指定した割合を、編集担当者がエピソード管理表へ直接入力できる時刻に変換します。
シリーズ全体の配置を統一します
最終尺が毎回異なるエピソードに、同じプレロール、ミッドロール、ポストロールの相対ルールを適用します。
自動配信処理へ値を渡します
連携処理では秒数を使用し、人による確認と承認には読みやすいタイムコードを残します。
よくある質問
APIで計算する場合の料金はいくらですか?
APIリクエスト1回につき$0.002です。同じ決定的なロジックを使い、ブラウザー内でも実行できます。
エピソードの長さはどの単位で入力しますか?
全体の長さを秒で入力してください。元データに1秒未満の精度がある場合は、小数秒も使用できます。
割合に0または100を指定できますか?
はい。0はエピソードの開始位置、100は入力した長さの終了位置を正確に示します。
割合が許容範囲外の場合はどうなりますか?
該当する入力欄を示す無効入力エラーを返します。値を切り詰めたり、自動調整したりすることはありません。
返される時刻の精度はどの程度ですか?
数値位置は最大6桁の小数を保持し、読みやすいタイムコードは最も近いミリ秒へ丸めます。
ポッドキャスト音声を解析または送信しますか?
いいえ。指定された長さと割合だけを使用し、音声ファイルの受信、解析、保存は行いません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/audio/podcast-ad-slot-timing \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"duration_seconds":3600,"pre_roll_percent":2.5,"mid_roll_percent":50,"post_roll_percent":97.5}'const res = await fetch("https://api.kit.forhosting.com/audio/podcast-ad-slot-timing", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"duration_seconds": 3600,
"pre_roll_percent": 2.5,
"mid_roll_percent": 50,
"post_roll_percent": 97.5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/audio/podcast-ad-slot-timing",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"duration_seconds": 3600,
"pre_roll_percent": 2.5,
"mid_roll_percent": 50,
"post_roll_percent": 97.5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/audio/podcast-ad-slot-timing", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"duration_seconds":3600,"pre_roll_percent":2.5,"mid_roll_percent":50,"post_roll_percent":97.5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"duration_seconds":3600,"pre_roll_percent":2.5,"mid_roll_percent":50,"post_roll_percent":97.5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/audio/podcast-ad-slot-timing", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"duration_seconds": 3600,
"pre_roll_percent": 2.5,
"mid_roll_percent": 50,
"post_roll_percent": 97.5
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.podcast_ad_slot_timing",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 200 |
max_minutes | 180 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |