いよいよ、FFmpegのコンパイルです。
bash-2.0だと、configureの判定ルーチンで引っかかって、
Broken shell detected. Trying alternatives.
というメッセージが出ますので、MinGWのwebページから
bash-3.1-MSYS-1.0.11-1.tar.bz2
をダウンロードして、MSYSのsh.exeを更新しておくと良いです。
最近は、gcc4.2.2でしかコンパイルしていなかったので気がつかなかったのですが、gcc3.4.xだと、コンパイルできたように見えても、ffmpeg.exeを実行するとクラッシュするようです。
2008/01/13追記
と思って、久々にrev.11518をgcc3.4.2でコンパイルしてみたら、正常に動作しました。
いつの間にか修正されていたようです。
安定版の最新はgcc4.2.2ですが、MinGWのwebページにはgcc4.2.1までしかないので、とりあえずそれをインストールしておきましょう。
C:\MinGWに環境があれば、以下のファイルをダウンロードして、C:\MinGWの下に解凍すればOKです。
gcc-core-4.2.1-sjlj-2.tar.gz
gcc-g++-4.2.1-sjlj-2.tar.gz
自分でgccをビルドするのは面倒だけど、gcc4.2.2を使いたいという方は、以下の所からダウンロードできます。
TDM's Experimental GCC/MinGW32 Builds
http://www.tdragon.net/recentgcc/
以下のライブラリは、あらかじめインストールしておいてください。
この記事を書いた時点より、新しくなっているものもありますので、それぞれの記事で確認してください。
nasm-0.98.39
yasm-0.6.2
pthreads-w32-2-8-0-release
zlib-1.2.3
a52dec-0.7.4
amrnb-7.0.0.0 (3GPP 26104-700)
amrwb-7.0.0.2 (3GPP 26204-700)
faac-1.26
faad2-2.6
gsm-1.0.12
lame-3.97
libnut-512
libogg-1.1.3
libvorbis-1.2.0
libtheora-1.0beta2
x264 rev.702
xvidcore-1.1.3
FFmpegは、以下の場所にあります。
http://ffmpeg.mplayerhq.hu/
x264と同様、svnがインストールされていれば、以下のようにして、ソースファイルを拾ってこれます。
$ svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
svnがインストールされていない場合でも、とりあえず、snapshotのソースファイルを拾ってくればコンパイルできます。
Download and SVNから、
http://ffmpeg.mplayerhq.hu/download.html
full checkoutの、
ffmpeg-checkout-snapshot.tar.bz2を、適当なディレクトリに保存します。
MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xjf ffmpeg-checkout-snapshot.tar.bz2
$ cd ffmpeg-checkout-2007-12-10
ソースファイルを展開して作成されるディレクトリは、snapshotの日付になっていますので、その時点のディレクトリ名に読み替えて下さい。
1571行目の後、以下のように、elif check_libから2行追加します。
if enabled pthreads; then
if check_func pthread_create; then
:
elif check_func pthread_create -pthread; then
add_cflags -pthread
add_ldflags -pthread
elif check_func pthread_create -pthreads; then
add_cflags -pthreads
add_ldflags -pthreads
elif check_lib pthread.h pthread_create -lpthread -lwsock32; then
add_cflags -DPTW32_STATIC_LIB
elif ! check_lib pthread.h pthread_create -lpthread; then
die "ERROR: can't find pthreads library"
fi
fi
1611行目に、-lpthread -lwsock32を追加。
修正前) enabled libx264 && require x264 x264.h x264_encoder_open -lx264
修正後) enabled libx264 && require x264 x264.h x264_encoder_open -lx264 -lpthread -lwsock32
次に、libavcodec/pthread.cを修正します。
パッチファイルffmpeg-PTW32_STATIC_LIB.diffをダウンロードして、以下のコマンドを実行。
$ patch -p0 < ffmpeg-PTW32_STATIC_LIB.diff
rev.11142以降、携帯動画変換君で、以下のようなエラーが出る場合があります。
A>ConvertMovieToFile:NewMovieFromFile Error
A>Dialog : 処理実行中にエラーが発生しました [Error:-8971]
その場合は、こちらの修正も試してみてください。
修正が終わったら、configureを実行します。
--enable-libogg は、configureから削除されています。
$ ./configure --enable-memalign-hack --enable-pp --enable-swscaler --enable-gpl --enable-liba52 --enable-libamr-nb --enable-libamr-wb --enable-libfaac --enable-libfaad --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libvorbis --enable-libtheora --enable-libx264 --enable-libxvid --disable-ffserver --disable-ffplay --enable-avisynth --enable-small --enable-pthreads --extra-ldflags=-static --extra-cflags="-fno-strict-aliasing"
問題なければ、以下のようなメッセージが出ます。
install prefix /usr/local
source path /c/TEMP/ffmpeg-checkout-2007-12-10
C compiler gcc
make make
.align is power-of-two no
ARCH x86_32 (generic)
big-endian no
MMX enabled yes
CMOV enabled no
CMOV is fast no
EBX available yes
EBP available yes
gprof enabled no
debug symbols yes
strip symbols yes
optimizations small
static yes
shared no
postprocessing support yes
software scaler enabled yes
video hooking no
network support yes
IPv6 support no
threading support pthreads
SDL support no
Sun medialib support no
AVISynth enabled yes
liba52 support yes
liba52 dlopened no
libamr-nb support yes
libamr-wb support yes
libdc1394 support no
libfaac enabled yes
libfaad enabled yes
libfaad dlopened no
libgsm enabled yes
libmp3lame enabled yes
libnut enabled yes
libtheora enabled yes
libvorbis enabled yes
x264 enabled yes
XviD enabled yes
zlib enabled yes
License: GPL
(長いので、全部見たい方はこちらをどうぞ。)
Creating config.mak and config.h...
その後、
$ make
ffmpeg.exeが出来ていれば完了です。
2007年12月11日
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/7996502
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/7996502
※言及リンクのないトラックバックは受信されません。
この記事へのトラックバック
結局自分でのGCC4.2.2のビルドはうまくいきませんでした(泣)
やっぱりlibstdc++-v3でエラーになります
TDM's Experimental のGCC使わせてもらって
GCC4.2.2環境の構築できました!!
これでクラッシュにおびえずにコンパイルができます
ありがとうございました
また何かありましたら
質問や書き込みをすると思いますが
そのときはよろしくお願いします
ん…、ビルドできませんでしたか…。
configureの時にコケているかもしれないので、
\i686-pc-mingw32\libstdc++-v3\config.log
などを見たら、何かわかるかもしれません。
TDM入れるときにMINGWを
いったんすべて消してしまったので
次に挑戦するときは調べてみます
ありがとうございました
使っているだけではつまらないので
コンパイルにも挑戦しようかと思ったのですが、
configureを走らせるといつもこんなエラーが出ます。
ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later.
どういうことなんでしょう?
あまり詳しくないのですが、コメントしてみます。
メッセージだけ見ると、w32apiのバージョンが古いということみたいですね。
http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=11550&release_id=645278
↑からw32apiの新しいバージョンを導入するのが一つ。
もしw32apiのパッケージが新しいのに、エラーが出る場合、関連するライブラリが導入できていない可能性があるかも知れません。
たとえばlibnutで以下の修正をしていなくて、似たようなエラーがでた覚えがあります。
○ftelloをftellに修正する。
参考:
http://ffmpeg.arrozcru.org/wiki/index.php?title=Libnut
見当違いのコメントでしたら、すいません。
パッケージの問題でしたか。うまくconfigureできるようになりました。これで何とかなりそうです。
ありがとうございます。
どうもサブディレクトリのmakeはやってくれないようなので
手作業でやっていると、
make: *** No rule to make target `x86/dsputil_yasm.o', needed by `libavcodec.a'. Stop.
というわけで止まってしまいます。
どうもコンパイラがdsputil_yasm.cを要求しているようなのです。
どうすればいいんでしょうかね?
そのようなエラーは出たことがないので分かりません。
サブディレクトリがmakeされないということは今までありませんでしたので、どこかでコンパイルに失敗しているのではないでしょうか。
アセンブラYasmはインストールしていますよね?
あと、コンパイル方法の記事を書き直したので、参考にしてみてください。
フォローありがとうございました。
代わりにコメントしてくださる方、大歓迎です!
今後ともよろしくお願いします。
亀レスで解決済みかもですが、サブディレクトリのmakeについてコメントします。
私も同じ状態に一時なってましたが、makeを最新のものにすることでサブディレクトリもmakeしてくれるようになりました。
makeのバージョンの問題のようです。
それに気づくまではmingw32-makeと組み合わせてコンパイルしておりました。
それとyasmの問題ですが、yasmのインストール先が問題になる場合があるようです。
うろ覚えですが、たとえば場所が/bin/yasmの場合、うまくいかなかったように思います。
回避策は、
1.bashのaliasを利用する
~/.profileなどに
alias yasm='/c/msys/1.0/bin/yasm'
を追記することでいけた気がします。
これが無理なら、yasmのインストール先を、/usr/local/bin/など別の場所にしてみてください。
再度確認したところ、/bin/yasmの場合、alias指定では解決しませんでした。
少し補足すると、私はgccやbinutilsを複数のバージョンの組み合わせで使えるようにしているため、パスの設定などが特殊だからなのかも知れません。
こちらでは
/usr/local/bin/yasm.exe
で上手く動作しています。
あるいはyasmをffmpegのソースと同じ場所に置いてしまうのもありかも^^;
そういえば、makeは3.81にしてありました。
デフォルトでmakeは3.79だったかも?
ちなみに、私の環境では、
/mingw/bin/yasm.exe
です。