CentOS5.3 ffmpegでのflvファイル作成時に音声エンコードが失敗する
手元のCentOS5.3に入っているffmpegでは、flv作成時に音声エンコードが失敗してしまうようです。エンコード終了時に、
lame: output buffer too small (buffer index: XXXX, free bytes: XX)
というようなメッセージが表示されてしまい、できあがったflvファイルも正しく再生できない(早送り等ができないないなど)。
調べてみると音声のmp3エンコードに使っているlameのライブラリのバグ?らしいとのこと。rpmコマンドで確認すると、lameのバージョンは3.98-2の様子。
$ rpm -qa | grep -i lame
lame-3.98.2-1.el5.rf
lame-3.98.2-1.el5.rf
ffmpegは以下のライブラリを使って音声エンコードしているようです。
$ rpm -ql lame
(省略)
/usr/lib/libmp3lame.so.0
/usr/lib/libmp3lame.so.0.0.0
(省略)
(省略)
/usr/lib/libmp3lame.so.0
/usr/lib/libmp3lame.so.0.0.0
(省略)
であれば、このライブラリファイルをバグのないバージョンのものに置き換えればエラーは出なくなるのかな?と。
lameの公式配布版が3.98-2のようなので、開発版?を試してみることに。開発版はcvsで入手可能とのこと。
適当なディレクトリに移動して以下を実行しました。
$ cvs -d:pserver:anonymous@lame.cvs.sourceforge.net:/cvsroot/lame login
$ cvs -z3 -d:pserver:anonymous@lame.cvs.sourceforge.net:/cvsroot/lame co -P lame
$ cvs -z3 -d:pserver:anonymous@lame.cvs.sourceforge.net:/cvsroot/lame co -P lame
lameというディレクトリができるので、移動してconfigureを実行後、rootでインストールします。とりあえず、ライブラリファイルが欲しいだけだったので、現在のライブラリをひとまず上書きしないよう、prefixを指定しています。
$ cd lame
$ ./configure –prefix=/usr/local/bin/lame
$ make
$ su
# make install
$ ./configure –prefix=/usr/local/bin/lame
$ make
$ su
# make install
/usr/local/bin/lame以下にすべてのファイルがあるので、ここからライブラリファイルを見つけ、現在のものと入れ替えます。念のために現在のライブラリファイルをバックアップもしています。
$ cd /usr/lib
$ mv libmp3lame.so.0.0.0 libmp3lame.so.0.0.0.20100101
$ cp /usr/local/bin/lame/lib/libmp3lame.so.0.0.0 .
$ mv libmp3lame.so.0.0.0 libmp3lame.so.0.0.0.20100101
$ cp /usr/local/bin/lame/lib/libmp3lame.so.0.0.0 .
この状態でffmpegでflvファイルを作成すると無事成功するようになりました。たぶん。。mp3の作成でももちろん同じのはずです。
lame-3.98.4-1ではこの問題は起きないようなので、こんなことをしなくても済むようです?