2010年12月25日

FFmpegのコンパイル (2010/12/25) w32threads

それでは、FFmpegのコンパイルです。

1. MSYS環境のアップデート
MSYS-1.0.11以上をインストールした場合、bashとmakeは新しい物になっています。
make 3.8.1 以上
bash 3.1 以上
であれば問題ありません。

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

・make-3.81
http://sourceforge.net/downloads/mingw/MSYS/make/make-3.81-3/
make-3.81-3-msys-1.0.13-bin.tar.lzma

・bash-3.1.17
http://sourceforge.net/projects/mingw/files/MSYS/BaseSystem/bash/bash-3.1.17-2/
bash-3.1.17-2-msys-1.0.11-bin.tar.lzma

ダウンロードしたファイルを、C:\msys\1.0\ に解凍します。


2. MinGW環境のアップデート
現時点での最新版、gcc-4.5.0をインストールします。
現時点での最新版、gcc-4.5.2をインストールします。
以下のファイルを、すべて
C:\MinGW\
に、解凍します。

以下の旧バージョンのライブラリが
C:\MinGW\lib\
のディレクトリに残っている場合は削除してください。
libstdc++.a
libstdc++.la
libsupc++.a
libsupc++.la


・gcc-4.5.2
http://sourceforge.net/downloads/mingw/MinGW/BaseSystem/GCC/Version4/gcc-4.5.2-1/
gcc-core-4.5.2-1-mingw32-bin.tar.lzma
gcc-c++-4.5.2-1-mingw32-bin.tar.lzma
libgomp-4.5.2-1-mingw32-dll-1.tar.lzma
libgcc-4.5.2-1-mingw32-dll-1.tar.lzma
libssp-4.5.2-1-mingw32-dll-0.tar.lzma
libstdc++-4.5.2-1-mingw32-dll-6.tar.lzma

・gmp
http://sourceforge.net/downloads/mingw/MinGW/gmp/gmp-5.0.1-1/
libgmpxx-5.0.1-1-mingw32-dll-4.tar.lzma
libgmp-5.0.1-1-mingw32-dll-10.tar.lzma

・mpfr
http://sourceforge.net/downloads/mingw/MinGW/mpfr/mpfr-2.4.1-1/
libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma

・mpc
http://sourceforge.net/downloads/mingw/MinGW/mpc/mpc-0.8.1-1/
libmpc-0.8.1-1-mingw32-dll-2.tar.lzma


上記のもの以外に、最新版のGCCは以下の所からもダウンロードできます。
どれかお好みでインストールしてください。
・TDM-GCC
http://tdm-gcc.tdragon.net/download
・Komisar Mingw stuff
http://komisar.gin.by/mingw/


その他、以下の3つのパッケージも最新のものにしておきましょう。
MinGWをインストールした時点で最新版になっていれば、更新は不要です。

・GNU Binutils
http://sourceforge.net/downloads/mingw/MinGW/BaseSystem/GNU-Binutils/binutils-2.21/
binutils-2.21-2-mingw32-bin.tar.lzma

・MinGW API for MS-Windows
http://sourceforge.net/downloads/mingw/MinGW/BaseSystem/RuntimeLibrary/Win32-API/w32api-3.17/
w32api-3.17-2-mingw32-dev.tar.lzma

・MinGW Runtime
http://sourceforge.net/downloads/mingw/MinGW/BaseSystem/RuntimeLibrary/MinGW-RT/mingwrt-3.18/
mingwrt-3.18-mingw32-dev.tar.gz
mingwrt-3.18-mingw32-dll.tar.gz

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


FFmpeg rev.23823以降のコンパイルの時、strcasecmp関数とtempnam関数がエラーになってしまいます。
こちらの記事を参考にパッチを適用してください。
implicit declaration of function 'strcasecmp'


2011/03/31 追記
2011/03/25の更新で、strcasecmp関数とtempnam関数のパッチは不要になりました。


追加で、MSYS DTKをインストールします。

MSYS Supplementary Tools
http://sourceforge.net/downloads/mingw/MSYS/Supplementary%20Tools/msysDTK-1.0.1/
より、
msysDTK-1.0.1.exe
を、ダウンロードして実行します。
perl、automake、autoconfなどがインストールされます。


