解像度から配信用ビットレートラダーを作成
アダプティブストリーミングのラダーは、同じ動画を複数の品質で用意し、帯域幅や画面条件の変化にプレイヤーが対応できるようにします。この機能は元動画の幅と高さから、使用可能な1080p、720p、480p、360pの配信設定を決定的に生成します。アスペクト比と向きを保ち、エンコーダーに適した偶数寸法に整え、各出力の実際の画素数に応じて標準ビットレートを調整します。HLSまたはDASHのエンコード設計を始めるための基準としてご利用いただけます。
無料で実行
実際の元動画寸法から始めます
プレイヤーによる拡大縮小や表示回転を行う前の、保存された動画のピクセル幅と高さをご入力ください。計算では元動画の短辺と長辺を、一般的な1080p、720p、480p、360p配信設定の範囲と比較します。存在しない画素を補うことはありません。両方向とも標準プロファイルを満たす大きさがある場合に限り、その段を追加します。そのため、1920×1080の元動画には4段すべてが含まれ、1280×720では720pから始まります。縦長素材にも同じ規則を適用し、横長フレームへ強制せずに縦向きの出力を生成します。両方の寸法は、規定範囲内の正の整数である必要があります。横向きの640×360、または縦向きの360×640より小さい素材は、拡大しなければ最低段を作れないため受け付けません。スマートフォン動画に回転メタデータがある場合は、横方向が変わることがありますので、実際に表示される寸法をご確認ください。
寸法とビットレートの計算方法をご確認ください
使用できる各プロファイルでは、元動画の短辺を対象段の値まで縮小し、長辺を元のアスペクト比から算出します。算出した長辺は偶数へ切り下げます。一般的なH.264およびH.265の処理では、クロマブロックに適合する寸法が求められるためです。厳密なアスペクト比の差はごくわずかですが、エンコーダー内部で意図しない切り抜きや余白追加が起きるのを防げます。各プロファイルは、AVCで一般的な目標値である1080pの5,000 kbps、720pの2,800 kbps、480pの1,400 kbps、360pの800 kbpsから始めます。その後、16:9の基準フレームに対する出力画素数の比率で目標値を調整し、最も近い50 kbps単位へ丸めます。さらに、目標値の107パーセントの最大レートと、目標値の2倍のバッファー値も返します。これらは設計用の目安であり、画質を保証する値ではありません。
エンコード設計の基準として使用します
返された各段をエンコーダーの出力に割り当て、生成したストリームを同じHLSマスタープレイリストまたはDASHプレゼンテーションにまとめてください。プレイヤーが途切れずに切り替えられるよう、フレームレート、キーフレーム間隔、色処理、音声構成、セグメント境界を各段で統一します。ビットレートは予測しやすく、見積もり、テンプレート、初期設定に適していますが、必要な値は映像の複雑さにも左右されます。アニメーション、フィルムグレイン、スポーツ、画面収録、暗所ノイズでは、同じ解像度でも適切なレートが大きく異なります。代表的な場面を客観的な品質指標と再生試験で確認し、コーデック、フレームレート、要求品質に応じて個別の目標値を調整してください。出力は映像レートのみです。総帯域を求める際は音声を別に加算し、配信の余裕も確保します。本番では再バッファー、開始時間、段の選択、品質を監視し、実際の視聴ネットワークでラダーの均衡をご確認ください。
活用例
HLSエンコード計画を作成する
マスタープレイリストを生成する前に、元動画の寸法から一貫した配信サイズと映像ビットレート目標を作成します。
トランスコード出力を見積もる
元動画が対応できる標準配信段数と、各出力に必要なおおよその帯域幅を確認します。
縦長や特殊な比率を標準化する
元の向きを維持したまま、16:9以外の実画素数に一般的な配信プロファイルを適合させます。
よくある質問
計算料金はいくらですか?
APIリクエスト1件あたり$0.002です。
小さい元動画を拡大しますか?
いいえ。正規化した元寸法を超える段は除外し、360pの範囲より小さい場合はエラーを返します。
返される値は映像だけですか、それとも総帯域ですか?
映像の目標ビットレートです。総帯域を見積もる際は、選択した音声レートと配信オーバーヘッドを加えてください。
縦長動画に対応していますか?
はい。縦向きを維持し、元のアスペクト比に合わせて各標準段を偶数寸法で生成します。
幅が1920や1280と異なる場合があるのはなぜですか?
これらの幅は16:9を前提としています。別の比率では、切り抜かずに画像を保つために異なる幅が必要です。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/video2/streaming-bitrate-ladder \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"source_width":1920,"source_height":1080}'const res = await fetch("https://api.kit.forhosting.com/video2/streaming-bitrate-ladder", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"source_width": 1920,
"source_height": 1080
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video2/streaming-bitrate-ladder",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"source_width": 1920,
"source_height": 1080
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video2/streaming-bitrate-ladder", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"source_width":1920,"source_height":1080}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"source_width":1920,"source_height":1080}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video2/streaming-bitrate-ladder", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"source_width": 1920,
"source_height": 1080
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video2.streaming_bitrate_ladder",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |