この記事でわかること

  • 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_duration4セグメント長(秒)。通常2〜6秒
-use_timeline1タイムラインセグメント(VOD推奨)
-use_template1テンプレートURL(ライブ推奨)
-window_size5ライブ時の保持セグメント数
-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の選択

比較項目HLSMPEG-DASH
Apple Safari標準対応○(ネイティブ)△(要JS)
セグメント形式.ts / .m4s.m4s / .mp4
標準化団体Apple独自ISO国際標準
動的ABR切替
主な用途iOS・Safari向け汎用・OTT向け

関連リソース

よく使うオプション・フィルタ・コーデック設定をまとめた PDF チートシートです。手元に置いておくと調べる時間を短縮できます。

FFmpeg チートシート

関連記事


動作確認: 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" で映像セットと音声セットを分割します。