3. 個別のライブラリについて
以下のライブラリは、あらかじめインストールしておいてください。
この記事を書いた時点より新しくなっているものもありますので、それぞれの記事で確認してください。
nasm-2.08.04
yasm-1.1.0
zlib-1.2.5
bzip2-1.0.6
faac-1.28(deleted)
faad2-2.7(deleted)
gsm-1.0.13
lame-3.98.4
opencore-amr-0.1.2
openssl-1.0.0c
rtmpdump-2.3
libogg-1.2.2
libvorbis-1.3.2
libtheora-1.1.1
libvpx-0.9.5
x264 (make fprofiled)
xvidcore-1.2.2(旧版)
xvidcore-1.3.0


4. FFmpegのコンパイル
FFmpegは、以下の場所にあります。
http://ffmpeg.org/

svnがインストールされていれば、以下のようにして、ソースファイルを拾ってこれます。
$ svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

svnがインストールされていない場合でも、とりあえず、snapshotのソースファイルを拾ってくればコンパイルできます。

Downloadから、
http://ffmpeg.org/download.html
full checkoutの、
ffmpeg-checkout-snapshot.tar.bz2を、適当なディレクトリに保存します。

MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xjf ffmpeg-checkout-snapshot.tar.bz2
$ cd ffmpeg-checkout-2010-12-25

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

2011/03/26 追記
ソースコードはGitで管理されるようになり、SVNはrev.26402で更新が止まっています。
今後は、Gitをインストールして、以下のコマンドでソースコードを入手してください。
$ git clone git://git.videolan.org/ffmpeg.git

または、
Get FFmpeg
http://www.ffmpeg.org/download.html
ここの、Snapshotのリンクからソースコードをダウンロードできます。
ファイルは、ffmpeg-HEAD-(Gitハッシュ値).tar.gz という形式になっていますので、そのファイル名に読み替えてください。
$ tar xzf ffmpeg-HEAD-1c0a472.tar.gz
$ cd ffmpeg-HEAD-1c0a472

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

2011/04/01 追記
パッチファイルを更新しました。(rev.28742(1caa412)〜)
ffmpeg-w32threads-20110401.diff

$ patch -p1 < ffmpeg-w32threads-20110401.diff

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

FFmpeg rev.23653から、libfaadが削除されています。
HE-AAC v2デコーダーが本体に実装されたので、libfaadは不要になったらしいです。
Unknown option "--enable-libfaad".
というメッセージが出る場合、
--enable-libfaad --disable-decoder=aac
は削除してください。

$ ./configure --enable-memalign-hack --enable-gpl --enable-version3 --enable-postproc --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libvorbis --enable-libtheora --enable-libxvid --enable-libvpx --enable-libx264 --disable-ffserver --disable-ffplay --disable-ffprobe --enable-avisynth --enable-small --enable-w32threads --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse -fno-strict-aliasing"


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

最適化無し版
--extra-cflags="-march=i686 -mtune=generic -fno-strict-aliasing"
※最適化無し版については、個別のライブラリのコンパイルにも
-march=i686
を、CFLAGSに追加して他と分けています。

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

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

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

Phenom最適化版
--extra-cflags="-mtune=amdfam10 -mfpmath=sse -msse -fno-strict-aliasing"


問題なければ、以下のようなメッセージが出ます。
source pathはコンパイル環境により異なります。
思ったよりも時間がかかりますので、気長に待ちましょう。

configureのメッセージを見る

(長いので中略)
Creating config.mak and config.h...

その後、
$ make

ffmpeg.exeが出来ていれば完了です。


【補足】
自分用の場合は、再配布を考えなくても良いので、libfaac入りのFFmpegをビルドすることもできます。

追加で、libfaacをコンパイル&インストールします。
libfaac のコンパイル&インストール

configureオプションの適当な所に、
--enable-nonfree
--enable-libfaac
を追加します。

configureのメッセージに、
libfaac enabled yes
と表示されていれば、makeして完了です。

FFmpegのエンコードオプションで、
-acodec libfaac
が使えるようになります。

当サイトで配布しているFFmpegは配布用のため、libfaacは無効にしています。


【更新履歴】を見る
posted by あべちん at 19:04 | Comment(2) | TrackBack(0) | FFmpegビルド
この記事へのコメント
http://abechin.sakura.ne.jp/sblo_files/k-tai-douga/ffmpeg/ffmpeg-w32threads-20101225.diff

パッチファイルがNotFoundになっているようです。
Posted by hermit at 2010年12月26日 23:54
hermitさん、こんにちは。管理人です。

申し訳ありません。
アップし忘れていました。

ご指摘ありがとうございました。
Posted by あべちん at 2010年12月27日 22:02
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


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

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