FFmpegのAMRに関する挙動が変わってた(libamrからlibopencore-amrへ)


とあるプログラムでffmpegをコマンドラインで使って3gpファイルを作成するということをしているんですが、ある時期を境に上手く動かなくなってしまっていたんですね。次のコマンドでエラーが出る。

/usr/bin/ffmpeg -y -i original.mp3 -acodec libamr_nb -ac 1 -ar 8000 -ab 7.95k new.3gp

(中略)

Unknown encoder 'libamr_nb'

原因がわからずしばらく放置していたんですが、わかりました。
libamrってFFmpegで使えなくなったんですね。


情報はこちらから。

リビジョン11660時点

libamrがnonfreeになったそうで
–enable-nonfreeを追加しなければコンパイルできません。

(中略)

リビジョン19631頃

amr-wbとamr-nbが消えてopencore-amrを使用するようになりました。
「–enable-libamr-nb –enable-libamr-wb」の代わりに
「–enable-libopencore-amrnb」と「–enable-libopencore-amrwb」を使用しないといけません。
 

なるほどそうだったのか。
つまり不用意にFFmpegをバージョンアップした俺が悪いんじゃないか…がっかり。。



「libamrがnonfreeになった」というのは文字通り、有償のライブラリになったということのようなのだけど、FFmpegのリリースにはこんな風に書いてあります(強調は引用者)。

July 24, 2009

FFmpeg has removed support for libamr as of svn revision 19365. It has been replaced with support for libopencore-amr. Naturally the configure options have changed. The libamr options have been removed and there are two new options to take their place:

  • –enable-libopencore-amrnb
  • –enable-libopencore-amrwb
The reason for this change is that the libamr license was non-free, while libopencore-amr is licensed under an Apache 2 license. The change was discussed at length on the developer mailing list during May, June, and July. This has several effects:

  • You may now distribute FFmpeg builds with support for dynamically loading libopencore-amr
  • Support for AMR-WB encoding has been removed since libopencore-amr does not support it
 


要するにlibamrのライセンスは元々無料ライセンスではなかった(好意で利用が許可されていた?)のでそれをどうすべきか議論が続いていたのだけど、代替としてApacheライセンスの「libopencore-amr」を使うことで議論がまとまったので差し替えた、というところでしょうか。まぁ確かに当面は問題なくても、GIFみたいにいつ問題になるかはわからないですからね…



ちなみに前述のコマンドはこう改修した

/usr/bin/ffmpeg -y -i original.mp3 -acodec libopencore_amrnb -ac 1 -ar 8000 -ab 7.95k new.3gp

これで問題なく動く。

まぁ、一件落着と言うことで。