ffmpegのコンパイル手順

 を備忘録として整理しておきます。これはWindows 32bit環境が前提です。もちろん、基本的なUNIXコマンドの知識があることも前提となってます(笑。

MinGW環境の構築

  • ffmpeg構築パックを配布しておられる方がいらっしゃるので、これを使います。MinGW猫科研究所パックのページから、現時点で最新版のmsys_felidlabo_a007.7zをまずダウンロードします。
  • ダウンロードしたファイルを解凍し、分かりやすいディレクトリ配置とします。私の場合はH:\msysとしました。
  • H:\msys\_felidlabo内にreadme.txtがあるので、目を通しておくとよいかと。どうやら同じディレクトリ内にあるパッチファイル03までが完了済みの状態で配布されているとのことなので「04_gccinstall.bat」から順に実行していきます。まず、04ではコマンドプロンプト上でgccバージョンを聞いてきますので、迷うことなく最新版を選ぶ私(ぉ。

1) gcc-4.5.0-tdm-1
2) gcc-3.4.5-20060117-3
3) cancel
select gcc version : 1

  • 次は「05_plus-build.bat」を実行。これは待っていれば自動的にビルドが終了します。
  • これで基本環境はできたので、「H:\msys」内の「msys.bat」を実行します。以下のように入力するとカレントディレクトリ(ホームディレクトリ)を表示します。

$ pwd
/home/oni-chan

…こんな感じです。

■liba52のインストール
 AC-3コーデックのようです。猫科研究所 - MinGW+ffmpeg(2)a52,xvidを参考にliba52をインストールします。

  • liba52 - downloadsからソースファイルをダウンロードし、先ほどのホームディレクトリ(エクスプローラからはH:\msys\home\oni-chanといった具合)に保存します。現時点での最新版はa52dec-0.7.4.tar.gzです。
  • ホームディレクトリ上で以下のようにコマンドを入力します。

$ tar xvf a52dec-0.7.4.tar.gz
$ cd a52dec-0.7.4
$ ./configure --disable-shared
$ make
$ mkdir -p /mingw/include/a52dec
$ cp include/a52.h /mingw/include/a52dec/
$ cp liba52/.libs/liba52.a /mingw/lib/

■xvidcoreのインストール
 MPEG-4 Part2 Visualのコーデックのようです。liba52と同じページを参考にインストールを進めます。

  • Xvid Labs - Source Codeからソースファイルをダウンロードし、先ほどのホームディレクトリに保存します。現時点での最新版はxvidcore-1.2.2.tar.gzです。
  • ホームディレクトリ上で以下のようにコマンドを入力します。

$ tar xvf xvidcore-1.2.2.tar.gz
$ cd xvidcore/build/generic
$ ./configure --disable-shared
$ make
$ cp =build/xvidcore.a /mingw/lib/libxvidcore.a
$ cp ../../src/vxid.h /mingw/include/

■faacのインストール
 AACのコーデックのようです。猫科研究所 - MinGW+ffmpeg(3)faac,faadを参考にfaacをインストールします。

  • AudioCoding.com - Downloadsからソースファイルをダウンロードし、先ほどのホームディレクトリに保存します。現時点での最新版はfaac-1.28.tar.gzです。
  • ホームディレクトリ上で以下のようにコマンドを入力します。

$ tar xvf faac-1.28.tar.gz
$ cd faac-1.28
$ ./bootstrap
$ ./configure --disable-shared --without-mp4v2
$ make
$ cp include/faac.h /mingw/include/
$ cp include/faaccfg.h /mingw/include/
$ cp libfaac/.libs/libfaac.a /mingw/lib/

■faadのインストール
 faacと同じくAACのコーデックのようです。faacと同じページを参考にfaadをインストールします。

  • AudioCoding.com - Downloadsからソースファイルをダウンロードし、先ほどのホームディレクトリに保存します。現時点での最新版はfaad2-2.7.tar.gzです。
  • ホームディレクトリ上で以下のようにコマンドを入力します。

$ tar xvf faad2-2.7.tar.gz
$ cd faad2-2.7

と、ここでソース修正が必要とのこと。faad2-2.7/common/mp4ff/mp4ff_int_types.hの

4:#if defined (_WIN32)

4:#if defined (_WIN32) && !defined(__MINGW32__)

と修正するみたい。私の場合はMSYSサイトからvimをインストールしてvimエディタ上で修正しましたが、お好きな方法でどうぞ。また、この修正だけではコンパイルエラーとなってしまったため調べてみたところ、libfaadのコンパイル&インストール お気に入りの動画を携帯で見ようにある修正も必要のよう。faad2-2.7/frontend/main.cを以下のようにコメントアウト、もしくは削除。

36: #define off_t__int64

36: /*#define off_t__int64*/

さらに以下のようにコマンドを入力します。

