MP4Boxは使わずにffmpegだけでMPEG-DASHのMPDファイルを作る方法。またffmpeg 3.4からはlibxml2をリンクすることでMPDファイルを読み込むこともできる。各セグメントの.m4sファイルは最初に読み込むinit.mp4を毎回参照し各セグメントの.m4sファイルをデコードしている。
関連記事
ffmpeg で Apple HTTP Live Streaming(HLS)を扱う
公式のガイドライン :
GitHub – unifiedstreaming/fmp4-ingest
DASH-IF Live Media Ingest Protocol : web.archive
外部記事
- MPEG DASHを知る – Qiita
- AbemaTV の MPEG-DASH 対応 – Qiita
- HLS と MPEG-DASH でメディアを共通化してみる – Qiita
- RTMP to MPEG-DASH でライブストリーミングを行うやり方 – Qiita
基本コマンド
すべてのセグメントをMPDに記載してコピーする。
ffmpeg -i input.mp4 -c copy -window_size 0 -movflags +faststart output.mpd
1つの映像に1つ目はオリジナルをコピーし、2つめはアスペクト比固定で横解像度は2で割れて、縦解像度360pにリサイズして2つのストリームをリアルタイム-reで出力する。-mapを2度使うことで2出力にしている。
ffmpeg -re -i input.mp4 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -c:v:0 copy -c:a:0 copy -filter:v:1 "scale=-2:360" -c:v:1 libx264 -profile:v:1 main -b:v:1 600k -c:a:1 aac -b:a:1 128k -f dash -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" -movflags +faststart output.mpd
改行しわかりやすくしたもの。
ffmpeg -re -i input.mp4 -map 0 -map 0 -c:v:0 copy -c:a:0 copy -filter:v:1 "scale=-2:360" -c:v:1 libx264 -profile:v:1 main -b:v:1 600k -c:a:1 aac -b:a:1 128k -f dash -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" -movflags +faststart output.mpd
公式ドキュメントには-movflagsを以下に利用している。
-movflags empty_moov+separate_moof+default_base_moof+cmaf
ffmpeg Documentation : mov, mp4, ismv
その他のフラグは以下に利用している。
-fflags genpts -export_side_data prft
ffmpeg Documentation : Format Options
ffmpeg Documentation : Codec Options
dashの読み込み時の設定がDemuxersのほうで、da9a6d5から-decryption_keys key=value形式の辞書型のキーから復号できる。
avformat/mov: add support for multiple decryption keys · FFmpeg/FFmpeg@da9a6d5 · GitHub
公式ドキュメント:FFmpeg Formats Documentation : dash(Demuxers)
公式ドキュメント:FFmpeg Formats Documentation : dash(Muxers)
