先日のエントリー、「ffmpegとmencoderをインストールしてみる」と「ffmpegでAMRを取り扱ってやる」から数日、携帯動画のフォーマット変換をいろいろと実験してみた。が、うまくいかないことばっかし。んで、CODECを追加したり、再インストールしたりしまくったので、ここでもう一度まとめ直し。
詳細は前回までのエントリーを参照ってことで、今回は大まかにメモっていくでごわす。押忍。
今回の主目的は携帯動画のフォーマット変換なんだけど、ついでに色々できるよう、余計なものもいくつかインストールしてみる。liba52とか。
用意したのは以下のとおり。すべてオープンソースで、ネットに転がってますんで好き勝手 wget しましょう。ちなみに、LGPLとGPL入り混じりなので、気にする人は各自調べてくださいまし。
- lame-3.96.1.tar.gz
- ffmpeg-0.4.9-pre1.tar.gz
- 26204-520.zip (amrwb_float用)
- 26104-540.zip (amr_float用)
- 26073-530.zip (amr用)
- faad2-15092004.tar.gz
- faac-18102004.tar.gz
- MPlayer-1.0pre7.tar.bz2
- all-20050412.tar.bz2 (mplayerのcodec類)
まず、lame mp3 をインストール。
# tar xvfz lame-3.96.1.tar.gz # cd lame-3.96.1 # ./configure # make && make install
続いて、ffmpeg 関係。
# tar xvfz ffmpeg-0.4.9-pre1.tar.gz
# mkdir /usr/local/src/ffmpeg-0.4.9-pre1/libavcodec/amrwb_float # unzip 26204-520.zip # unzip 26204-520_ANSI_C_source_code.zip # mv c-code/* /usr/local/src/ffmpeg-0.4.9-pre1/libavcodec/amrwb_float
# mkdir /usr/local/src/ffmpeg-0.4.9-pre1/libavcodec/amr # unzip 26073-530.zip # unzip 26073-530_ANSI_C_source_code.zip # mv c-code/* /usr/local/src/ffmpeg-0.4.9-pre1/libavcodec/amr
# mkdir /usr/local/src/ffmpeg-0.4.9-pre1/libavcodec/amr_float # unzip 26104-540.zip # unzip 26104-540_ANSI_C_source_code.zip # mv c-code/* /usr/local/src/ffmpeg-0.4.9-pre1/libavcodec/amr_float
libavcodec/amr/makefile を以下のように修正。(68行目あたり)
# CFLAGS = -Wall -pedantic-errors -I. $(CFLAGS_$(MODE)) -D$(VAD) CFLAGS = -Wall -I. $(CFLAGS_$(MODE)) -D$(VAD) -DMMS_IO
AC3とかAACへの対応として、liba52とかfaad2とかfaacとか入れてみる。
# tar xvfz a52dec-0.7.4.tar.gz # cd a52dec-0.7.4 # ./configure # make # make install
# mkdir faad2 # tar xvfz faad2-15092004.tar.gz # sh bootstrap # ./configure # make # make install
# tar xvfz faac-18102004.tar.gz # sh bootstrap # ./configure # make # make install
そして、ffmpegのインストール。
# ./configure --enable-amr_nb --enable-amr_wb --enable-amr_nb-fixed \ --enable-mp3lame --enable-faad --enable-faac --enable-a52 --enable-gpl # make # make install
実際に作業しているとき、このffmpegのmakeでエラーが出て、ハマった。amr.cが未定義の関数を参照しているって怒られる。原因がいまいち分からないので、一度amr周辺のもんを全部消して、configureもオプション指定なしでmake。その後、make clean してから同じ手順を踏んだら、うまくいった。何か手順を間違えたのか、依存性の何かがあるのかは謎。教えてエロい人!
続いては、mencoder(MPlayer) 関係のインストール。
# tar -jxvf all-20050412.tar.bz2 # mkdir /usr/lib/win32 # mv all-20050412/* /usr/lib/win32/
# tar -jxvf MPlayer-1.0pre7.tar.bz2 # cd MPlayer-1.0pre7 # ./configure --confdir=/etc/mplayer --disable-gui --language=ja \ --with-win32libdir=/usr/lib/win32 --enable-qtx --enable-external-faad \ --enable-win32 --enable-libavcodec --disable-libavformat \ --enable-amr_nb --enable-amr_nb-fixed --enable-amr_wb --enable-mp3lib # make # make install
と、ここでエラー。
make[1]: *** No rule to make target `amrwb_float/dec_acelp.c', needed by `amrwb_float/dec_acelp.o'. Stop. make[1]: Leaving directory `/usr/local/src/MPlayer-1.0pre7/libavcodec' make: *** [libavcodec/libavcodec.a] エラー 2
仕方ないので、強引な技を展開。先ほど、ffmpeg の libavcodec の下に作成した amr 関連のディレクトリを、MPlayer の libavcodec に cp -fr してみた。すると、上手くいくじゃないか。おお。
これで一件落着かと思い、ffmpeg と mencoder をコマンドラインで叩いたら、また何かエラーとか吐いちゃって面倒くさい。
ffmpeg: error while loading shared libraries: libmp3lame.so.0: ffmpeg: error while loading shared libraries: libfaac.so.0: mencoder: error while loading shared libraries: libfaad.so.0:
これまた強引に、シンボリックリンクを張ってあげた。
# ln -s /usr/local/lib/libfaad.so.0 /usr/lib # ln -s /usr/local/lib/libfaac.so.0 /usr/lib # ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib
これでバッチリ。うまくいかない場合は、configure 時のオプション指定を間違って make している可能性があるので、make clean して再度やり直したりすると、できるかもしれないです。ひたすら configure → make してると、その必死さがマシンに伝わって、うまくいくもんです。ヒドイ話だな、これ。
以上、お疲れさまでした。