概要

ffmpegのav(format|codec|util)-[0-9]+.dllをビルドする方法について。

ffmpegはUNIX系のプロジェクトで、Win32DLLをビルドするにはMinGWをつかう。 MinGWを使うとcygwin1.dllなしで動くバイナリがビルドできる。

MinGWとそのシェルのMSYSはルート直下にインストールしないとうまく動かない。 が、C:\とかにそのまま入れると気持ちが悪いので、SUBSTでProgram FilesやMy? DocumentsなどをI:\など、適当なドライブに割り当ててそこにインストールするとよい。

SUBST I: C:\Progra~1

デタッチするときは

SUBST I: /D

参考

MinGW

MinGWを取得

取得できたらインストール。インストール時に必要に応じてパスを変更する。スペースを含むパスはうまくいかない。(MinGWのファイルを書き換えるなどすれば一応動くようにもできそうな感触はある。)マルチバイト文字のパスは未調査。

MSYS

MSYSを取得

取得できたらインストール。インストール時に必要に応じてパスを変更する。 インストールが終わるとポストインストールプロセスが始まる。先に入れたMinGWのパスを入力する。

無事インストールが終わると、例えばI:\msys\1.0に入れた場合、自分のホームディレクトリはI:\msys\1.0\home\(ユーザー名)となる。

NASM

NASMを取得

取得できたらホームディレクトリに解凍。 以下の内容のnasm.shを作って実行

cd nasm*
make distclean
./configure -prefix=/MinGW
make
make install

lame

lameを取得

取得できたらホームディレクトリに解凍。 以下の内容のlame.shを作って実行

cd lame*
make distclean
./configure -prefix=/static -disable-shared -enable-static
make
make install

ffmpeg

いよいよffmpeg本体。 bashが必要なのでまずbashを入れる。

bash/bin/bash.exeをmsys/1.0/binにコピー

次にffmpegの取得。SVNから持ってくる。 ホームにffmpegフォルダを掘って svn://svn.mplayerhq.hu/ffmpeg/trunk からCoする。

ビルドは以下のffmpeg.shを作って実行。

cd ffmpeg*
make distclean
./configure --enable-memalign-hack --enable-libmp3lame --extra-cflags=-I/static/include --extra-ldflags=-L/static/lib --enable-shared --disable-static
make
make install
  • --enable-mingw32をつけなくても最近判別するようになった模様
  • --enable-libmp3lameは昔は--enable-mp3lameだった。
  • --enable-sharedでDLLを作る。その際は--disable-staticをつけなきゃいけない

ちなみにconfigureのオプション一覧 : http://htffmpegx.seesaa.net/article/9194572.html

一応完成

DLLはffmpeg*/libav(format|codec|util)/av(format|codec|util)-[0-9]+.dllにできる。

以下追加のライブラリ

zlib

xvidcore