読者です 読者をやめる 読者になる 読者になる

Macに携帯動画用のffmpegを入れる

Mac ffmpeg

Mac OS X(10.5.2/PPC)で携帯動画対応用のコーデックを入れたffmpegをビルドする。configure && make install するだけの簡単なお仕事です!!

なぜこんなことをやっているかというと、1%くらい仕事のためであり、1%くらい今依頼されている原稿ためであり、1%くらい今月末のDjnago勉強会のためであり、残り97%くらい現実逃避のためである。

libamrnb/libamrwb

libamrnbは3GPPで使われる音声コーデックAMR-NB(narrow-band)をデコード/エンコードするためのライブラリ。libamrwbはその広域版。NB(narrow-band)に対してWB(wind-band)ということ。

$ curl -LO http://ftp.penguin.cz/pub/users/utx/amr/amrnb-7.0.0.0.tar.bz2
$ bzip2 -dc amrnb-7.0.0.0.tar.bz2 | tar xvf -
$ cd amrnb-7.0.0.0
$ ./configure
$ make
$ sudo make install

libamrnbが携帯対応では一番重要!・・・のはずなんだけれども、今回取得してみたコードでは、あまり本質的ではない箇所(prepare_sources.sh)でmakeが上手く行かなかったので、さっくと修正してみた。今までFedora Core 6/7, CentOS 5で試してきてlibamrnbのmakeに失敗したことはないので、僕の環境だけの問題かもしれない。

2c12
<     tr -d '\r' <$FILE >${FILE#*/}.new
---
>     nkf -Lu $FILE > ${FILE#*/}.new

libamrwbをインストール。

$ curl -LO http://ftp.penguin.cz/pub/users/utx/amr/amrwb-7.0.0.2.tar.bz2
$ bzip2 -dc amrwb-7.0.0.2.tar.bz2  | tar xvf -
$ cd amrweb-7.0.0.2
$ ./configure
$ make
$ sudo make install

libfaac/libfaad

libfaac/libfaadはAACを扱うためのライブラリ。AACに対応している携帯はDoCoMoとauの新しめの携帯だが、入れておけばiPod用のAACも生成できるので損は無い。

$ curl -LO http://downloads.sourceforge.net/faac/faac-1.26.tar.gz
$ tar xzf faac-1.26.tar.gz
$ cd faac
$ ./bootstrap
$ ./configure
$ curl -LO http://downloads.sourceforge.net/faac/faad2-2.6.1.tar.gz
$ tar xzf faad2-2.6.1.tar.gz
$ cd faad2
$ ./bootstrap
$ ./configure

x264

H264で動画をエンコードするために必要。H264に対応した携帯機種は限られているけど、入れておくとiPodで動画を見る時に便利かも。最新版は常にSubversionレポジトリで提供されるということなので、trunkからチェックアウトしてインストール。

$ svn co svn://svn.videolan.org/x264/trunk x264
$ cd x264
$ ./configure
$ make
$ sudo make install

mp3lame

これは携帯動画対応だけを考えるならば入れる必要がないと思うが、「枯れたライブラリ」であると認識しているので、とりあえず入れておく。

$ curl -LO http://downloads.sourceforge.net/lame/lame-3.97.tar.gz
$ tar xzf lame-3.97.tar.gz
$ cd lame-3.97
$ ./configure
$ make
$ sudo make install

ffmpeg

ffmpegの本体をチェックアウトしてビルド。

$ svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
$ cd ffmpeg
$ ./configure --enable-libamr-nb --enable-libamr-wb --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libx264 --enable-gpl --enable-nonfree

ちなみに、ここまでやったことはffmpegXをダウンロード/インストールして、その中に含まれているffmpegのバイナリ(/Applications/ffmpegX.app/Contents/Resources/ffmpeg)を使えばいいとは思うけど、今回は自分でコンパイルすることが重要だったのでスルーする。ちなみにffmpgXのconfigureオプションは次のようになっていた。faac, faad, amrnbが有効になっているので、これだけで携帯向けに動画変換するには必要十分であるとは思う。

./configure --enable-mp3lame --enable-gpl --disable-vhook --disable-ffplay --disable-ffserver --enable-a52 --enable-xvid --enable-faac --enable-faad --enable-amr_nb --enable-pthreads --enable-x264

確認する

あんまりffmpegのオプションを分かっていないんだけれども、FLVをH264/AACに変換するならば、こんな感じ?

$ ffmpeg -i input.flv -vcodec libx264 -acodec libfaac output.mp4

FLVを携帯向けの3GPPに変換するならば、こんな感じ。"-t 60"で再生秒数を制限しているのは、僕が持っているDoCoMo端末は500KBまでしか動画をダウンロード再生できないから。903i以降の新しめのDoCoMo端末ならば10MBまでダウンロード再生できるので、互換性を考慮しないならば、適宜オプションを設定するといいと思う。あと、"-f 3gp"を指定して3GPPで出力しているけど、auの新しめの機種?ならば、"-f 3g2"で3GPP2で出力することも必要だと思う。この辺りのノウハウはブログの一エントリでは語り尽くせない。

$ ffmpeg -y -i input.flv -vcodec mpeg4 -s 128x96 -r 7 -acodec libamr_nb -ac 1 -ar 8000 -ab 12.2k -b 24k -f 3gp -t 60 output.3gp


ffmpegのオプションで参考になるは、携帯動画変換君のwikiに記載されている各端末毎のオプションや、PlaggerのFilter::FFmpeg関連で紹介されているエントリだが、最新のffmpegではAACエンコードには-acodec aacではなく-acodec libaac、H264のエンコードには、-vcodec h264ではなく-vcodec libx264という風にオプションが変わったので注意が必要。