FFmpeg、最初の第一歩

以前、配信用動画のフォーマットを変換する仕組みを作成するのに調査していたまま、まとめもなにもしないまま放置していたFFmpegの基本的な利用方法についてまとめてみます。

ちなみに何で放置してたかっていうと、最終的に色々な諸事情でmencoderを利用して動画のフォーマット変換することになったからです(笑)。mencoderについてもいずれ簡単にまとめてみたいと思います。

インストール

凝ったことをしないのであればLinuxならyumやapt-get、MacOS Xならmacportsを利用してインストールするのがお手軽です。例えばMacOS Xならこんな感じ。

sudo port -d install ffmpeg

あるいは

sudo port -d install ffmpeg-devel

なお、

port variants ffmpeg
ffmpeg has the variants:
   no_gpl: disallow use of GPL code, license will be LGPL
   no_mmx: disable all x86 asm optimizations
   speex: enable Speex decoding via libspeex

port variants ffmpeg-devel
ffmpeg-devel has the variants:
   jack: Enable jack input device support (currently broken)
   no_gpl: disallow use of GPL code, license will be LGPL if +no_nonfree is selected
   no_mmx: disable all x86 asm optimizations
   no_nonfree: disallow use of nonfree code, libraries and binaries will be redistributable under GPL/LGPL
   speex: enable Speex decoding via libspeex

とあるので、variantsの設定はお好みに応じて設定ください。とはいえ実際に試してみたところMacOS X 10.4ではffmpeg-develのインストールに失敗するようですが(ffmpegは大丈夫)。

変換の基本

FFmpegにしてもmencoderにしても、googleなどで使い方を調べてるとすごい複雑なコードサンプルが掲載されてるページが多くて出てきて「これ、自分でも使えるのかなぁ?」と不安になりがちですが(ffmpeg -hのヘルプの文章量もなかなか手強い……)、

ffmpeg (変換元ファイルのオプション指定) -i 変換元ファイル名 (変換後ファイルのオプション指定) 変換後ファイル名

で変換可能です。即ち最も最低限、且つ基本的なコンバートはとても簡単で、仮にinput.movをoutput.flvに変換したい場合は

ffmpeg -i input.mov output.flv

で変換できるということです。ちなみに変換後の動画フォーマットは変換後ファイル名の拡張子からFFmpegが対応する範囲で自動的に判別してくれます。で、これを基本として最適化のために色々なオプションを付加していくことになります。

変換元ファイルのオプション指定は高度な変換指定をする場合以外はそんなに利用する機会はないと思うんですが、例えばFFmpeg Documentationによると 入力ファイルのフレームレートを1fpsに強制し(raw フォーマットの場合のみ正しい)、出力ファイルのフレームレートを24fpsにする 場合の例として

ffmpeg -r 1 -i input.m2v -r 24 output.avi

といったサンプルが掲載されています。

変換後ファイルのオプション指定はだいたいビデオ用オプション、オーディオ用オプションに分かれ、変換後の動画に影響します。

主なビデオ用オプション

-b bitrate
ビデオのビットレートをbit/sで設定
-vframes number
録画するビデオフレームの数を設定
-r fps
フレームレートをHzで設定
-s size
フレームサイズを設定。書式は”wxh”という書き方しますが’svga'(800×600)とか’xga'(1024×768)などを記述しても認識してくれます
-aspect aspect
アスペクト比を設定(FFmpeg Documentationによると4:3、16:9、1.3333、1.7777のどれか)
-vcodec codec
ビデオのコーデックを codec に強制する場合に指定

主なオーディオ用オプション

-ab bitrate
オーディオビットレートをbit/sで設定
-ar freq
オーディオサンプリング周波数をHzで設定
-ab bitrate
オーディオビットレートをbit/sで設定
-acodec codec
オーディオのコーデックを codec に強制する場合に指定
-vol volumes
変換元動画の音量を256として音量を設定(2倍の音量にしたい時は512)

本文中でもこれまで何度かFFmpeg Documentationに触れてますが、本家のドキュメントの和訳ページで随分詳しい内容が記載されてますんでFFmpegを利用する際の大きな助けになると思います。