FFmpegとは、クロスプラットフォームで動作するメディアを変換するCUIのソフトウェアです。こう書いても分かりやすいとは言えないので、もう少し簡単に書くと、「真っ黒い画面にコマンドを書いて、動画とか音声をどうにかする」ソフトです。
今回はこのFFmpegを用いて、お気持ち程度にネットワーク上で早く見られるMP4ファイルを作っていきましょう。ちなみにこれはストリーミングとは異なる処理なので、その点は注意してください。
MP4は要するに箱
動画や音声の話をする際に、h264/AVC
であったり、AAC
であったりと、あまり聞きなれない言葉が飛び交うと思います。私たちが普段聞きなれている「MP4」であったり「MKV」とかとはどのような関係があるのでしょうか。
実はMP4の中にh264/AVC
であったりAAC
であったりが含まれている、という感じです。つまりMP4は箱という感じで、その中に規格化された圧縮データが含まれているという感じです。もちろんMP4だけではなくMKVなどもあるということは、その箱にもいろいろな種類がある、ということです。
What's "moov"?
MP4ファイルの内部には単にメディアデータが含まれているのではなく、それらの他にもファイルタイプを示す部分やメタデータが含まれている部分が存在します。これらの部分をそれぞれ「Box」といい、それらのうちメタデータを含んでいるものを「moov」といいます。メタデータはメディアデータの処理が終わらないと生成できない(再生時間などが含まれることより)ので、そのままメディアデータの後ろにくっつけられることが多いです。
「メタデータ」と聞くと大したものではないかもしれません。しかしこのメタデータを読み込まないと動画そのものの再生ができません。すなわち転送速度が遅いネットワークにおいて動画を共有する場合において、この「moov」が読み込まれるまでの間、ずっと読み込み中となってしまいます。
そのため、コマンドを使って前にくっつけなおすことで、お気持ち程度に早く再生開始することが可能となります。
コマンド
ffmpeg -i input.mp4 -c:v copy -c:a copy -movflags +faststart output.mp4
今回はコンテナにあるメタデータの位置を書き換えているだけです。そのため-c:v copy
や-c:a copy
の部分は単純に入力ファイルから映像と音声をコピーしているだけですので、環境に合わせて適切に書き換えることをおすすめします。
参考サイト
最後に
ざっくりわかるシリーズのようにあまり厳密性を求めずに書いています。刺さないでください。