MinGW-ffmpeg

FFmpegのコンパイル (2010/4/2)を読んでffmpegをビルドした。
大変すばらしい情報なのだが手作業が多いのでスクリプトを書いてみた(github)
以下手順。

  1. http://sourceforge.net/projects/mingw/files/ から MinGW-5.1.6.exe、MSYS-1.0.11.exe、msysDTK-1.0.1.exe をダウンロードしてインストールする。
  2. GCCを更新する。私は TDM's GCC/mingw32 Buildsにある4.3.3-tdm-1にした。(4.4以上は安定してるか不明だったので)
    この際、別のバージョンのg++を入れていると間違ったlibstdc++がリンクされたりするので、/mingw/lib/libstdc++.* と /mingw/lib/libsupc++.* をどこかに退避しておく。
    ffmpegだけビルドするなら3.4.5のままでも大丈夫かも。
  3. GCCを更新するとpthreadのライブラリとヘッダが更新されるので、退避しておく。
    ファイルは /mingw/include/ の pthread.h、sched.h、semaphore.h と、/mingw/lib/ の libpthread*.a
  4. coreutils-extを追加する。http://sourceforge.net/projects/mingw/files/MSYS%20coreutils/ にある coreutils-5.97-2-msys-1.0.11-ext.tar.lzma を、MSysの / に展開。
    # cd / && tar xf coreutils-5.97-2-msys-1.0.11-ext.tar.lzma --lzma
  5. wgetを追加する。http://sourceforge.net/projects/mingw/files/mingwPORT/Current%20Releases/ にある wget-1.9.1-mingwPORT.tar.bz2 を展開し、その中の wget.exeを /mingw/bin/ にコピーする。
  6. http://github.com/firewood/mingw-ffmpegスクリプトをどこか(/usr/src/ffmpeg/ とか)に置く。
  7. build.sh でダウンロードとビルドを行う。
    # ./build.sh 2>&1 | tee build.log

なおffmpeg.exeを生成するだけでインストールはしないようになっているので、必要であればffmpeg.iniを編集する。(インストール先はPREBUILD1で指定し、インストールするかどうかをPOSTBUILD1で指定する)
また、faacを使用する場合は、faac.iniのENABLEDをyesにする。(これで生成したバイナリは配布できないので注意)

http://blog.k-tai-douga.com/article/36847657.html とはx264とffmpegバージョンが若干異なっている。パッチが当たらないところはbuild.shの中で追加してある。

そもそも何でビルドしたかというと、

  • 手持ちのデジカメがMotionJPEG対応なため変換することに
  • 携帯動画変換君を使ってみようと思ったらffmpegが古かった
  • ffmpegを更新したらオプションが色々変わっていた
  • xvidを使おうとしたら Invalid pixel aspect ratio 0/1 というエラーが発生

という感じ。アスペクト比については無指定だとで0が入っていて、たぶん0は各CODECでよきに計らえという意味だと思うのだが、libxvidff.cは処理しないので困ったものだ。640×480の動画で明示的に-aspect 4:3としたときにsample_aspect_ratioに1:1が設定されたので同じにした。(PARなのだろう)

ビルド環境について

x264のオプションについて