この記事は 2017/9 時点で古い情報です。2017/9 時点のビルド手順はこちらを参照してください。
Update
- 2017/9/10 この環境では x264公式 rev2803 (d2b5f48) 以降のコミットに対応できなくなったので新しいやりかたで書き直しました(AVX512対応のため yasm から nasm への移行があったため)。
以下元記事
ビルドするもの
前回は pthread を使っていましたが、x264 r1834(a51816)でWin32ネイティブスレッドがサポートされたので、スレッド周りはネイティブを使うようにして、mp4 出力をサポートした x264
用意しておくもの
- MinGW猫科研究所パック
- 猫科研究所(felid labo) - MinGW猫科研究所パックからダウンロード
- ここでは msys_felidlabo_a005.7z を使ってます
- git 環境
- リポジトリから最新の x264 を引っ張ってくるのに使います
- msysgit あたりで環境作っといてね
- GPAC
- mp4 出力させるのに必要(不要ならパスしてOK)
- ここでは gpac-0.4.5.tar.gz を使ってます
MinGW猫科研究所の準備
猫科研究所パックをHDD上の適当な場所に展開する。 230MB ぐらい食うので余裕のある場所に(RAMディスク上に展開したところ、次の手順でエラーを起こしたので展開先は通常のHDD上が無難そうです)。
展開した先の msys\_felidlabo の中にある 04_gccinstall.bat を実行する。
1) gcc-4.4.1-tdm 2) gcc-3.4.5-20060117-3 3) cancel select gcc version :
と聞いてくるので 1 を選ぶ(pthread のコンパイルに 4 系が要求される模様)。
INFO: gcc-4.4.1-tdm installed. 続行するには何かキーを押してください . . .
続いて 05_plus-build.bat を実行。結構時間かかる。手元では30分弱。
pthread のビルド
pthread 版ではここで pthredのビルドをしてましたがWin32ネイティブスレッドに対応したので、この手順は不要になりました。
GPAC のビルド
Windows の explorer なりシェルなりでダウンロードしておいた gpac-0.4.5.tar.gz を msys のホームディレクトリにコピーします。
C:\>copy gpac-0.4.5.tar.gz C:/msys/home/xxxxx/
同じくmsys のホームディレクトリに次のパッチファイルを作っておきます。
ファイル名は適当でいいですが、libpng14-infopp-null.patch とでもしておきます。
--- src/media_tools/img.c +++ src/media_tools/img.c @@ -551,7 +551,7 @@ /* Allocate/initialize the image information data. REQUIRED */ info_ptr = png_create_info_struct(png_ptr); if (info_ptr == NULL) { - png_destroy_write_struct(&png_ptr, png_infopp_NULL); + png_destroy_write_struct(&png_ptr, NULL); return GF_IO_ERR; }
msys.bat を実行。ここからしばらく MINGW32 のシェル上での操作になります。
gpac を展開して展開先のディレクトリに移動します。
$ tar zxf gpac-0.4.5.tar.gz $ cd gpac $
先ほど作っておいたパッチをあてます。
$ patch -p0 -N < ../libpng14-infopp-null.patch (Stripping trailing CRs from patch.) patching file src/media_tools/img.c Hunk #1 succeeded at 551 with fuzz 1. $
./configure。 --prefix=/mingw を付けるのがこの環境でのポイント。
$ ./configure --prefix=/mingw (省略) Creating config.mak Done - type 'make help' for make info, 'make' to build $
特殊なのがここでの config.h のコピー。やっとかないと make で No such file とエラーになる
$ cp config.h include/gpac/internal/
そして make と make install
$ make lib install-lib (省略) mkdir -p "/mingw/lib" install -m 644 "./bin/gcc/libgpac_static.a" "/mingw/lib" mkdir -p "/mingw/lib" install -m 644 "./bin/gcc/libgpac_static.a" "/mingw/lib" $
x264 のビルド
まずは x264 のソースをリポジトリから引っ張ってくる。この時点では r1884(7313bb) だったので以降それ基準で。(コマンドラインから git を叩ける状態になっていないとできないので注意)
$ git clone git://git.videolan.org/x264.git x264 Cloning into x264... remote: Counting objects: 13216, done. remote: Compressing objects: 100% (4093/4093), done. remote: Total 13216 (delta 10739), reused 11274 (delta 9082) Receiving objects: 100% (13216/13216), 3.27 MiB | 72 KiB/s, done. Resolving deltas: 100% (10739/10739), done.
ここで clone されるのは master ブランチなので stable で、と言う場合は stable ブランチに切り替えておく。(master で行く場合はこの手順は不要)
$ git co -b stable origin/stable Branch stable set up to track remote branch stable from origin. Switched to a new branch 'stable' $ git br master * stable $
そして ./configure。configure の後、gpac が yes、thread が win32 になってるか確認。
$ cd x264 $ ./configure --enable-win32thread Platform: X86 System: MINGW asm: yes avs: yes lavf: no ffms: no gpac: yes gpl: yes thread: win32 filters: crop select_every debug: no gprof: no PIC: no shared: no visualize: no bit depth: 8 You can run 'make' or 'make fprofiled' now.
最後に make して x264.exe が出来ればできあがり。
$ make (省略) ranlib libx264.a gcc -o x264.exe x264.o input/input.o input/timecode.o input/raw.o input/y4m.o ou tput/raw.o output/matroska.o output/matroska_ebml.o output/flv.o output/flv_byte stream.o filters/filters.o filters/video/video.o filters/video/source.o filters/ video/internal.o filters/video/resize.o filters/video/cache.o filters/video/fix_ vfr_pts.o filters/video/select_every.o filters/video/crop.o filters/video/depth. o input/avs.o input/thread.o output/mp4.o libx264.a -lgpac_static -lwinmm -Wl,- -large-address-aware -s $ ls x264.exe x264.exe $
exit して msys\home\(ユーザ名)\x264.exe を適当な場所にコピーして動くか確認。動くはず。
C:\>x264 --help x264 core:112 r1875 78b4fc4 Syntax: x264 [options] -o outfile infile Infile can be raw (in which case resolution is required), or YUV4MPEG (*.y4m), or Avisynth if compiled with support (yes). or libav* formats if compiled with lavf support (no) or ffms support (no). Outfile type is selected by filename: .264 -> Raw bytestream .mkv -> Matroska .flv -> Flash Video .mp4 -> MP4 if compiled with GPAC support (yes) Output bit depth: 8 (configured at compile time) Options: (省略) C:\>
以上でビルドは完了です。
あとは煮るなり焼くなり炊くなりご随意に。
謝辞
msys の環境を作るのが面倒なのですが、そこをさくっとできるようなパッケージを作成&公開されている猫科研究所の中の人に感謝です。
参考:
- 猫科研究所(felid labo) - 今更MinGW/MSYSシリーズ http://www.up-cat.net/%25BA%25A3%25B9%25B9MinGW%252FMSYS%25A5%25B7%25A5%25EA%25A1%25BC%25A5%25BA.html
- ひまぽ日記@tndl.net » x264のコンパイル@msys and Linux http://blog.tndl.net/2008/02/27/108
- DTV - エンコード用ツールのコンパイル http://www.h6.dion.ne.jp/~nytheta/dtv/install.html
- 最近気になるアレ! x264/mencoder http://heptech.blog85.fc2.com/category9-1.html
- 2ch ソフトウェア板 x264 スレ
lavf と ffms をサポートしたビルドを作りたいけどとっかかりが見つからないんだよねぇorz