libfaacは、以下の場所にあります。
http://www.audiocoding.com/
右サイドバーののDownloadsから、
http://www.audiocoding.com/downloads.html
FAAC Sourceの圧縮形式が3種類ある中で、ファイルサイズが小さいTAR.BZ2 Packageをダウンロードします。
faac-1.28.tar.bz2を、適当なディレクトリに保存します。
MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xjf faac-1.28.tar.bz2
$ cd faac-1.28
パッチファイルfaac-1.28.diffをダウンロードして、以下のコマンドを実行。
$ patch -p1 < faac-1.28.diff
これで、./configureで --without-mp4v2 を付けなくてもコンパイルできるようになります。
以上の修正が終わったら、
$ ./bootstrap
$ ./configure --prefix=/mingw
※上記パッチを適用しない場合は
$ ./configure --prefix=/mingw --without-mp4v2
としてください。
$ make
$ make install
以上で終了です。
2009年02月11日
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/26604536
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/26604536
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
まず、パッチを当てたfrontend/Makefile.amが機能していないのか、-lws2_32が指定されません。
それから、TDMさんとこのGCC4.3.3を使っているのですが、やっぱりlibstdc++.aでコケます。
前にやった時にどうやって回避したのか忘れちゃいました。しかもあろうことかアンインストールしているんでffmpegのコンパイルができません。
どうしたらいいんでしょう…(>_<)
./configureで--without-mp4v2をつければ、とりあえずffmpegのコンパイルに必要なライブラリはできるかとは思います。
mp4v2のライブラリはfrontend(faac.exe)で出力したい場合に必要だったと思ったのですが、違うのかな?
あとlibstdc++.aでこける件ですが、ひょっとしてMinGWを複数バージョン導入されていませんか?
もしそうなら、faac/libtoolが他バージョンのMinGWのlibstdc++.aを見つけてしまい、それでシンボルが解決されていませんでした。
こちらの環境ではlibtoolの
sys_lib_search_path_specのパスを変更することで回避できました。
具体的には/mingw/lib(GCC-3.4.5をインストールしてます)となっているところを、変更することで回避できました。
ご参考まで。
>-lws2_32が指定されません。
の件ですが、パッチをあててから、bootstrapの実行をしているでしょうか?
こちらでCVSのソースで確認してみましたが、問題ありませんでしたよ。
ただ、-lws2_32は、bootstrapをしても付かなかったので、手動でつけました。
そもそも、bootstrapでエラーっぽいのばっかりでるのがいけないのかもしれません。
0 [main] perl 12228 open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
./bootstrap: line 3: 12228 Segmentation fault (core dumped) aclocal -I .
0 [main] perl 11804 open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
./bootstrap: line 4: 11804 Segmentation fault (core dumped) autoheader
0 [main] perl 10076 open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
./bootstrap: line 10: 10076 Segmentation fault (core dumped) automake --add-missing
0 [main] perl 12156 open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
./bootstrap: line 11: 12156 Segmentation fault (core dumped) autoconf
こんなのばっかりです。automakeとautoconfはちゃんと入れてあるんですけどね…?
stackdumpがでるのは、なんでしょうね。
こちらでも高負荷で不安定なときにでるときがあります。
nice ./bootstrap とかでプロセスの優先度を下げてみるとか、どうでしょう?
あとはMSYSのバージョンとperl,autoconf,automakeなどのファイルの整合性がとれてないからとかかなぁ?
MSYSのDLLのバージョンの問題とか、他の関連ファイルとの整合性とか、ややこしそうですね^^;
テクノロジープレビューの新しいバージョンに一部更新するにしても、整合性が心配ではあります。
automake,autoconf関連は、私もいろいろ試行錯誤した記憶が、、。複数バージョン、どうやって導入したっけなぁ。
結局/bin以下のもとのファイルをリネームして、バックアップしておいて、新しいのを/usr/local/binに導入したんだったかな、、。
ちょっと忘れてしまいました。
私の環境もあまり安定しているとはいえないもので^^;
先に書いたように高負荷時にstackdump起こりますから^^;
やったのはTDM's GCC/mingw32 Buildsから4.3.3-tdm-1のSJLJ Unwindingの各コンパイラをダウンロードして、c:\mingw以下に展開しました。gcc --versionで4.3.3になっているのも確認しましたが、faacのmakeが以下のように止まります。やめとけばよかった…。
/bin/sh ../libtool --mode=link gcc -O2 -Wall -o faac.exe main.o input.o ../libfaac/libfaac.la ../common/mp4v2/libmp4v2.a -lm -lstdc++ -lws2_32
gcc -O2 -Wall -o faac.exe main.o input.o ../libfaac/.libs/libfaac.a ../common/mp4v2/libmp4v2.a /mingw/lib/libstdc++.a -lws2_32
c:/mingw/lib/libstdc++.a(eh_throw.o):eh_throw.cc:(.text+0x7b): undefined reference to `__w32_sharedptr_unexpected'
c:/mingw/lib/libstdc++.a(eh_throw.o):eh_throw.cc:(.text+0x8c): undefined reference to `__w32_sharedptr_terminate'
c:/mingw/lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0x4e): undefined reference to `__w32_sharedptr'
c:/mingw/lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0xb9): undefined reference to `__w32_sharedptr'
c:/mingw/lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0x179): undefined reference to `__w32_sharedptr'
c:/mingw/lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0x186): undefined reference to `__w32_sharedptr'
c:/mingw/lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0x1e3): undefined reference to `__w32_sharedptr'
c:/mingw/lib/libstdc++.a(eh_globals.o):eh_globals.cc:(.text+0x1ef): more undefined references to `__w32_sharedptr' follow
c:/mingw/lib/libstdc++.a(eh_terminate.o):eh_terminate.cc:(.text+0x67): undefined reference to `__w32_sharedptr_terminate'
c:/mingw/lib/libstdc++.a(eh_terminate.o):eh_terminate.cc:(.text+0x97): undefined reference to `__w32_sharedptr_unexpected'
c:/mingw/lib/libstdc++.a(eh_terminate.o):eh_terminate.cc:(.text+0xb3): undefined reference to `__w32_sharedptr_terminate'
c:/mingw/lib/libstdc++.a(eh_terminate.o):eh_terminate.cc:(.text+0xd3): undefined reference to `__w32_sharedptr_unexpected'
collect2: ld returned 1 exit status
make: *** [faac.exe] Error 1
そのエラーは MinGW の gcc 3.4.5 がインストールされているところに gcc 4.3.3 を上書きした際に起こるエラーで、違うバージョンの libstdc++.a をリンクしようとしてしまっています。
本来は /mingw/lib/gcc/mingw32/4.3.3/libstdc++.a の方がリンクされるべきなのですが、MinGW の gcc 3.4.5は /mingw/lib/libstdc++.a に c++ のライブラリを置いているのでこちらが先に見つかってしまうためです。
/mingw/lib/libstdc++.aと/mingw/lib/libstdc++.laを削除してからもう一度makeしなおしてみてください。
ついでに、TDM氏のgcc4.3.3のライブラリは全部/mingw/lib/gcc/ming32/4.3.3/以下にあるので、
/mingw/lib/libsupc++.a
/mingw/lib/libsupc++.la
/mingw/lib/debug/libstdc++.a
/mingw/lib/debug/libstdc++.la
も gcc 4.3.3 を上書きしたのであれば不要です。これも間違ってリンクされるとトラブルの元なので一緒に削除してしまうと良いと思います。
1)./configureで-mtuneの指定にamdfam10 or nativeとするとmakeに失敗する。他のCPU指定ではうまくいくので、これはまだいいとして
2)gigabeat用のwmvファイルをffmpegで作成しようとするとffmpegが落ちる。ここの管理人さんがコンパイルされたffmpegだと大丈夫なので、私の作成したのがおかしいんだと思います。但し私が作成したffmpegでもここの【動画】QVGA高画質15fpsステレオ FFmpeg最新版として載っているファイルなら作成できるので一部のライブラリがおかしいように思います。
ffmpeg -i hoge.mpg -vcodec wmv2 -b 700kb -re -s 320x240 -acodec wmav2 -ab 96kb -ac 2 -ar 44100 hoge.wmv
としています。これでffmpegを起動すると、一通りのメッセージが表示され、press [q] to stop encodingと表示され、エンコードが始まったとたんに落っこちます。
make >make.log 2>&1 等でログを保存してテキストエディタでみてみるとどこで問題が起きているか分かる可能性があります。
まずはこの辺から確認してみてください。
(ログを保存するときは make -j2 のように並列で動かすとごちゃごちゃになるので -j オプションは指定しないでやってください。)
2) の方は、gcc 4.3.3 を使う場合 -fno-tree-ch と -fno-common をつけてコンパイルしないと不正終了する場合がありますので、まず --extra-cflags に上記の2つを加えているか確認してください。
それから、
・./configure --enable-memalign-hack --enable-postproc といった最小構成でコンパイルしてみる
・--disable-sse --disable-ssse3 で SSE 以降のアセンブリを無効にしてみる
とかをやってみてはどうでしょうか。
1)についてですが、
1.makeにCPU指定はできません。
2. http://www.fan.gr.jp/~ring/doc/gcc_i386_option.html
を見ると、amdfam10 or nativeというタイプ指定は存在しません。
このどちらかに当てはまるのではないかと思います。
お騒がせしたautoconf関連のエラーについて、いろいろやるうちに直ってしまいました。
現在、autoconfは2.56、automakeは1.7.1で安定しています。あまり最新版を追いかけてはいけないようですね。
以上、ご報告まで。
>Kazuki Ashiyaさま
環境が安定したようでよかったですね。
>2. http://www.fan.gr.jp/~ring/doc/gcc_i386_option.html
を見ると、amdfam10 or nativeというタイプ指定は存在しません。
については、上記サイトの情報が少し古いためです。
gcc-4.3.0系ではnativeやamdfam10といった指定が可能です。
詳しくは↓をご確認ください。
http://gcc.gnu.org/onlinedocs/gcc-4.3.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options
エラーが起きる理由はちょっとわかりかねますが^^;
みなさんが代わりに回答してくださって、とても助かります。
いつか掲示板を設置して、過去のコメントなども見られるようにしたいです。
今日、faac-1.28をダウンロード、パッチを当ててコンパイルしてみたのですが、最後の方で
...libtool: line 487: CDPATH: command not found
libtool: Version mismatch error. This is libtool 2.4, but the definition of this LT_INIT comes .....
とエラーを吐いてコンパイルできません。
一通り調べてみたのですが、初心者なものでよくわかりませんでした。
どうすればコンパイルできるのでしょうか?
bootstrapを実行していないとか、何か手順を飛ばしていませんか?
あと、エラーメッセージは、他にヒントになるようなものは出ていませんでしたか?
私の環境でもやり直してみたのですが、エラーが再現できず、分かりませんでした。
すでに解決済みでしたらすみません。
bin/m4が古くてbootstrapが異常終了したまま構わず処理を続けるとそのエラーが再現しますね
アップデートしましょう
どうしても分からなかったのですが、原因はm4だったんですね。
ちなみに、私の環境では
m4 (GNU M4) 1.4.13
です。
情報ありがとうございました。
少し前にこのサイトを参考にさせていただいて、faac内蔵のffmpegをコンパイルしたのですが、x264を使うエンコード時に、オプションに -profile aac_low をつけると、
Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, ra
te, width or height
とエラーをはきます。
どうすればエンコードできるのでしょうか?
エラーになるのは、-profile aac_low を付けた時だけですか?
もしそうでしたら、audio profileという意味で、
-aprofile aac_low
としてみてください。
これでもダメでしたら、他のオプションに原因があると思います。
-aprofile オプションを使って変換できました。
ありがとうございます。