2007年07月21日

FFmpegのコンパイル (旧rev.)

いよいよ、FFmpegのコンパイルです。

2007/12/11追記
情報が古い部分もありますので、書き直しました。
こちらの記事をどうぞ。

以下のライブラリは、あらかじめインストールしておいてください。
この記事を書いた時点より、新しくなっているものもありますので、それぞれの記事で確認してください。
nasm-0.98.39
yasm-0.6.2
pthreads-w32-2-8-0-release
zlib-1.2.3
a52dec-0.7.4
amrnb-6.1.0.4 (3GPP 26104-610)
amrwb-7.0.0.1 (3GPP 26204-700)
faac-1.25
faad2-2.5
gsm-1.0.12
lame-3.97
libnut-503
libogg-1.1.3
libvorbis-1.1.2
libtheora-1.0alpha7
x264 rev.667
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-07-21

ソースファイルを展開して作成されるディレクトリは、snapshotの日付になっていますので、その時点のディレクトリ名に読み替えて下さい。

configureを、以下のように修正します。
25〜51行目をコメントアウト、または、削除します。
shellの判定ルーチンで、引っかからないようにします。
#if test "$E1" != 0 || test "$E2" = 0; then
# echo "Broken shell detected. Trying alternatives."
...
# exit 1
#fi

328行目、以下のように"&& renurn"を削除します。
修正前) flags_saved && renurn
修正後) flags_saved

2007/7/26、7/30追記
1576行目に、 -lpthread -lwsock32を追加。
修正前) enabled libx264 && require x264 x264.h x264_encoder_open -lx264
修正後) enabled libx264 && require x264 x264.h x264_encoder_open -lx264 -lpthread -lwsock32

1541行目の後、以下のように、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

次に、libavformat/vocenc.cの22行目あたりに、以下の行を追加します。
#include <pthread.h>

2007/8/18追記
libavformat/vocenc.cの修正は不要になりました。

2007/8/18追記
次に、libavcodec/pthread.cを修正します。
パッチファイルffmpeg-PTW32_STATIC_LIB.diffをダウンロードして、以下のコマンドを実行。
$ patch -p0 < ffmpeg-PTW32_STATIC_LIB.diff

修正が終わったら、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-libogg --enable-libvorbis --enable-libtheora --enable-libx264 --enable-libxvid --disable-ffserver --disable-ffplay --enable-avisynth --enable-small --enable-pthreads --extra-ldflags=-static

問題なければ、以下のようなメッセージが出ます。
install prefix /usr/local
source path /c/TEMP/ffmpeg-checkout-2007-07-21
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
gprof enabled no
debug symbols yes
strip symbols yes
optimize small
static yes
shared no
postprocessing support yes
software scaler enabled yes
video hooking no
network 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
libfaac enabled yes
libfaad enabled yes
libfaad dlopened no
libgsm enabled yes
libmp3lame enabled yes
libnut enabled yes
libogg 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...

libgsmとlibnutは、良くわからなかったので入れていません。
2007/07/31追記
libgsmとlibnutを追加しました。
--enable-pp --enable-swscaler も追加しました。

その後、
$ make

ffmpeg.exeが出来ていれば完了です。
posted by あべちん at 22:45 | Comment(9) | TrackBack(0) | FFmpegビルド
この記事へのコメント
こんにちは、、
おかけでたすかりました。

えと、gsmの部分ですか
makeするときエラーが出ます。
私が調べた限りはまだmingwには対応できないみたいです。参考URLは
http://www.gnu.org/software/gnulib/manual/html_node/fchmod.html
http://www.gnu.org/software/gnulib/manual/html_node/fchown.html
Posted by リチョルホ at 2007年11月16日 16:45
ここにお礼を書いていいかわからないのですが

ここのブログを参考にさせてもらって
最新のFFMPEGコンパイルに成功することができました
昔に一回CYGWINで挑戦して挫折したことがありましたが

ものすごく丁寧に書いてあって
問題なくコンパイルできました

携帯動画変換君でiPodの変換に使ってますが
エンコードが早くなったのと
画質がきれいになりました

ありがとうございました
Posted by 蓄電 at 2007年11月17日 03:07
蓄電さん、コメントありがとうございます。管理人です。
お役に立てていただいて良かったです。
毎日ではないのですが、コメントはチェックしていますよ。
ときどき更新していますので、またお越し下さいね。
Posted by あべちん at 2007年11月17日 20:36
リチョルホさん、コメントありがとうございます。管理人です。
たしかに、fchmodとfchownのエラーがでますね。
エラーはtoast.cで出ていて、ffmpegには影響がないので、無視していました。
libgsmまではコンパイルできているので、toast(って何?)を使用しない限りは問題ないと思います。
Posted by あべちん at 2007年11月17日 20:42
こんにちは、管理人さんどーも、あいすです。
今度は自分でコンパイルしてみたいぁと言うお話なのでここに
コメント(質問)させていただきますffmpegをコンパイルする前の準備をしたいのですが、ここのブログに乗っている
必用なライブラリをインストールできるサイトは、こんな事聞いて申し訳ないですが、ウイルスがなく安全にインストールする事ができるサイトですか?

後もうひとつ必用なライブラリを全てインストールしたら、ざっと何MBになりますか?教えてください。

Posted by あいす at 2007年12月09日 09:06
こんばんわ1ヶ月ぶりです

この1ヶ月FFMPEGのオプション設定と
最新FFMPEGについてないオプションで
どうしてもFIXASPECT、MAXFRが
使いたかったので
携帯動画変換君のソースを参考に
移植作業をしていました

GCC3.4.5でコンパイルすると
FFMPEG利用時に4.2.0以上でビルドしないとクラッシュするようなLOGが出てたので

MINGWでGCC4.2.2環境をそろえようとしたのですが
GMP
MPFR
をビルドしてインストールした後

GCC本体をビルドしようとすると
libstdc++-v3でコンパイルエラーが出ます

何か対応方法をご存知じゃないでしょうか?
それともlibstdc++-v3ははずしてしまっていいのでしょうか?

>あいすさん

参考までに僕の環境ではバージョンいくつかのソースとビルドしたのを残しているので
大体容量は約1Gぐらい使ってます


Posted by 蓄電 at 2007年12月10日 00:18
蓄電さん、こんにちは。管理人です。
私もそこではまりました。
configureオプションで、
--host=mingw32
を付けたら通りました。
--host=i686-pc-mingw32
なんかだと、ダメだったように記憶しています。
hostを指定しない場合は、
--with-build-time-tools=/mingw/bin
というオプションを付けたら通りました。
上手く行くと良いのですが…。
Posted by あべちん at 2007年12月10日 01:22
あいすさん、こんにちは。管理人です。
今のところ、紹介したサイトでウイルスに感染したことはありませんので、大丈夫だと思います。
何事も100%大丈夫という保証はありませんので、ウイルス対策はしておいたほうが良いと思います。

コンパイルについては、蓄電さんもコメントしてくださっていますが、MinGW環境一式、FFmpeg関連のライブラリなど合わせると、7〜800MB位です。
必要最小限なものに絞ればもっと小さくなります。

MinGWのインストールや使い方などは、検索すれば見つけられると思いますので、色々試してみると面白いと思いますよ。
Posted by あべちん at 2007年12月10日 02:04
なるほど分かりました。
管理人さん、蓄電さん
返信ありがとうございます
コンパイル準備してみようと思います
Posted by あいす at 2007年12月10日 12:28
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/4773675
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック