いよいよクライマックス、 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
で、再生・・・正常だった。なんでや!
意味不明。今回はここまで。
暇があったら調査しとこう。