FFmpeg on Windows (Unofficial Builds)
== 2009-04-19 last update ==
配布を一旦とりやめます。(2009-05-07)
申し訳ありませんが、再開時期は未定です。
Windows用のFFmpeg非公式バイナリです。
外部ライブラリの一部をのぞいて、git,svn,cvsなどで取得しているソースなので、不安定な場合もあるかも知れません。
それでもよろしければ、ご利用ください。
ダウンロードは↓から。
公式サイトの2009-3-10のNewsで発表されたリリース、FFmpeg 0.5にいくつかのパッチを適用してビルドしたものです。
ffmpeg-0.5.7z ffmpeg.exe 2.38M
ffmpeg-0.5.zip ffmpeg.exe 3.10M
ffmpeg-SVN-r18617.7z ffmpeg.exe ffplay.exe 2.79M
ffmpeg-SVN-r18617s.7z ffmpeg.exe 2.39M
ffmpeg-SVN-r18617s.zip ffmpeg.exe 3.12M
ffmpeg-SVN-r18339.7z ffmpeg.exe ffplay.exe 2.79M
ffmpeg-SVN-r18339s.7z ffmpeg.exe 2.39M
ffmpeg-SVN-r18339s.zip ffmpeg.exe 3.12M
ffmpeg-SVN-r17923.7z ffmpeg.exe ffplay.exe 2.76M
ffmpeg-SVN-r17923s.7z ffmpeg.exe 2.38M
ffmpeg-SVN-r17923s.zip ffmpeg.exe 3.11M
ffmpeg-SVN-r17878.7z ffmpeg.exe ffplay.exe 2.77M
ffmpeg-SVN-r17878s.7z ffmpeg.exe 2.39M
ffmpeg-SVN-r17878s.zip ffmpeg.exe 3.11M
ffmpeg-SVN-r17680s.7z ffmpeg.exe 2.40M
ffmpeg-SVN-r17680s.zip ffmpeg.exe 3.11M
-Os -fno-common -mtune=genericでコンパイルしたバイナリです。
以前のバージョンも含めたアーカイブ一覧はこちらです。
SWF decompressor & compressor (CWS->FWS, FWS->CWS)は別ページに分けました。
拡張子7zのファイルの展開には7-zip対応のアーカイバが必要です。
pthreadGC2.dllを不要(pthreadをstatic link)にしてみました。
また外部ライブラリもコンパイルオプションを調整してみたので、ffmpegで使うオプションによっては異常終了する場合があるかも知れません。
その場合には、異常終了するオプションをメールででも教えていただけるとありがたいです。
☆利用している外部ライブラリやパッチなどについては、アーカイブ内の文書をご覧ください。
※SVN-r17032からyasmを有効にしてビルドしています。
※SVN-r17044からfaad2をcvs版にしました。
※SVN-r17163から--enable-smallを指定したバージョンもあわせてアップしてみます。
※SVN-r17392からpthreadをstatic linkにしてみます。
※SVN-r17471からgitで最新ソースを取得しています。
※SVN-r17504からlibschroedingerを追加しました。容量の関係で--enable-smallのバイナリだけにします。
※SVN-r17520からlibdiracを追加しました。
※SVN-r17543は大丈夫でしたが、それ以降のバイナリでasf(wmv3)を読み込むと異常終了するようです。
※SVN-r17564での変更が問題のようです。SVN-r17564以降はwmv3の読み込みで異常終了するようです。
とりあえずwmv2と同じ感じで修正してみました。SVN-r17585から有効です。
本家ではSVN-r17587で修正され、17594でより適切に修正されました。
※SVN-r17607からr17555でのffmpeg.cの修正を取り消しました。
※SVN-r17613からxvidcoreにVAQパッチを適用しています。
※SVN-r17630からx264をバージョン 0.66.1115 11863acに更新しました。(バイナリをアップしなおしています。)
※SVN-r17639からgolgol7777 様のlibxvidの修正の一部を取り込ませていただきました。
入力動画のaspect情報が0の場合?、エラーで停止するケースの対処方法を取り込ませていただきました。
ffmpeg-SVN-r17606-binに添付されているソースを参考にしました。
バイナリを再アップするため、一時的にリンク切れになっていたと思います。
※SVN-r17643でffmpeg.cの-vsync 2に関する修正が加えられました。
これに伴いr17555でのffmpeg.cへの修正を有効にします。
※SVN-r17667の修正によりconfigureでwinsock2.hなどのヘッダチェックが上手く動作しない件を修正しました。
この問題はr17695で修正されました。
※SVN-r17683から-titleオプションなどがなくなり、別の指定方法に変わったようです。
-metadata title=string -metadata author=string -metadata copyright=string -metadata comment=string -metadata genre=string -metadata album=string -metadata track=number -metadata year=number
※SVN-r17688から-metadataのlanguageが何かに使われているようです。
何に使っているか、調べてないけど、もう有効なのかな?
※SVN-r17804からx264をバージョン 0.67.1119 6f0b2a9に更新しました。後で0.67.1120 8544346に更新しました。
※SVN-r17861のバイナリをx264のバージョン 0.67.1123 3d78062に更新したものに置き換えました。
※libswscaleが更新されたので、SVN-r17861をビルドしなおしました。(2009-03-07 20:37ごろアップしました)
※SVN-r17868からffplayを同梱したアーカイブもアップしてみます。
※SVN-r17868のバイナリをx264のバージョン 0.67.1125 10d6ef0に更新したものに置き換えました。(2009-03-08 23:10ごろ)
※SVN-r17923からx264をバージョン 0.67.1127 8d82fecに更新しました。
※SVN-r17944からmxfフォーマットのテストがクリアできていません。
※SVN-r17955からswfのテストもクリアできませんでした。timestampやseek関係の調整がされているようです。
※SVN-r17971からmxfやswfのテストも無事クリアされるようになりました。
※SVN-r18023からGUIDの定義がconflictしてビルドできなかったので、適当に定義名変更してビルドしました。
GUIDの定義変更は、SVN-r7611で行われたみたいだなぁ。18022まで顕在化しなかったのかなぁ。
※SVN-r18032でwinnt.hの定義とconflictしていた簡略化されたGUIDの定義名が変更されました。(GUIDからff_asf_guidになりました。)
※SVN-r18032のバイナリをx264のバージョン 0.67.1128 682b54dに更新したものに置き換えました。(2009-03-19 2:05ごろ)
※SVN-r18032のバイナリをlibswscaleのバージョンを更新したものに置き換えました。(2009-03-19 2:25ごろ)
※SVN-r18145からx264をバージョン 0.67.1129 c109c8eに更新しました。
※SVN-r18203からx264をバージョン 0.67.1130 8475977に更新しました。
※SVN-r18337からx264をバージョン 0.67.1136 3f9ba82に更新しました。
※SVN-r18339からbinutilsをversion 2.17.50 20060824に戻します。
※SVN-r18617からx264をバージョン 0.67.1143 7554705に更新しました。
SVN-r18203以降のバイナリでwmv2、mpeg2videoのエンコードで異常終了するようになっていたようなので削除しました。
ここに置いているffmpeg.exeの実行にはpthreadGC2.dllが必要です。
pthreadGC2.7zをダウンロードして展開し、DLLをffmpeg.exeと同じ場所に置いてください。
pthreadGC2.7z pthreadGC2.dll 21.5K (ver 2.9.0.0)(現在は不要になりましたが、残しておきます。)
pthreadGCE2.7z pthreadGCE2.dll 27.1K (ver 2.9.0.0)(必要ありません。おまけです。)
※ここのスペースは約5MBしかないので、あまり大きなファイルをおけないため基本的に圧縮率の高い7-zipにしてあります。
※DropBoxで公開してみます。
☆Invalid timestamp、non monotone timestampのエラーがでる件
SVN-r17643で-vsync 2に関する修正が行われ、それに伴いエラーがでなくなったようです。
SVN-r17555でffmpeg.cに加えられた修正によるためということは分かっています。
とりあえずの回避策を書いておきます。
1.-vsync 1を指定する。-vsync 2だと同じエラーが起きると思います。
2.入力ファイルによりますがframe rateを-rで指定してみる。
こちらで配布しているバイナリはSVN-r17607から17555での修正を適用しないバイナリにしました。
1.-vsync 2を指定すると、同じエラーが起きると思います。-rでframe rateを指定すれば回避はできると思います。
pthreadが利用可能なライブラリはpthreadを有効にしてありますが、ffmpegで利用できるか(しているか)どうかは分かりません。
configureで--enable-libnutを指定すると、nutタイプのファイルのテストだけ、テスト用のファイルを認識してくれないみたいなので指定をはずし、内部コードを利用する形にしました。
これによりmake testで一通りテストを通過し、異常終了もなく、無事seektestまで進みました。
またseektestでは(seek regression test: success)を見ることが出来ました。
ご利用は自己責任でお願いします。
追記:libnutについて
--enable-libnutを指定しなければffmpegの内部コードが使われて、テストをクリアできるようです。
また--enable-libnutを指定してビルドしたバイナリは、自分が出力したnut形式を認識してくれないようでした。
(適切なオプションを指定すればよいのかも知れませんが詳しくないので、突っ込んでいません。)
--enable-libnutを指定しない場合は、認識してくれました。
とりあえずアップするバイナリは--enable-nutを指定しない(ffmpegの内部コードを使う)バージョンにしてみます。
内部コードとの違いが分からないので、動作に制限や不具合はあるかも知れません。
単なる憶測ですが、nutのフォーマットが変更されて、互換性がなくなってるとか、そういうことなのかな、とか。
そのためテスト用のファイルが現状にあっていないとか。
いずれにしても、XXX->nut->YYYといった形で変換できることを優先して--enable-libnutをはずしてみました。
オプション指定を正しくすれば--enable-libnutでも、問題ないのかも知れません。
とりあえずの対策なので、libnutを有効にして上手く動作できないか調査中です。
追記2:libnutを有効にする場合
--disable-demuxer=nut --disable-muxer=nut --enable-libnut
を指定することで、内部コードのnutを使用せずlibnutを有効にしてみました。
残念ながらnutのテストはとおりませんでしたが、動作はしてくれるようです。(XXX->libnut->YYYといった変換はできます。)
(nut以外のテストは全部通りました。)
--disable-muxer=nutを指定せずに、--disable-demuxer=nutを指定してみましたが、テストでまた別のエラーがでました。
メンテナンス状況を見てみると、libnutは2008-12-12が最新。内部コードはlibavformat/nut.cが2008-12-12、libavformat/nutdec.cが2009-01-17。
内部コードも十分メンテナンスされていると考えて、個人的には現時点ではlibnutを使わないことにしました。
備考:make testについて
いくつか有志の手によって配布されているバイナリでテストを行ってみました。
中には途中で異常終了するものもありましたし、異常終了はしなくても、コードエラーでストップして、seektestの手前で止まり、(seek regression test: success)を見るところまで辿りつかないものもありました。
(途中で差分が表示されてテストがストップしました。)
なお個人的につまづいたテストは以下のとおりです。
--enable-libnutを指定している場合、(libnut r661)
tests/regression.sh regtest-nut lavf tests/vsynth1 b "" "." ;echo $?
で1が返ります。クリアするバイナリなら0が返ります。
手動でやると
./ffmpeg_g -y -flags +bitexact -dct fastint -idct simple -sws_flags +accurate_rnd+bitexact -i ././tests/data/b-libav.nut -f crc ././tests/data/nut.lavf.crc
././tests/data/b-libav.nut: Unknown format
となって、ファイル形式を認識できずエラーとなっているようです。
異常終了するケース。
1.tests/regression.sh regtest-mpeg2 vsynth tests/vsynth1 a "" "." ;echo $?
2.tests/regression.sh regtest-svq1 vsynth tests/vsynth1 a "" "." ;echo $?
gccのバージョン、binutilsのバージョンによるのかな?
あるいはyasmを使わないようにしたのも良かったかも知れません。
正確には切り分けできていません^^;
yasmを使わない&--enable-smallを指定することで回避はできています。
(現在はyasmもつかっています。)
最適化オプションを下手に加えると異常終了するバイナリになってしまいました。
(-funroll-loopsなど)
また異常終了しなくてもオプションによっては、テストがクリアできないケースがありました。
(-mfpmath=sseなど)
--enable-smallを使わなくても、CFLAGSの指定で回避できるようです。
3.pthreadsをstaticにした場合
外部ライブラリの問題か異常終了するケースがありました。
とりあえず遭遇したのはlibvorbis。
libvorbisをビルドしなおすことで回避できたかに見えましたが、GCCのバグを忘れていたため再度、コンパイルオプションを調整してビルドしなおすことになりました。遭遇したケースは、
1.vorbisではなく、libvorbisを利用するだけで異常終了。
2.libvorbisを利用して-abオプションを使用したら異常終了。
追記3:yasmの利用について
どうも当初うまくビルドできなかったためyasmを使わないでいたのですが、パスの関係らしい。
yasmのインストール先を/usr/local/binに変更したら動きました。
それとlibavcodec/Makefileに.asmファイルのコンパイル指示を加えたら、ビルドできました。
複数のgccのバージョンを使い分けていたためで、特に変更しなくてもビルドできました。
というよりはmingw32-makeとmakeを使い分ければいいみたい。
bashとmakeを新しいバージョンにすれば素直にmakeでビルドできるようになりました。
余談ですが、yasmではないですがnkf(2.0.8)やsvnもMSYS上で上手く動きませんでした。
インストール先が/bin以下だとうまく扱えないのかなぁ。
とりあえずaliasでフルパスを指定したら、うまく動いてくれています。
さて試行錯誤の中で、とりあえずmake testではsuccessの文字を見ることができるようにはなりました。
でも用意されているテストで十分な検査ができるのかどうかも私には分かりませんし、テスト結果の出力をちゃんと見ているわけでもありません。
テストが止まらないだけで、エラーになっているテストもあるかも知れませんし、出力されるデータに問題がないかどうかはわかりません。
ただ用意されていたテストをクリアできるバイナリをビルドできないかなと挑戦してみた次第です。
またオプションの指定によっては、異常終了するケースもあるかも知れません。
FFmpeg本体もそうですが、外部ライブラリの一部もcvs、svn、gitなどでソースを取得しているからです。
安定性を望むなら安定版のソースを使うべきです。安定動作を望む方は他の有志の方のバイナリの利用をご検討ください。
ビルド環境:
gcc version 4.3.3 (4.3.3-tdm-1 mingw32)(SVN-r17452から)
GNU ld (GNU Binutils) 2.19.1(SVN-r17220からSVN-r18337まで)
GNU ld version 2.17.50 20060824(SVN-r18339から)
gcc version 4.3.2 (4.3.2-tdm-2 mingw32)(SVN-r17451まで)
GNU ld version 2.17.50 20060824(SVN-r17209まで)
関連サイト:
FFmpeg (本家)
FFmpeg Windows Help (Windows関連の情報)
Main Page - FFmpeg on Windows (Windowsでのビルドに関する情報)
Libavfilter - MultimediaWiki フィルタの拡張。一応コンパイルもとおり、組み込むことはできたけど、テストがエラーを起こすので保留中。
参考サイト:
猫科研究所(felid labo) - MinGW+ffmpegインデックス
お気に入りの動画を携帯で見よう
ffmpeg binary eSnips Folder
Bug 37584 - -ftree-ch causes stack corruption on mingw32
Bug 37750 - a lot of crashes with tree optimizations on mingw
Bug 37216 - [cygming] Invalid alignment for SSE store to .comm data generated with -O3
Top page
Vector作者頁