ffmpegでAMRを取り扱ってやる

携帯ムービーを取り扱う上で避けて通れないのが、このAMR。第3世代携帯でスタンダードな音声フォーマットってわけで、AMRを制するものが携帯ムービーを制するんじゃないの!(実際そんなことない)

mencoderでは標準で取り扱えそうに見えるんだけど、やっぱそこはアレ。ffmpegから一発でバチコーンって全部やるのが男のロマン、略してオマンなのだよ。紫煙くゆらせてJAZZでも聴きながら、余裕ぶっこいて片付けてやりましょう。俺は徹夜でやったけどな。 ...orz

とは言え、よく分からなかったんで検索してみました。以下、参考にしたページ。

Ume Room サーバ構築奮闘記
渋谷セルリアンタワーで働く社長のブログ 続・3gp-flv

ここで両者こぞってlame mp3をインストールしてるので、真似して入れてみる。ffmpegでmp3使うために必要らしい。もう、必死でコピペですよ。

# tar xvfz lame-3.96.1.tar.gz
# cd lame-3.96.1
# ./configure
# make && make install

ここからが本番。ffmpegでAMRのCodecを利用する準備。3gppがリリースしてる音声コーデックをDLして、libavcodecに突っ込んであげる。あ、くれぐれも優しくね。

# wget http://www.3gpp.org/ftp/Specs/2004-03/Rel-5/26_series/26204-520.zip
# mkdir /usr/local/src/ffmpeg-0.4.9pre1/libavcodec/amrwb_float
# unzip 26204-520.zip
# unzip 26204-520_ANSI_C_source_code.zip
# mv c-code/* /usr/local/src/ffmpeg-0.4.9pre1/libavcodec/amrwb_float


# wget http://www.3gpp.org/ftp/Specs/2004-03/Rel-5/26_series/26073-530.zip # mkdir /usr/local/src/ffmpeg-0.4.9pre1/libavcodec/amr # unzip 26073-530.zip # unzip 26073-530_ANSI_C_source_code.zip # mv c-code/* /usr/local/src/ffmpeg-0.4.9pre1/libavcodec/amr

# wget http://www.3gpp.org/ftp/Specs/2004-03/Rel-5/26_series/26104-540.zip # mkdir /usr/local/src/ffmpeg-0.4.9pre1/libavcodec/amr_float # unzip 26104-540.zip # unzip 26104-540_ANSI_C_source_code.zip # mv c-code/* /usr/local/src/ffmpeg-0.4.9pre1/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

あとは、インストールなんで、そこは機械にまかせて高みの見物といきましょう。串団子とか食べてお茶でも飲んでりゃ、気付くとできあがってます。素敵。

# ./configure --enable-amr_nb --enable-amr_wb --enable-mp3lame
# make && make install

configureしたときに、何か "NOTICE" とか言っちゃって「構って欲しい」オーラ全開になるんですが、それは上記で既にやっているのでシカトです。甘やかしてはならぬ。細かいことを気にしてはならぬ。それが男子の厨房。(なんだそれ)

# ffmpeg -y -i 05-05-15_15-12.3gp -r 29.97 -vcodec flv -acodec mp3 3gp.flv

これを実行したところ、ffmpegのヤツ、マシンの中心で「Segmentation fault(セグメンテーション違反です。)」とか叫ぶんです。でも、細かいことは気にしない。見なかったことにする。だって、ちゃんとファイルできてるし。そんで再生したら、映像も音も出てるしバッチリだよー。素敵。

と思ったら、なんかflvの再生速度が遅い…。声がみんなジャイアント馬場になってる。それはそれで面白いんだけどさ…。次に立ちはだかる難題amcとともに、今後の課題としときまふ。ううう。

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt4/mt-tb.cgi/224
masato at 2006年3月 2日 18:51

ちょうど同じ問題にぶつかって、修正できたみたいなので報告します。
次のパッチをあてるとセグらずに実行できました。

diff -uNr ffmpeg-0.4.9-pre1-org/libavcodec/utils.c ffmpeg-0.4.9-pre1/libavcodec/utils.c
--- ffmpeg-0.4.9-pre1-org/libavcodec/utils.c 2006-03-02 17:52:33.000000000 +0900
+++ ffmpeg-0.4.9-pre1/libavcodec/utils.c 2006-03-02 18:40:12.000000000 +0900
@@ -520,6 +520,10 @@
{
int ret;

+ if (buf_size codec->decode(avctx, samples, frame_size_ptr,
buf, buf_size);

masato at 2006年3月 2日 18:55

なんかコメントだとうまく貼り付けれないので
http://bz2.jp/misc/ffmpeg-0.4.9-pre1.patch
に置きました