この記事でわかること
- MPEG-DASHの基本的なセグメント生成コマンド
- 複数ビットレートの適応型ストリーミング(ABR)構成
- セグメント長(
-seg_duration)と初期化ファイルの設定 - HLSとMPEG-DASHの主な違い
- VOD向けとライブ向けのオプション比較
テスト済みバージョン: FFmpeg 6.1で確認済み(ubuntu-latest / CI検証済み) 対象 OS: Windows / macOS / Linux
MPEG-DASHの基本概念
MPEG-DASH(Dynamic Adaptive Streaming over HTTP)はHTTP経由で動画を小さなセグメントファイルに分割して配信する規格です。
| 要素 | 説明 |
|---|---|
| MPDファイル | マニフェスト(プレイリスト相当) |
| セグメントファイル | 実際の映像・音声データ(通常2〜10秒) |
| Representation | ビットレート・解像度の組み合わせ |
| AdaptationSet | 映像/音声の種別グループ |
基本コマンド(シングルビットレート)
ffmpeg -i input.mp4 -c:v libx264 -b:v 1500k -c:a aac -b:a 128k -f dash -seg_duration 4 output.mpd
実行すると以下が生成されます:
output.mpd— マニフェストファイルinit-stream0.m4s— 映像の初期化セグメントinit-stream1.m4s— 音声の初期化セグメントchunk-stream0-XXXXX.m4s— 映像セグメント(連番)chunk-stream1-XXXXX.m4s— 音声セグメント(連番)
複数ビットレートのABR構成
適応型ストリーミングの真価は複数品質の並行生成にあります。-map オプションで同一入力から複数のビットレートに出力します。
ffmpeg -i input.mp4 \
-map 0:v -map 0:a -map 0:v -map 0:a \
-c:v libx264 \
-b:v:0 2500k -s:v:0 1280x720 \
-b:v:1 800k -s:v:1 854x480 \
-c:a aac -b:a 128k \
-f dash \
-seg_duration 4 \
-adaptation_sets "id=0,streams=v id=1,streams=a" \
output.mpd
上記は720p(2500kbps)と480p(800kbps)の2ビットレート構成です。プレイヤーはネットワーク状況に応じて自動的に切り替えます。
主要オプション一覧
| オプション | 例 | 説明 |
|---|---|---|
-seg_duration | 4 | セグメント長(秒)。通常2〜6秒 |
-use_timeline | 1 | タイムラインセグメント(VOD推奨) |
-use_template | 1 | テンプレートURL(ライブ推奨) |
-window_size | 5 | ライブ時の保持セグメント数 |
-adaptation_sets | "id=0,streams=v" | セットのグループ化 |
-init_seg_name | "init_$RepresentationID$.m4s" | 初期化セグメントのファイル名テンプレート |
-media_seg_name | "seg_$Number$.m4s" | メディアセグメントのファイル名テンプレート |
VOD向け設定
ffmpeg -i input.mp4 \
-c:v libx264 -b:v 1500k \
-c:a aac -b:a 128k \
-f dash \
-seg_duration 4 \
-use_timeline 1 \
-use_template 1 \
output.mpd
HLS vs MPEG-DASHの選択
| 比較項目 | HLS | MPEG-DASH |
|---|---|---|
| Apple Safari標準対応 | ○(ネイティブ) | △(要JS) |
| セグメント形式 | .ts / .m4s | .m4s / .mp4 |
| 標準化団体 | Apple独自 | ISO国際標準 |
| 動的ABR切替 | ○ | ○ |
| 主な用途 | iOS・Safari向け | 汎用・OTT向け |
関連リソース
よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。
関連記事
動作確認: ffmpeg 6.1 / Ubuntu 24.04 (GitHub Actions runner) 一次ソース: ffmpeg.org/ffmpeg-formats.html#dash / trac.ffmpeg.org/wiki/Create%20a%20DASH%20playlist
よくある質問
DASH と HLS、どっちを使う?
iOS / Safari は HLS 必須。デスクトップブラウザとスマート TV は DASH の方が好まれる。最広範囲をカバーするなら両方を -hls_segment_filename と -dash で生成してください。
セグメント長は何秒がいい?
4〜6 秒が起動時間と切替遅延のバランス点。短い(2 秒)と高速チャンネル切替できるが、マニフェスト更新と CDN コストが増える。
DASH プレーヤーが品質切替時に毎回バッファする
画質間で keyframe が揃ってない可能性が大。各レンディションに -force_key_frames "expr:gte(t,n_forced*4)" を強制してください。
FFmpeg だけでライブ DASH できる?
可能です — -f dash -window_size 5 -extra_window_size 10 でスライディングライブウィンドウ生成。CDN ingest エンドポイントへ HTTP PUT で送る形に。
音声を別セグメントにする必要は?
複数ビットレートや多言語音声があるなら必要。-adaptation_sets "id=0,streams=v id=1,streams=a" で映像セットと音声セットを分割します。