$ autoreconf -vif
$ ./configure --disable-shared
$ make
$ cp include/faad.h /mingw/include/
$ cp include/neaacdec.h /mingw/include/
$ cp libfaad/.libs/libfaad.a /mingw/lib/

LAMEのインストール
 MP3のコーデックですね。猫科研究所 - MinGW+ffmpeg(4)LAMEを参考にインストールします。

$ tar xvf lame-3.98.4.tar.gz
$ cd lame-3.98.4
$ ./configure --disable-shared --disable-frontend --enable-nasm --enable-decode-layer1
$ make
$ mkdir -p /mingw/include/lame
$ cp include/lame.h /mingw/include/lame/
$ cp libmp3lame/.libs/libmp3lame.a /mingw/lib/

■x264(libx264)のインストール
 MPEG-4 Part10 AVC / H.264 のコーデックですね。猫科研究所 - MinGW+ffmpeg(6)x264を参考にインストールします。

$ tar xvf x264-snapshot-20100904-2245.tar.bz2
$ cd x264-snapshot-20100904-2245
$ ./configure --enable-pthread
$ make
$ cp x264.h /mingw/include/
$ cp libx264.a /mingw/lib/

ffmpegのインストール
 やっとここまで来ました!最後のffmpegインストールです。猫科研究所 - MinGW+ffmpeg(7)ビルドを参考にインストールします。

  • Download FFmpegからソースファイルをダウンロードし、先ほどのホームディレクトリに保存します。現時点での最新版はffmpeg-0.6.tar.gzです。
  • ホームディレクトリ上で以下のようにコマンドを入力します。

$ tar xvf ffmpeg-0.6.tar.gz
$ cd ffmpeg-0.6

とここで、ffmpegのpthread-w32対応のため、configureファイルを修正。

2566: # check for some common methods of building with pthread support
2567: # do this before the optional library checks as some of them require pthreads
2568: if enabled pthreads; then
2569: if check_func pthread_create; then
2570: :
2571: elif check_func pthread_create -pthread; then
2572: add_cflags -pthread
2573: add_extralibs -pthread
2574: elif check_func pthread_create -pthreads; then
2575: add_cflags -pthreads
2576: add_extralibs -pthreads
2577: elif check_func pthread_create -lpthreadGC2; then
2578: add_extralibs -lpthreadGC2
2579: elif ! check_lib pthread.h pthread_create -lpthread; then
2580: die "ERROR: can't find pthreads library"
2581: fi
2582: fi
↓(赤字部分を追加)
2566: # check for some common methods of building with pthread support
2567: # do this before the optional library checks as some of them require pthreads
2568: if enabled pthreads; then
2569: if check_func pthread_create; then
2570: :
2571: elif check_func pthread_create -pthread; then
2572: add_cflags -pthread
2573: add_extralibs -pthread
2574: elif check_func pthread_create -pthreads; then
2575: add_cflags -pthreads
2576: add_extralibs -pthreads
2577: elif check_func pthread_create -lpthreadGC2; then
2578: add_extralibs -lpthreadGC2
2579: elif check_func pthread_create -lpthreadGC2 -lwsock32; then
2580: add_extralibs -lpthreadGC2 -lwsock32

2581: elif ! check_lib pthread.h pthread_create -lpthread; then
2582: die "ERROR: can't find pthreads library"
2583: fi
2584: fi

また、以下の修正も。

2630: enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm &&
↓(赤字部分を追加)
2630: enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm -lpthreadGC2 -lwsock32 &&

 最後に以下のコマンドを入力。ちょこっと英文のgccドキュメントとかとにらめっこしながらオプションを調べて現在使用しているCPU(Core i7 860)で出来る限り最適化されるようにしてみたのですが…効果があるかはわかりません(笑*1

$ ./configure --enable-gpl --enable-nonfree --enable-pthreads --enable-libx264 --enable-libfaac --enable-libfaad --enable-libxvid --enable-libmp3lame --enable-avisynth --enable-postproc --enable-swscale --enable-memalign-hack --disable-debug --disable-ffserver --disable-ffplay --disable-network --extra-cflags='-march=core2 -mtune=core2 -mfpmath=sse -mthreads -malign-double -minline-all-stringops -maccumulate-outgoing-args -O3'
$ make

 ちなみにconfigureオプションに--enable-liba52を指定するとそんなのないと言われるので、ffmpegでAC3を有効にするには、"--enable-liba52" → "--enable-gpl"に変更して、"--enable-nonfree"を追加するといいらしいです。
教えて!Ziddyちゃん - Linux ffmpegについて

 出来上がった「ffmpeg.exe」ファイルはH:\msys\home\oni-chan\ffmpeg-0.6ディレクトリにあります。マルチスレッドで使う場合は、pthreadGC2.dllがもしかしたら必要かもしれません。

【参考】

*1:実は64bit最適化用オプションも準備していたのですが、前回の日記に書いたとおり、ffmpegコンパイル前のツールインストールに失敗し、無駄になりました…しくしく。