ネクストスケープ配信事業本部のAdvent Calendar 2016の1日目って事で、この先のハードルを上げない為にも
低空飛行で始めます。
ffmpeg
動画配信の仕事をしていれば、必ず一度は使う事になるだろうこのツール。
個人的には、アウトプットされるmp4に癖が有ったりして余り好きでは無いのですが、有用なツールであるのは確かなので
局地的に使用しています。
mp4をdemux
最近は配信方法にMPEG-DASHが使われる事が多いですが、世に出ているMPEG-DASHのプレーヤーのほとんどはmuxされたmp4の
再生に対応していないと思います。(自分は見たことがありません)
一方で配信システム側に納品されるmp4が必ずdemuxされているとは限らないわけで・・・
その様な時は、受け取った側でdemuxして映像トラックのみのmp4と音声トラックのみのmp4に分離してあげる必要があります。
そんな時に使えるツールの一つが、ffmpegです。
・最初のトラックを分離
ffmpeg -i some_muxed.mp4 -map 0:0 -codec copy some_first_track.mp4
・2番目のトラックを分離
ffmpeg -i some_muxd.mp4 -map 0:1 -codec copy some_second_track.mp4
こんな感じでコマンド実行すればdemux出来ます。
-mapに設定する x:x は、
ffmpeg -i some_muxed.mp4
でファイル情報を出力した際の
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'some_muxed.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01T00:00:00.000000Z
encoder : Lavf52.62.0
Duration: 00:00:52.21, start: 0.000000, bitrate: 2240 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 2108 kb/s, 24 fps, 24 tbr, 24 tbn, 48
tbc (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : SoundHandler
Stream #x:xの部分を設定します。
mp4をmux
余り使う機会は無いと思いますが、ffmpegを使ったmp4のmuxの方法も書いておきます。
コマンドとしては、
ffmpeg -i some_muxed_0.mp4 -i some_muxed_1.mp4 -map 0:0 -map 1:0 -codec copy new_muxed.mp4
some_muxed_0.mp4のStream #0:0とsome_muxed_1.mp4のStream #1:0をmuxする、という処理になります。
さて、
此処まで書いておきながら、自分はmp4のdemuxにffmpegは使っていなかったりします。
コマンドが長かったりするせいも有るのですが、経験上、出来てくるmp4の互換性に若干の不安があるからだったりします。
自分が普段使っているのはmp4boxで、mp4boxだとコマンドは
mp4box -single 1 some_muxed.mp4 -out some_track_1.mp4
mp4box -single 2 some_muxed.mp4 -out some_track_2.mp4
みたいになります。-singleの後の数値は、mp4から抜き出すトラックのIDになります。
他にも別なアプローチで、
mp4box -rem 2 some_muxed.mp4 -out some_track_1.mp4
mp4box -rem 1 some_muxed.mp4 -out some_track_2.mp4
こんな風にdemuxすることも可能です。
これは指定されたトラックIDをmp4から削除する形でdemuxを実現しています。
mp4boxはmp4boxで、トラックIDを予め知っていないと色々と不便なのですが・・・
トラックIDは必ずしも1から始まるとは限りませんし、MPEG-2 TSから変換されたmp4だとPIDがそのままトラックIDに
なっていたりする場合もありますから。
と言う事で
ゆるーく低空飛行で始まったネクストスケープ配信事業本部のAdvent Calendar 2016、この先しばらくよろしくお願いします。
自分は、ぽつぽつと空いている日にゆるーく小ネタを投下していく予定です。