2009年9月6日日曜日

【ffmpeg の導入】 5.ffmpeg のビルド

いよいよクライマックス、 ffmpeg のビルドを行う。

チェックアウトした ffmpeg のディレクトリへ移動

configure ファイルを修正



2242 行目
elif check_func pthread_create -lpthreadGC2; then
add_extralibs -lpthreadGC2

elif check_func pthread_create -lpthreadGC2 -lwsock32; then
add_extralibs -lpthreadGC2 -lwsock32


2286 行目
enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm &&

enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 -lm -lpthreadGC2 -lwsock32 &&


そしてビルド。元ネタの configure の引数から多少変わっている。
以下2つがなくなっている
--enable-liba52
--enable-swscale

代わりに次の引数を追加
--enable-nonfree

増減した引数について
--enable-swscale は、デフォルトで有効になった(はず?)
--enable-liba52 は、liba52 のライセンス絡みで面倒なことに・・・
--enable-nonfree を加えることによって、ライセンスの問題をクリアできるとか・・・
ただし、ビルドしたバイナリの再配布が出来なくなる(らしい)
これが原因でバイナリ形式の配布が出来ないのか?


$ ./configure \
--enable-gpl \
--enable-pthreads \
--enable-libx264 \
--enable-libfaac \
--enable-libfaad \
--enable-libxvid \
--enable-libmp3lame \
--enable-avisynth \
--enable-postproc \
--enable-memalign-hack \
--target-os=mingw32 \
--cpu=i686 \
--arch=i686 \
--disable-debug \
--disable-ffserver \
--disable-ffplay \
--disable-network \
--enable-nonfree
$ make

完成。

ffmpeg.exe を使用する場合は、
pthreadGC2.dll (pthreads をビルドすると作成される)を
ffmpeg.exe と同じディレクトリに置く必要がある。

さらにもっと重要な変更が ffmpeg にあり、
ffmpeg 実行時に -vpre 引数が必須になっている。
これ無しで実行すると
Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
とかエラーになる。
一生懸命ビットレートとかサイズとかいじってましたよ。
ビルドが失敗したかとも思ったよ。
まったくふざけやがって、こんなメッセージでわかるかよ!

ffmpeg のヘルプを見ると

-vpre preset
set the video options to the indicated preset

どうやら preset にプリセットファイルを指定する必要があるようだ。
そのファイルがどこにあるかというと、ffmpeg をチェックアウトしたディレクトリの
ffpresets ディレクトリの中にあるファイルがそれ。
このディレクトリを、適当な(私は、ffmpeg と同じ)ディレクトリにコピーする。
-vpre 引数に指定する場合は、フルパスで指定する必要がある。

以下のように指定する。
ffmpeg -i hoge.avi -vcodec libx264 -b 700k -vpre C:\appli_x86\ffmpeg\ffpresets\libx264-default.ffpreset test.mp4

プリセットファイルを見ていると baseline とか main とかあるので、
プロファイルのこと?知識不足なのでよくわからん。

試しに何も変換なしで変換してみる。
ffmpeg -i 0001_0600.avi -vcodec copy -vpre C:\appli_x86\ffmpeg\ffpresets\libx264-default.ffpreset test001.avi

test001.avi を再生してみると・・・上下逆さまになっとる・・・なんでや!

今度は libx264 で変換してみる。
ffmpeg -i 0001_0600.avi -vcodec libx264 -b 700k -vpre C:\appli_x86\ffmpeg\ffpresets\libx264-default.ffpreset test002.mp4

で、再生・・・正常だった。なんでや!
意味不明。今回はここまで。
暇があったら調査しとこう。