ffmpegのコンパイル
ffmpegをWindowsでビルドするにはコンパイラにMinGWが必要です。MinGWのインストールは前回の記事を参考にしてください。
必要なライブラリのインストール
今回はXvidとmp3コーデックなどを追加することにします。
最初にmp3のコーデックlameをインストールします。
LAME - Source Code Download Pageからソースコードをダウンロードします。
MinGWのシェルmsys上でコンパイル・インストールします。
$ tar zxf lame-3.96.1.tar.gz
$ cd lame-3.96.1
libmp3lame/mpglib_interface.cファイルを書き換えます。
$ vi libmp3lame/mpglib_interface.c
変更内容は次のとおりです。
13行目を変更
#include "interface.h"
↓
#include "../mpglib/interface.h"
最後にconfigure;makeです。
$ ./configure
$ make
$ make install
続いてXvidをインストールします。
Xvidのダウンロードのページからソースファイルをダウンロードします。
先ほどと同じようにmsys上でコンパイル・インストールします。
$ tar zxf xvidcore-1.1.0-beta2.tar.gz
$ cd xvidcore-1.1.0-beta2/build/generic/
$ ./configure
$ make
$ make install
続いてAACをデコードする機能を持つfaad2をインストールします。
ダウンロードのページからソースファイルをダウンロードしmsys上でコンパイル・インストールします。
$ mkdir faad2
$ cd faad2
$ tar zxf ../faad2-15092004.tar.gz
libfaad/common.hファイルを書き換えます。
$ vi libfaad/common.h
変更内容は次のとおりです。
308行目近辺の関数lrintfをコメントアウト
#elif (defined(__i386__) && defined(__GNUC__))
#define HAS_LRINTF
// from http://www.stereopsis.com/FPU.html
/* static INLINE int lrintf(float f)
{
int i;
__asm__ __volatile__ (
"flds %1 \n\t"
"fistpl %0 \n\t"
: "=m" (i)
: "m" (f));
return i;
} */
#endif
common/mp4ff/mp4ff_int_types.hファイルを書き換えます。
$ vi common/mp4ff/mp4ff_int_types.h
そっくり書き換えます。
#ifndef _MP4FF_INT_TYPES_H_
#define _MP4FF_INT_TYPES_H_
#include <stdint.h>
#endif
後はコンパイル・インストールします。
$ ./bootstrap
$ ./configure
$ make
$ make install
続いてAACをインストールします。
ダウンロードのページからソースファイルをダウンロードしmsys上でコンパイル・インストールします。
$ tar zxf faac-1.24.tar.gz
$ cd faac
$ ./bootstrap
$ ./configure
$ make
$ make install
Dolby Digital(AC3)用のliba52をインストールします。
ダウンロードのページからソースファイルをダウンロードしmsys上でコンパイル・インストールします。
$ tar zxf a52dec-0.7.4.tar.gz
$ cd a52dec-0.7.4
$ ./configure
$ make
$ make install
H.264/AVC用のライブラリx264をインストールします。
x264をビルドするにはnasmが必要です。
最初にnasmをインストールします。
ダウンロードのページからソースファイルをダウンロードしmsys上でコンパイル・インストールします。
$ tar zxf nasm-0.98.39.tar.gz
$ cd nasm-0.98.39
$ ./configure
$ make
$ make install
続いてx264をビルドします。
ftpサイトからソースファイルをダウンロードしmsys上でコンパイル・インストールします。
$ tar jxf x264-snapshot-20051115-2245.tar.bz2
$ cd x264-snapshot-20051115-2245
$ ./configure
$ make
$ make install
ffmpegのビルド
ソースファイルをhttp://www.mplayerhq.hu/MPlayer/cvs/からダウンロードします。
msys上でビルドします。
$ tar jxf FFMpeg-current.tar.bz2
$ cd FFMpeg-20050806
コンパイルできるようにlibavcodec/xvidff.cファイルの一部を書き換えます。
$ vi libavcodec/xvidff.c
書き換える内容は次のとおりです。
346行目近辺
avctx->codec_tag = ff_get_fourcc("xvid");
↓
avctx->codec_tag = ff_get_fourcc("XVID");
30行目あたりinclude行の下あたりに次の内容を追加します。
#include <windows.h>
int xvid_ff_2pass(void *ref, int opt, void *p1, void *p2);
void xvid_correct_framerate(AVCodecContext *avctx);
int mkstemp(char* template)
{
char temppath[512];
if(GetTempPath(512,temppath)!=0)
{
if(GetTempFileName(temppath,"fil",0,template)!=0)
{
FILE *pFile;
pFile=fopen(template,"w+");
if(pFile!=NULL)
return (int)pFile;
}
}
return -1;
}
libavcodec/dsputil.hファイルも書き換えます。
$ vi libavcodec/dsputil.h
書き換える場所は次のとおりです。
654行目近辺
static always_inline long int lrintf(float x)
↓
static inline long int lrintf(float x)
configureスクリプトを実行します。
$ ./configure --enable-mingw32 --enable-memalign-hack --enable-mp3lame --enable-faac --enable-faad --enable-a52 --enable-xvid --enable-x264 --enable-gpl --extra-cflags=-I/local/include --extra-ldflags=-L/local/lib
スタティックでリンクできるように設定します。
$ cp /local/lib/xvidcore.a /local/lib/libxvidcore.a
Makefileも書き換えます。
$ vi Makefile
書き換える場所は次のとおりです。
10行目
LDFLAGS+= -g
↓
LDFLAGS+= -g -static
あとはmakeします。
$ make
make install するとC:\Program Filesにインストールしようとするので、必要な場所にffmpeg.exeをコピーします。
以上で終了です。
こんな形で変換できます。
$ ffmpeg -y -i test.mpg -bitexact -strict 3 -me phods -vcodec mpeg4 -vtag MP4S -s 176x144 -r 14.985 -b 190 -acodec g726 -ac 1 -ar 8000 -ab 32 -f asf test.asf
$ ffmpeg -i test.mpg -b 256 -ac 2 -f avi -vcodec xvid -acodec mp3 -ab 64 test.avi
オプションについてはこのページに詳しく書かれています。
参考サイト
自分でビルドするのが面倒な人は

Comments
携帯動画変換君に付属のffmpegで速度が出ない件は、cygwinのオーバーヘッドではないようです。コーデックにmsmpeg4v2とかを利用した場合は速度が普通に出ています。xvidのときだけ、なぜか3分の1ぐらいに遅くなります。