MinGW+ffmpeg(3)faac,faad
これらはどちらもAudioCoding.comからリリースされている。情報源を忘れてしまったが、猫Pの記憶が確かであればMPEG規格上のリファレンス実装に当たるはずで、信頼性が高い。また、サイトにリンクが張られていることからもわかるように、CD/DVD書き込みソフトで有名なneroとも関連が深い。
ただし、ソースはオープンだが開発はオープンではなく、マルチプラットフォームへの対応度や実行速度は優れているとは言い難い。まぁ映像のエンコードに比べれば微々たる物なのでそれほど問題はないだろう。
faac/faadのビルドは環境条件が厳しい。bash-2.05やgcc4.2.1もダメだ。今更MinGW(4)や今更MinGW(5)を参考に確認されたい。
faac
faacは前バージョンである1.25ではビルドに問題があった。ソースコード中(autotools関連)に改行コードがLFではなくCRLFになっている物が複数あり、これが原因でそのままではビルドが通らなかった。
現在の1.26ではこれは修正され、素直に通るようになっている。コマンドは以下の通り。
$ ./bootstrap $ ./configure --disable-shared --without-mp4v2 $ make $ cp include/faac.h /mingw/include/ $ cp include/faaccfg.h /mingw/include/ $ cp libfaac/.libs/libfaac.a /mingw/lib/
--without-mp4v2によりfaad.exeで出力形式にmp4がサポートされなくなってしまうが、ffmpegで使用するのは純粋なエンコード機能のみなので問題ない。mp4をサポートさせるには色々と修正が必要になるため、ここでは割愛する。
なお、ネットを検索してみるとパッチ当てや特殊なオプションを指定するように指示するサイトもあるようだが、猫Pの認識では上記の通りで問題ない。
faad
ここでいうfaadは、正確にはfaad2だ。faadとfaad2の機能的な違いは把握していないが、少なくともライセンスに違いがある。faadはLGPLでfaad2はGPLだ。ちなみにfaacはLGPL。なぜこのような事態になっているのかは不明である。ここではfaad2を単にfaadと呼ぶ。
さて、faadのビルドには一点だけ事前のソース修正が必要だ。faad2/common/mp4ff/mp4ff_int_types.hの
4:#if defined (_WIN32)
を
4:#if defined (_WIN32) && !defined(__MINGW32__)
と修正しよう。MinGWで定義済みのタイプをfaadで再定義されることを回避する。あとはドキュメント通りに
$ cd faad2 $ autoreconf -vif $ ./configure --disable-shared $ make $ cp include/faad.h /mingw/include/ $ cp include/neaacdec.h /mingw/include/ $ cp libfaad/.libs/libfaad.a /mingw/lib/
でOKだ。
なお、ネットを検索してみるとパッチ当てを指示するサイトもあるようだが、猫Pの認識では上記の通りで問題ない。
faad2のうんちく
世界に標準的に流通しているAACはLCプロファイルと呼ばれる規格のAACだが、faadはこれ以外の規格(MAIN,LTP等)にも対応している。また、LCプロファイルの中にはHE-AACと呼ばれるより進化した規格があるが、これにも対応している。さらに、ソースを見る限りではHE-AAC+にも対応しているようだ。HE-AACはaacPlus v1というCoding Technologies社の商標で呼ばれることも多く、同様にHE-AAC+はaacPlus v2とも呼ばれる。このあたりの名称はかなりいい加減で、他にもいろいろな表記がある。例えばHE-AAC v2など。
HE-AACはSpectral Band Replication(SBR)という低周波から高周波を補完する技術を使用しており、HE-AAC+はSBRに加えてParametric Stereo(PS)という1chの情報をパラメータで左右に振り分けステレオ化する技術を使用している。このことから、例えばHE-AAC+がAAC+SBR+PSといった表記をされることもある。
なお、faacはSBR/PSには対応していないようだ。
このあたりの詳細はまたの機会に書いてみたい。
最終更新時間:2008年04月06日 11時37分42秒