FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video.

GPL/LGPLのもとでフリーソフトウェアとして開発されている動画作成、動画変換、動画ストリーミングソフトウェアおよびライブラリにFFmpegがある。活発な開発、対応している動画データと音データの広さやサポートしている機能の豊富さなどもあって、OSS系ソフトウェアで採用される動画エンジンとして代表的なポジションにある。OSSで公開されている動画オーサリングアプリケーションはffmpeg(1)コマンドへのフロントエンドとして実装されているものも多いほか、動画プレーヤもエンジンにはFFmpegを採用しているものが多い。

撮影した動画を他の形式、特にWebの動画サービス向けに変換したりHTML5 Video用に変更したりする場合、まずFFmpegの利用が検討されることになる。強力なツールだが、操作の基本はコマンドラインツールで、自分でオプションを指定して実行しなければならない。動画データや音データの内容を知らなければ使いにくいツールともいえる。

Mozillaの開発者であるPaul Rouget氏のブログWebM and ffmpeg: concatenate videos and add bumpersにおいて、FFmpegを使ってMP4形式の動画をWebM形式に変換したり、タイトルを作成して動画の先頭に挿入する方法が紹介されている。ffmpeg(1)コマンドの基本的な使い方として参考になる。紹介されているコマンドは次のとおり。なお、実行にはFFmpeg 0.6以降のバージョンが必要。

動画をWebMに変換

ffmpeg -i input.mp4 -f webm -vcodec libvpx -acodec libvorbis -aq 90 -ac 2 output.webm

ffmpeg(1)は基本的に-iで元ファイルを指定し、その後に変換後の出力ファイルを指定する。掲載されている例ではフォーマット(-f)、動画コーデック(-vcodec)、音コーデック(-acodec)、音品質(-aq)、音チャンネル(-ac)も指定されている。ffmpeg(1)で提供されているオプションは多種多様で、オフセットを指定した切り出しやサイズ変更、表示部分を切り取るといったこともできるようになっている。

画像から動画を制作

ffmpeg -loop_input -f image2 -i title.jpg -acodec pcm_s16le -f s16le -i /dev/zero -r 25 -t 5 -map 0:0 -map 1:0 -f webm -vcodec libvpx -ar 44100 -acodec libvorbis -aq 90 -ac 2 title.webm

WebM and ffmpeg: concatenate videos and add bumpersではタイトル表示を追加しており、まずそのタイトル部分を画像から制作している。ffmpeg(1)に「-i ファイル」だけ指定すると、その動画の情報(動画サイズ、フレームレート、音サンプリング周波数など)が表示される。まず動画と同じサイズのタイトル画像をGIMPなどのアプリケーションで制作。その画像ファイルを使って本体の動画と同じ設定で動画を生成する、という手順になっている。ここで実行されているコマンドでは5秒間タイトル画像が表示される動画が生成される。

動画を結合

mkvmerge -o output.webm title.webm +input.webm

動画の結合にはmkvtoolnixに含まれているmkvmerge(1)コマンドを使う例が掲載されている。WebMは簡単に結合できるフォーマットになっている。同じビットレートで同じ数のトラックであればそのまま結合できるようになっており、再エンコードの必要がない。

ffmpeg(1)コマンドのオプションは一見すると複雑に見えるが、動画データや音データの形式が把握できるようになればどれも素直でわかりやすいオプションになっている。コマンドラインでの動画変換が実施できるようになると大量の動画の一括処理などを実施しやすくなるという利点がある。