x264 + L-SMASH を Windows 上でビルドする
MP4 muxer に L-SMASH を使った x264 のビルド手順。
基本は以下の過去トピの通り MSYS2 上で進め、 「GPAC のビルド」の部分を L-SMASH に置き換えるだけ。
L-SMASH のビルド
L-SMASH を公式GitHubリポジトリ GitHub L-SMASH's official repo から clone します。
$ git clone https://github.com/l-smash/l-smash.git Cloning into 'l-smash'... remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (5/5), done. remote: Total 7412 (delta 0), reused 1 (delta 0), pack-reused 7407 Receiving objects: 100% (7412/7412), 7.71 MiB | 4.84 MiB/s, done. Resolving deltas: 100% (5445/5445), done. $
続いて configure。
64bit 版をビルドする場合は prefix 指定を mingw32 → mingw64 に変更。
$ cd l-smash/ $ ./configure --prefix=/mingw32 (32bit版) $ ./configure --prefix=/mingw64 (64bit版はこっち)
generating config.mak ... SRCDIR = . DESTDIR = prefix = /mingw32 exec_prefix = ${prefix} bindir = ${exec_prefix}/bin libdir = ${exec_prefix}/lib includedir = ${prefix}/include CC = gcc AR = ar LD = gcc RANLIB = ranlib STRIP = strip STATICLIBNAME = liblsmash.a STATICLIB = liblsmash.a SHAREDLIBNAME = liblsmash-2.dll SHAREDLIB = IMPLIB = liblsmash.dll.a CFLAGS = -Os -ffast-math -Wshadow -Wall -std=c99 -pedantic -I. -I. -D__USE_MINGW_ANSI_STDIO=1 -fexcess-precision=fast LDFLAGS = -L. -Wl,--large-address-aware SO_LDFLAGS = LIBS = -lm LIBARCH = i386 DEFNAME = liblsmash-2.def SLIB_CMD = sed -i "s/ @[^ ]*//" $(DEFNAME); dlltool -m $(LIBARCH) -d $(DEFNAME) -l lsmash.lib -D $(SHAREDLIBNAME) configure finished type 'make' : compile library and tools type 'make install' : install all into system type 'make lib' : compile library only type 'make install-lib' : install library and header into system $
ビルド。ライブラリだけでいいので、ターゲットは lib を指定します。
$ make lib -j15 j15 は環境に合わせて適当に gcc -c -Os -ffast-math -Wshadow -Wall -std=c99 -pedantic -I. -I. -D__USE_MINGW_ANSI_STDIO=1 -fexcess-precision=fast -o common/alloc.o common/alloc.c gcc -c -Os -ffast-math -Wshadow -Wall -std=c99 -pedantic -I. -I. -D__USE_MINGW_ANSI_STDIO=1 -fexcess-precision=fast -o common/bits.o common/bits.c gcc -c -Os -ffast-math -Wshadow -Wall -std=c99 -pedantic -I. -I. -D__USE_MINGW_ANSI_STDIO=1 -fexcess-precision=fast -o common/bytes.o common/bytes.c (省略) gcc -c -Os -ffast-math -Wshadow -Wall -std=c99 -pedantic -I. -I. -D__USE_MINGW_ANSI_STDIO=1 -fexcess-precision=fast -o core/timeline.o core/timeline.c gcc -c -Os -ffast-math -Wshadow -Wall -std=c99 -pedantic -I. -I. -D__USE_MINGW_ANSI_STDIO=1 -fexcess-precision=fast -o core/write.o core/write.c ar rc liblsmash.a common/alloc.o common/bits.o common/bytes.o common/list.o common/multibuf.o common/osdep.o common/utils.o codecs/a52.o codecs/alac.o codecs/description.o codecs/dts.o codecs/h264.o codecs/hevc.o codecs/id.o codecs/mp4sys.o codecs/mp4a.o codecs/mp4v.o codecs/nalu.o codecs/qt_wfex.o codecs/vc1.o codecs/wma.o importer/a52_imp.o importer/adts_imp.o importer/als_imp.o importer/amr_imp.o importer/dts_imp.o importer/importer.o importer/isobm_imp.o importer/mp3_imp.o importer/nalu_imp.o importer/vc1_imp.o importer/wave_imp.o core/box.o core/box_default.o core/box_type.o core/chapter.o core/file.o core/fragment.o core/isom.o core/meta.o core/print.o core/read.o core/summary.o core/timeline.o core/write.o ranlib liblsmash.a $
ビルドされたライブラリのインストール。
$ make install-lib install -d /mingw32/include install -m 644 ./lsmash.h /mingw32/include install -d /mingw32/lib/pkgconfig install -m 644 liblsmash.pc /mingw32/lib/pkgconfig install -m 644 liblsmash.a /mingw32/lib $ cd ~ $
これで L-SMASH 入り x264 のビルド環境ができあがり。
x264 のビルド
あとは 公式の git リポジトリ から x264 のソースを clone してきてビルドするだけ。
公式 git リポジトリからソースを clone する。
$ git clone http://code.videolan.org/videolan/x264.git Cloning into 'x264'... warning: redirecting to https://code.videolan.org/videolan/x264.git/ remote: Enumerating objects: 22359, done. remote: Counting objects: 100% (22359/22359), done. remote: Compressing objects: 100% (3848/3848), done. remote: Total 22359 (delta 18548), reused 22258 (delta 18468), pack-reused 0 Receiving objects: 100% (22359/22359), 5.20 MiB | 1.23 MiB/s, done. Resolving deltas: 100% (18548/18548), done. $
configure。 host オプション付けないと妙な exe ができるので注意。
Commit 71ed44c7 でビット深度 10bit, 8bit 両対応のバイナリがデフォルトになったので、ビット深度設定オプション --bit-depth は不要に。
64bit 版をビルドする場合は host 指定を i686-w64-mingw32 → x86_64-w64-mingw32 に変更する。
$ cd x264/ $ ./configure --extra-cflags="-pipe -march=native" --extra-ldflags="-static -static-libgcc" --enable-strip --host=i686-w64-mingw32 (32bit版) $ ./configure --extra-cflags="-pipe -march=native" --extra-ldflags="-static -static-libgcc" --enable-strip --host=x86_64-w64-mingw32 (64bit版) platform: X86 64bit版では X86_64 byte order: little-endian system: WINDOWS cli: yes libx264: internal shared: no static: no asm: yes interlaced: yes avs: avisynth lavf: no ffms: no mp4: lsmash ここが lsmash になっているか確認 gpl: yes thread: win32 opencl: yes filters: crop select_every lto: no debug: no gprof: no strip: yes PIC: no bit depth: all chroma format: all You can run 'make' or 'make fprofiled' now. $
make する。何かしらの動画を使って最適化する場合は make fprofiled を使う。
ここでは、そこまでこだわってないので普通に make します。
$ make -j15 j15 オプションは環境に応じて(ry cat common/opencl/x264-cl.h common/opencl/bidir.cl common/opencl/downscale.cl common/opencl/intra.cl common/opencl/motionsearch.cl common/opencl/subpel.cl common/opencl/weightp.cl | ./tools/cltostr.sh common/oclobj.h dependency file generation... windres --target=pe-i386 -I. -o x264res.o x264res.rc (省略) gcc-ranlib libx264.a gcc -o x264.exe x264res.o x264.o autocomplete.o input/input.o input/timecode.o input/raw.o input/y4m.o output/raw.o output/matroska.o output/matroska_ebml.o output/flv.o output/flv_bytestream.o filters/filters.o filters/video/video.o filters/video/source.o filters/video/internal.o filters/video/resize.o filters/video/fix_vfr_pts.o filters/video/select_every.o filters/video/crop.o input/avs.o output/mp4_lsmash.o filters/video/cache-8.o filters/video/depth-8.o input/thread-8.o filters/video/cache-10.o filters/video/depth-10.o input/thread-10.o libx264.a -L/mingw32/lib -llsmash -lm -lshell32 -m32 -static -static-libgcc -Wl,--large-address-aware -Wl,--dynamicbase,--nxcompat,--tsaware -s $
動作確認する。
$ ./x264 --version x264 0.160.3009 4c9b076 built on Jun 20 2020, gcc: 10.1.0 x264 configuration: --chroma-format=all libx264 configuration: --chroma-format=all x264 license: GPL version 2 or later $
exit して msys をインストールしたフォルダの home\(ユーザ名)\x264\x264.exe を適当な場所に移動なりコピーするなりすればできあがり。
それにしても 2017年だと -j3 だったのが -j15 になって隔世感ある。