バイナリ
とりあえずバイナリがなければ話にならないので、適当にHDDの中を探してみるか、グーグル先生に尋ねてみましょう。
もしなければ、 FFmpegダウンロード お気に入りの動画を携帯で見よう からダウンロードさせてもらいましょう。定期的にffmpegの最新版をSVNからチェックアウトしてコンパイル・配布してくれています。携帯動画変換君に付属しているものを使っても良いのですが、如何せんビルド日時が古く*1、新たにダウンロードし直した方がいいかと。
ダウンロードしたアーカイブを解凍し、適当なフォルダに移動します。可能ならパスの通ったフォルダ(C:\windows とか)にコピーするのが望ましい。
尚、最近の配布分については3G携帯向けlibamrは含まれていません。非GPLなコードが使われているようなので、再配布禁止になってしまったようです。詳しくは:
FFmpeg rev.11662 ダウンロード お気に入りの動画を携帯で見よう
http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2008-January/040059.html
H.264/AACに変換
とりあえず、何かしら適当なムービーファイルを用意しましょう。なければ適当に一般公開されているようなムービーをネットから持ってきましょう。後述しますが、最新版のffmpegでは、特にコーデック指定形式が大幅に変わっているので古い文献はほとんど役に立ちません。
あたりは押さえておく必要があります。
例えば、shunirr.org の中の人が書いていたように、wmv/wma 形式の wmv ファイルをH.264/AAC形式のmovファイルに2-pass encodingで変換するには、スタートメニューからファイル名を指定して実行を開き、cmdと打ち込んでコマンドプロンプトを開きます。そこに
ffmpeg -i hoge.wmv -vcodec libx264 -vb 400k -acodec libfaac -ac 2 -ar 48000 -ab 64k -pass 2 fuga.mp4
を打ち込みます。これで一発。 -vb は映像側ビットレートの指定なので、高画質でエンコードしたいなら適当な数字に置換してやればOK。
対応形式とコマンドのお話
基本的には出力形式を指定してやれば、入力コーデック形式についてはファイルのFour CC*2を利用してほぼ自動で判別してくれるようです。ただし、コンテナの形式に限っては、入力時、出力時に指定された拡張子を基に判断する模様*3。
対応コンテナ/コーデック形式は
ffmpeg -formats
で表示が可能です。が、随分多いので
ffmpeg -formats > format.txt
として外部ファイルに出力してやった方が見やすいです。Cygwin入ってるなら |less でもおk。
この出力内容は大きく二つに分かれており、
File formats:
が対応コンテナ(ファイルフォーマット)の種類、
Codecs:
が映像/音声コーデックの種類を表します。
頭に DEVSDT とかいろいろ並んでいますが、最初3文字の意味は
- D
- デコード可能(変換元として入力対応)
- E
- エンコード可能(変換先として出力可能)
- V
- ビデオ(映像)
- A
- オーディオ(音声)
ですので、ここから目的のコーデックが対応しているかどうか、および引数指定時のコーデック名称をチェックします。
例えばH.264の場合は
D V DT h264
なのでビデオフォーマットとしてデコード可能、ただしエンコードは不可、となります。一方、libx264では
EV libx264
ですので、ビデオフォーマットとしてでコード可能、ただしデコードは不可、となります*4。
これはAAC、mp3でも同じで、デコード時は
D A mpeg4aac D A mp3
ですがエンコード時には
EA libfaac EA libmp3lame
で対応されます。
flv+mp3に変換したいなら、
ffmpeg -i hoge.wmv -vcodec flv -vb 400k -acodec libmp3lame -ab 128k -pass 2 fuga.flv
とかで変換可能。
映像/音声の一方だけ変換するため、コーデックを変換する必要がない場合は、
-vcodec copy -acodec copy
で変換元ファイルの形式がそのまま引き継がれます。