msysとLinuxでx264をコンパイルしてみた。
ICLとかVC9の最適化と比べてどれくらい速度に差がでるのかなぁと。
※3/7一部加筆修正
ってことで手順を自分向けに忘れないように。
※Linux編@CentOS 5.1
yumでNASMとYasmとgit入れる ※x264の部分にgitを入れる理由があります。
rpmforgeのリポジトリを追加してあれば入るはず。
$ yum install nasm yasm git
とりあえずconfigureで–enable-mp4-outputをyesにするだめにgpacをインストール
最新のが好きーな趣味なのでsvnで拾ってくる
$ cvs -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac login
パス無しでエンター
$ cvs -z3 -d:pserver:anonymous@gpac.cvs.sourceforge.net:/cvsroot/gpac co -P gpac
$ ./cofigure && make
どうせエラーでるんで足りないライブラリをyumで適当にぶち込む
# make install
make installだとincludeの中身をコピーしてくれないので、
./inculude/gpacにシンボリックリンクはるか、中身をincludeディレクトリにコピーしとく
./lib/gcc/libgpac_static.a も同様に/usr/local/lib に
$ svn co svn://svn.videolan.org/x264/trunk x264
3/5か6?にgitに移行したのでsvnだとrev745あたりで止まってます。
$ git clone git://git.videolan.org/x264
$ cd x264
$ ./configure
Platform: X86
System: LINUX
avis input: no
mp4 output: yes
pthread: yes
gtk: no
debug: no
gprof: no
PIC: no
shared: no
visualize: no
こんな感じになればOK、ならないときは–enable-*で強制的にyesにしてみてmake通して何足りないか確かめてみる
$ make
# make install
以降x264は
$ git pull で最新版を獲得できる
$ git log でChangeLogを表示
そんな感じで終了。
Linuxだと楽すぎる。
※MSYS編
Linux同様nasm,yasm,gpacをインストールする。こっちにはyumとか便利なものはないので全部ソースを取ってきてbuild
あとpthreadもソースを取ってきて
# ./configure && make clean GC
cp pthread.h sched.h /usr/local/include
cp pthreadGC2.dll /usr/local/bin
cp pthreadGC2.dll /usr/local/bin/pthread.dll
cp libpthreadGC2.a /usr/local/lib/shared/libpthreadGC2.dll.a
pthreadGC2.dllをpthread.dllに名前変えてコピーしないとなぜか困る
x264もLinuxと同様svnで持ってきて
DTV – エンコード用ツールのコンパイル
ここを参考にさせてもらいパッチを当てる
$ vi configure
/GC2とかで”lpthreadGC2″の文字列を探して”lpthread”に書き換える、全部で4つ
./cofigure –enable-pthread
Platform: X86
System: MINGW
avis input: yes
mp4 output: yes
pthread: yes
gtk: no
debug: no
gprof: no
PIC: no
shared: no
visualize: no
こんなんなれば超幸せ
makeでx264.exeが出来るのでpthreadGC2.dllといっしょにどこへでも持ってくといい。
gpacとかもx264のとこに乗ってるリンク先のでやらないとダメかも。
MSYS編終了。
ということで速度比較。
サンプルのaviを音声なしでx264.mp4でaviutlのpluginを使って吐き出させてその3回の平均fpsを比較してみる。
オプションはこんなの
–crf 18 –qpmin 8 –qpmax 36 –qpstep 9 -b 1 –ref 3 –no-dct-decimate –cqm jvt -A p8x8,i4x4,p4x4,b8x8,i8x8 -8 –direct auto –me esa -m 6 –b-rdo –no-fast-pskip –no-dct-decimate –cqm jvt –threads auto –progress –level 4.1
何このオプションとかいじめないでください
ということで比較用のバイナリ
x264.nlこれはgcc3.4.6でmingw使ってbuild(928KB)
Seraphy氏のx264.736.release10.rar付属の物、たぶんVC9でbuild(703KB)
自分でbuildしたやつ(891KB)
また、ファイルの読み込み&書き込みに左右されにくいようにRAMDISK上にファイルを置いてみた。
こんな感じで検証
x264.nl
16.56fps 16.47fps 16.35fps⇒16.46fps
Seraphy氏
16.39fps 16.48fps 16.33fps⇒16.40fps
mybuild
16.55fps 16.42fps 16.45gps⇒16.47fps
ぶっちゃけどれも誤差の範囲という感じ。
mingwでコンパイルした方がコンマ05fpsくらいは早いという見方もできなくもないが、なんか微妙だ。
どっちにしろ実際エンコードするときは大抵フィールドシフト使ってDVDエンコとかだから意味なさげ。