2009年02月11日

FFmpegのコンパイル (2009/2/11)

2009/3/8 追記
configureが変更されて、パッチffmpeg-20090211.diffを適用できなくなってしまいました。
また、configureオプションの--enable-swscaleが削除されています。
2009/3/7時点のパッチを作成しましたので、メニューの、
カテゴリー → FFmpegコンパイル
から、最新の記事を参照してください。

↓以下は、2009/2/11時点の記事です。


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

1. MSYS環境のアップデート
bash-2.0だと、configureの判定ルーチンで引っかかって、
Broken shell detected. Trying alternatives.
というメッセージが出ることがありますので、MSYSのshを更新しておきましょう。
MSYSに標準で入っているmakeも古いので、ついでに更新します。

以下のページから、
http://sourceforge.net/project/showfiles.php?group_id=2435&package_id=24963&release_id=46827

bash-3.1-MSYS-1.0.11-1.tar.bz2
make-3.81-MSYS-1.0.11-2.tar.bz2
をダウンロードして、C:\msys\1.0\ に解凍します。


2. MinGW環境のアップデート
安定版の最新はgcc4.3.3ですが、MinGWのwebページにはgcc4.3.0までしかないので、とりあえずそれをインストールしておきましょう。
C:\MinGW\ に環境があれば、以下のファイルをダウンロードして、C:\MinGW\ の下に解凍すればOKです。

以下のページから、
http://sourceforge.net/project/showfiles.php?group_id=2435
GCC Version 4
Testing: gcc-4.3.0-20080502-mingw32-alpha より、
gcc-4.3.0-20080502-mingw32-alpha-bin.7z

自分でgccをビルドするのは面倒だけど、最新版を使いたいという方は、以下の所からダウンロードできます。
TDM's Experimental GCC/MinGW32 Builds
http://www.tdragon.net/recentgcc/


その他、以下の3つのパッケージも最新のものにしておきましょう。
以下のページから、
http://sourceforge.net/project/showfiles.php?group_id=2435

GNU Binutils
GNU binutils-2.19.1 より、
binutils-2.19.1-mingw32-bin.tar.gz

MinGW API for MS-Windows
Current Release: w32api-3.13 より、
w32api-3.13-mingw32-dev.tar.gz

MinGW Runtime
Current Release: mingwrt-3.15.2 より、
mingwrt-3.15.2-mingw32-dev.tar.gz
mingwrt-3.15.2-mingw32-dll.tar.gz

上記のファイルを、すべてC:\MinGW\ の下に解凍すればOKです。

3. 個別のライブラリについて
以下のライブラリは、あらかじめインストールしておいてください。
この記事を書いた時点より新しくなっているものもありますので、それぞれの記事で確認してください。
nasm-2.05.1
yasm-0.7.2
pthreads-w32 release 2.9.0
zlib-1.2.3
faac-1.28
faad2-2.7
gsm-1.0.12
lame-398-2
libnut-661
libogg-1.1.3
libvorbis-1.2.0
libtheora-1.0
x264 rev.1109
xvidcore-1.2.1



4. FFmpegのコンパイル
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-2009-02-11

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

次に、pthread関連、その他諸々の一括パッチを適用します。
パッチファイルffmpeg-20090211.diffをダウンロードして、以下のコマンドを実行。

$ patch -p1 < ffmpeg-20090211.diff

パッチを適用したら、configureを実行します。

$ ./configure --enable-memalign-hack --enable-postproc --enable-swscale --enable-gpl --enable-libfaac --disable-decoder=aac --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="-mtune=athlon64 -mfpmath=sse -msse"

最適化オプションは、PCの環境により以下のようにしています。
※あくまでも一例ですので、もっと凝ってみたい方は、gccのマニュアルなどを見て研究されると良いかもしれません。

最適化無し版
--extra-cflags="-mtune=generic -mno-sse2"

Pentium4最適化版
--extra-cflags="-mtune=pentium4 -mfpmath=sse -msse"

Core2最適化版
--extra-cflags="-mtune=core2 -mfpmath=sse -msse"

Athlon64最適化版
--extra-cflags="-mtune=athlon64 -mfpmath=sse -msse"


問題なければ、以下のようなメッセージが出ます。
install prefix /usr/local
source path /c/TEMP/ffmpeg-checkout-2009-02-11
C compiler gcc
.align is power-of-two no
ARCH x86 (generic)
big-endian no
yasm yes
MMX enabled yes
MMX2 enabled yes
3DNow! enabled yes
SSE enabled yes
SSSE3 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
new filter support no
filters using lavformat no
video hooking no
network support yes
IPv6 support no
threading support pthreads
SDL support no
Sun medialib support no
AVISynth enabled yes
libamr-nb support no
libamr-wb support no
libdc1394 support no
libdirac enabled no
libfaac enabled yes
libfaad enabled yes
libfaad dlopened no
libgsm enabled yes
libmp3lame enabled yes
libnut enabled yes
libopenjpeg enabled no
libschroedinger enabled no
libspeex enabled no
libtheora enabled yes
libvorbis enabled yes
libx264 enabled yes
libxvid enabled yes
vdpau enabled no
zlib enabled yes
bzlib enabled yes
(長いので、全部見たい方はこちらをどうぞ。)
Creating config.mak and config.h...

その後、
$ make

ffmpeg.exeが出来ていれば完了です。
posted by あべちん at 18:12 | Comment(9) | TrackBack(4) | FFmpegビルド
この記事へのコメント
やりました…!!

やっとできました。
ここ2週間ずっと悩んでいたので、すっきりしました。
ありがとうございました。

あ、そのうち各ライブラリの細かいパッチファイル作ってみます。できたらまた報告します。
Posted by Kazuki Ashiya at 2009年02月15日 18:34
初めまして、こんにちは。

現在のリビジョン(17853)にパッチを適用すると、
patching file `configure'
Hunk #1 FAILED at 1360.
Hunk #2 succeeded at 1968 (offset 72 lines).
1 out of 3 hunks FAILED -- saving rejects to configure.rej
patching file `ffmpeg.c'
Hunk #1 succeeded at 49 (offset -1 lines).
patching file `libavcodec/libmp3lame.c'
patching file `libavcodec/opt.c'
patching file `libavcodec/pthread.c'
patching file `libavformat/utils.c'
Hunk #1 succeeded at 1859 (offset 28 lines).
となってしまい、configureは
Unknown option "--enable-swscale".
のエラーとなってしまいます。
解決方法等ございましたら、ご教授の程よろしくお願い致します。
Posted by ksy at 2009年03月06日 13:51
こちらでも確認できました。
どうも、ちょっと前のリビジョンでconfigureオプションの--enable-swscaleが削除されたようです。
また、それにともない、configureがまたごちゃごちゃと変更になっていて、パッチの一番最初の変更が適用されないようです。自分でconfigureをパッチファイルのとおり修正してみてください。
Posted by Kazuki Ashiya at 2009年03月06日 15:20
さて、上に関連して
またしてもyasmでストップです。

rev.178**から、swscaleのオプションが削除されるなど、大規模に改造がなされているのですが、rev.17861(現在の最新)をmakeすると、いつかのようにサブディレクトリのmakeをしてくれなくなり、再びlibavcodec/x86/dsputil_yasm.oで止まりました。
ちょっとまずいなと思っていたらこれです。
前に教えてもらった通り、yasmの再インストール、makeの入れ替えなど行いましたが、症状は改善されません。

どこをどうすれば直るんでしょうね。
Posted by Kazuki Ashiya at 2009年03月07日 22:32
which yasmはどこを指していますか?
もし今が/bin/yasmなら
/usr/local/bin/yasm
/mingw/bin/yasm
など別の場所にインストールすることを試してみてください。
あとはffmpegソースのあるフォルダにyasmを持ってきてしまうというのもてかも知れません。
Posted by ケリー at 2009年03月07日 23:48
今のところ
/mingw/bin/yasm
になっています。
Posted by Kazuki Ashiya at 2009年03月08日 00:07
あと、ソースのあるところに持ってきましたが、
やっぱり駄目でした。
Posted by Kazuki Ashiya at 2009年03月08日 00:12
うーん、不思議ですね。
あと考えられるのは、bashのバージョンの違いかな?
それとmingw32-makeでmakeするとどうなるでしょう?

どうしても無理なら、サブディレクトリに移動して、makeするしかないですね。
以前、サブディレクトリのMakeを行ってくれないとき、たしかこんなことしてました。
for d in lib*;do (cd $d;make);done
Posted by ケリー at 2009年03月08日 01:42
mingw32-makeのほうではうまく行きました。
ということで、MSYSのmakeが古かったようです。
何とかなりました。ありがとうございます。
Posted by Kazuki Ashiya at 2009年03月08日 16:18
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


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

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

ファイルマン
Excerpt: ファイルマンが最も他の動画共有サイトと異なる点は2001年の運営当初からモバイルに完全対応している点である。2007年8月現在ではDOCOMOのiアプリにて
Weblog: ファイルマン
Tracked: 2009-02-12 02:45

SpyBotの使い方
Excerpt: SpyBotの使い方はまずスパイウェア対策のソフトをインストールしましょう。その後SpyBotを早速使いましょう。
Weblog: SpyBotの使い方
Tracked: 2009-02-14 10:45

[UNIX]ffmpegのコンパイルメモ
Excerpt: pwにffmpegをソースからコンパイルしてインストールしたのでメモ 最新版じゃないとあんなサイトやこんなサイトのflvファイルを変換できないらしい、というわけでやってみた 実は読んで..
Weblog: よくわからない現代魔法
Tracked: 2009-05-01 22:00

ヨン様来日 東京ドーム 冬のソナタ ぺ・ヨンジュン
Excerpt: ペ・ヨンジュン ヨン様たおれる!でも無事退院 冬のソナタ
Weblog: ヨン様サイコー ペ・ヨンジュン祭り
Tracked: 2009-09-28 07:21