x264 を Windows 上でビルドする 2017
2021/02/11 追記
昨秋あたり移行、エンコード時にエラーを出すようになった!という場合は以下参照で。デフォルト文字コードが変更になってます。
x264 UTF-8になったとかそんなところのメモ - ..たれろぐ..
以下本文
以前の環境(1, 2, 3, 4)で x264 のコンパイルが出来なくなってしまったので、 2017/9/10 時点でのビルド環境を作り直しました。
だいたい 2017-05-21 d2b5f4873e x86: Change assembler from yasm to nasm のコミットせい(AVX512対応のためアセンブラがyasm→nasmに変更された)。
これまでの猫化パック環境に最新の nasm 入れようとしたけど、コンパイラのバージョンが古かったりで簡単にはいかなさそうだったので、ベーシックな MSYS2 ベースでの作り直しとなりました。
2020/06/20追記
ここでは MP4 muxer に GPAC を使っていますが、L-SMASH を使いたい場合は、「GPAC のビルド」の部分を こちら にある L-SMASH のビルドに差し替えてください。
ビルドするもの
mp4 で出力できる x264(32bit)
32bit なのは既存 Avisynth の環境の都合。 64bit バイナリの方が早いらしい+avs4x26x 使えばいけるらしいけど手元未検証なので。
64bit 版をビルドしたい場合は次トピを参照してください。
msys2 の準備
msys2を適当な場所にインストールする。 250MB ぐらい食うので余裕のある場所に。
展開した先の mingw32.exe を実行する。
シェルが開くので、ひとまずパッケージを更新する。
$ pacman -Syuu
- パッケージデータベースの同期中...
- インストールを行いますか? [Y/n] Y
- パッケージを取得します...
で固まるので、ウィンドウを閉じる(閉じない場合は強制終了ダイアログにて強制終了)。
再度 mingw32.exe を起動して、パッケージ更新。
$ pacman -Syuu
- パッケージデータベースの同期中...
- インストールを行いますか? [Y/n] Y
- パッケージを取得します...
ビルドに必要なパッケージのインストール。
$ pacman -S git make tar automake autoconf libtool pkg-config mingw-w64-i686-gcc 依存関係を解決しています... 衝突するパッケージがないか確認しています... パッケージ (70) automake1.10-1.10.3-3 automake1.11-1.11.6-3 (省略)
- インストールを行いますか? [Y/n] Y
nasm のビルド&インストール
まず nasm を公式からダウンロードします。
現時点で最新の http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/ を使います。
$ wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.gz (省略) nasm-2.13.01.tar.gz 100%[===================>] 1.15M 126KB/s 時間 7.4s 2017-09-09 23:50:08 (161 KB/s) - `nasm-2.13.01.tar.gz' へ保存完了 [1210974/1210974] $
展開して configure
$ tar zxf nasm-2.13.01.tar.gz $ cd nasm-2.13.01 $ ./configure --prefix=/mingw32 configure: loading site script /mingw32/etc/config.site checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.exe (省略) config.status: creating doc/Makefile config.status: creating config/config.h config.status: executing default-1 commands $
そして make と make install
$ make -j3 ← j3 はCPU数コア数にあわせて適当に gcc -c -g -O3 -fwrapv -U__STRICT_ANSI__ -fno-common -Werror=attributes -W -Wall -pedantic -Wno-pedantic-ms-format -Wc90-c99-compat -Wno-long-long -Werror=implicit -Werror=missing-braces -Werror=return-type -Werror=trigraphs -Werror=pointer-arith -Werror=missing-prototypes -Werror=missing-declarations -Werror=comment -Werror=vla -DHAVE_CONFIG_H -I. -I. -I./include -I./include -I./x86 -I./x86 -I./asm -I./asm -I./disasm -I./disasm -I./output -I./output -o asm/nasm.o asm/nasm.c gcc -c -g -O3 -fwrapv -U__STRICT_ANSI__ -fno-common -W (省略) gcc -o rdoff/rdf2bin.exe rdoff/rdf2bin.o rdoff/librdoff.a libnasm.a rm -f rdoff/rdf2com.exe cd rdoff && cp -pR rdf2bin.exe rdf2com.exe rm -f rdoff/rdf2ith.exe cd rdoff && cp -pR rdf2bin.exe rdf2ith.exe rm -f rdoff/rdf2ihx.exe cd rdoff && cp -pR rdf2bin.exe rdf2ihx.exe rm -f rdoff/rdf2srec.exe cd rdoff && cp -pR rdf2bin.exe rdf2srec.exe $ make strip strip --strip-unneeded nasm.exe ndisasm.exe $ make install mkdir -p /mingw32/bin /usr/bin/install -c nasm.exe /mingw32/bin/nasm.exe /usr/bin/install -c ndisasm.exe /mingw32/bin/ndisasm.exe mkdir -p /mingw32/share/man/man1 /usr/bin/install -c -m 644 ./nasm.1 /mingw32/share/man/man1/nasm.1 /usr/bin/install -c -m 644 ./ndisasm.1 /mingw32/share/man/man1/ndisasm.1 $ nasm --version NASM version 2.13.01 compiled on Sep 10 2017 $ cd ~ $
GPAC のビルド
2020/06/20追記
MP4 muxer に L-SMASH を使いたい場合は、こちら の L-SMASH のビルドに差し替えてください。
GPAC を公式からダウンロードします。
0.7 系は API が変わっているのか現 x264 (ba24899b) ではサポートされていないようなので、その前の
バージョンの 0.6.1 のtar.gzを使います。
$ wget https://github.com/gpac/gpac/archive/v0.6.1.tar.gz (省略) v0.6.1.tar.gz [ <=> ] 8.69M 4.68MB/s 時間 1.9s 2017-09-10 09:09:00 (4.68 MB/s) - `v0.6.1.tar.gz' へ保存終了 [9113143] $
展開して configure
$ tar zxf v0.6.1.tar.gz $ cd gpac-0.6.1 $ ./configure --prefix=/mingw32
** System Configuration Install prefix: /mingw32 Source path: /home/foobar/gpac-0.6.1 C compiler: gcc C++ compiler: g++ make: make CPU: x86 Big Endian: no ** GPAC 0.6.1 rev Core Configuration ** debug version: no GProf enabled: no Static build enabled: no Memory tracking enabled: no Fixed-Point Version: no IPV6 Support: no Static Modules: no ** Detected libraries ** zlib: system SDL Support: no OpenGL support: yes TinyGL support: no OpenSSL support: no Mozilla XUL/GECKO support: no DirectX Support: yes XMLRPC Support: no wxWidgets support: no ** Extra Libraries used ** SpiderMonkey: no FreeType: no JPEG: no OpenJPEG: no PNG: no MAD: no FAAD: no XVID: no FFMPEG: no Xiph OGG: no Platinum UPnP: no AVCap: no A52 (AC3): no OpenSVCDecoder: no OpenHEVCDecoder: no Freenect: no Creating config.mak config.h is unchanged Check config.log for detection failures Done - type 'make help' for make info, 'make' to build $
ビルド。ライブラリだけでいいので、ターゲットは lib を指定します。
$ make lib -j3 例により j3 は環境に合わせて適当に fatal: Not a git repository: '/home/foobar/gpac-0.6.1/.git' No GIT Version found make -C src all (省略) mv ../bin/gcc/libgpac.dll ../bin/gcc/libgpac.dll.6.0.0 ln -sf libgpac.dll.6.0.0 ../bin/gcc/libgpac.dll.6 ln -sf libgpac.dll.6.0.0 ../bin/gcc/libgpac.dll make[1]: ディレクトリ '/home/foobar/gpac-0.6.1/src' から出ます $
ビルドされたライブラリのインストール。
$ make install-lib fatal: Not a git repository: '/home/foobar/gpac-0.6.1/.git' mkdir -p "/mingw32/include/gpac" install -m 644 /home/foobar/gpac-0.6.1/include/gpac/*.h "/mingw32/include/gpac" mkdir -p "/mingw32/include/gpac/internal" install -m 644 /home/foobar/gpac-0.6.1/include/gpac/internal/*.h "/mingw32/include/gpac/internal" mkdir -p "/mingw32/include/gpac/modules" install -m 644 /home/foobar/gpac-0.6.1/include/gpac/modules/*.h "/mingw32/include/gpac/modules" install -m 644 config.h "/mingw32/include/gpac/configuration.h" mkdir -p "/mingw32/lib" install -m 644 "./bin/gcc/libgpac_static.a" "/mingw32/lib" make installdylib make[1]: ディレクトリ '/home/foobar/gpac-0.6.1' に入ります fatal: Not a git repository: '/home/foobar/gpac-0.6.1/.git' install -m 755 bin/gcc/libgpac.dll.a /mingw32/lib install -m 755 bin/gcc/libgpac.dll /mingw32/bin make[1]: ディレクトリ '/home/foobar/gpac-0.6.1' から出ます $ cd ~ $
これで GPAC 入り x264 のビルド環境ができあがり。
x264 のビルド
あとは従来と同じく公式の git リポジトリから x264 のソースを clone してきてビルドするだけ。
公式 git リポジトリの公式からソースを clone する。
$ git clone http://git.videolan.org/git/x264.git
Cloning into 'x264'...
remote: Counting objects: 20569, done.
remote: Compressing objects: 100% (4266/4266), done.
remote: Total 20569 (delta 17004), reused 19713 (delta 16260)
Receiving objects: 100% (20569/20569), 4.83 MiB | 1.13 MiB/s, done.
Resolving deltas: 100% (17004/17004), done.
$
configure。 host オプション付けないと妙な exe ができるので注意。
ビット深度 10bit のバイナリを作る場合は --bit-depth=10 を追加する。
$ cd x264/ $ ./configure --extra-cflags="-pipe -march=native" --enable-strip --host=i686-w64-mingw32 platform: X86 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: gpac gpl: yes thread: win32 opencl: yes filters: crop select_every lto: no debug: no gprof: no strip: yes PIC: no bit depth: 8 chroma format: all $
make する。何かしらの動画を使って最適化する場合は make fprofiled を使う。
ここでは、そこまでこだわってないので普通に make します。
$ make -j3 j3 オプションは環境に応じて(ry cat common/opencl/x264-cl.h common/opencl/bidir.cl common/opencl/downscale.cl common/opencl/weightp.cl common/opencl/intra.cl common/opencl/subpel.cl common/opencl/motionsearch.cl | ./tools/cltostr.sh common/oclobj.h dependency file generation... (省略) gcc-ranlib libx264.a gcc -o x264.exe x264res.o x264.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/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 -lz -lws2_32 -lwinmm -lshell32 -m32 -Wl,--large-address-aware -Wl,--dynamicbase,--nxcompat,--tsaware -s $
動作確認する。
$ ./x264 --version x264 0.152.2851 ba24899 built on Sep 10 2017, gcc: 7.2.0 x264 configuration: --bit-depth=8 --chroma-format=all libx264 configuration: --bit-depth=8 --chroma-format=all x264 license: GPL version 2 or later $
exit して msys をインストールしたフォルダの home\(ユーザ名)\x264\x264.exe を適当な場所に移動なりコピーするなりすればできあがり。
一応動くか確認。動くはず。
C:\msys32\home\foobar\x264>x264 --version x264 0.152.2851 ba24899 built on Sep 10 2017, gcc: 7.2.0 x264 configuration: --bit-depth=8 --chroma-format=all libx264 configuration: --bit-depth=8 --chroma-format=all x264 license: GPL version 2 or later
参考:
- MSYS2を利用したffmpegのビルド方法 - k_piの雑記帳 http://k-pi.hatenablog.com/entry/2017/04/09/221429
- MSYS2で快適なターミナル生活 - Qiita http://qiita.com/Ted-HM/items/4f2feb9fdacb6c72083c
- MSYS2 のインストール周りについて
- x264のビルド http://mylabo.webcrow.jp/x264.php
- x264 のコンパイルオプションの参考
- MSYS2を利用したffmpegのビルド方法 - k_piの雑記帳 http://k-pi.hatenablog.com/entry/2017/04/09/221429
- ビルド用のパッケージ類の参考
Git for Windows のエディタ (vim) でログが文字化けする問題
現象と経緯
コマンドラインから -m オプションでコミットメッセージを指定してコミットする。
>git commit -m "* 実験"
その後、 amend すると vim が起動して
>git commit --amend
vim が文字コードを誤っているせいなので、環境変数 %USERPROFILE% にあるユーザー・プロファ
イル・フォルダ、一般には C:\Users\(ユーザ名) になっているので、そこに vim の設定ファイ
ル .vimrc を置き、文字コードを指定してやれば文字化けは回避できる様になる。
ユーザフォルダに .vimrc を作成し、以下の 1 行を書く。
set encoding=utf-8
これだけで、文字化けは解消できる。
>git commit --amend
Firefox 55 で使えなくなった The Addon Bar の代わり → Status-4-Evar
Firefox 55 で使えなくなった The Addon Bar (Restored) の代用アドオンとして Status-4-Evar を見つけた。
S4Eはこの 8/20 の更新で対応した模様。
自分の用途の範囲(アドオンアイコンをポチポチ置く)では The Addon Bar と同様に使えてる。
Firefox 55 で使えなくなって効いてるのが Make Link で、メニューが「エラー」となってて辛い。
あと、はてブ拡張がブクマ時のタグ一覧からのクリック→タグ挿入が効かなくなってて地味に辛い。
RTX5000 に ssh 接続できないバグ?
ファームウェア Rev.14.00.21 で遭遇。
Rev.14.00.22 に更新したら出なくなった。
ssh で接続して、ユーザ名とパスワードを入れるところまでは進むものの、
その後うんともすんとも言わなくなる。
login as: hogehoge(ッターン) manager@192.168.1.1's password:(ッターン)
で、その後すぐに出るはずのログインメッセージが出てこずに固まる。
RTX5000 Rev.14.00.21 (Thu Jan 12 08:23:00 2017) Copyright (c) 1994-2017 Yamaha Corporation. All Rights Reserved. To display the software copyright statement, use 'show copyright' command. 00:a0:de:XX:XX:X0, 00:a0:de:XX:XX:X1, 00:a0:de:XX:XX:X2, 00:a0:de:XX:XX:X3 Memory 1024Mbytes, 4LAN >
RTX5000のログには ssh 経由で接続成功してるらしきログが残っているもの
の、実際にはその先に進まず強制切断すると、ログには Logoff が残る。
Login succeeded for SSH: 192.168.1.200 hogehoge Logout from SSH: 192.168.1.200 hogehoge
しばらく頭を抱えてから、ファームの更新具合を確認したら Rev.14.00.22 が出ていた
ので特に考えもなくなんとなくで更新。
そうするとこの症状はでなくなった。
リリースノート には書かれていないし、もしかしてレアなバグ踏んでた?
ITPRPTECH Media Wave HD Pro RED のレビュー
修正
- 2018/3/10 2017/9/2 公開のアップデートファームでCIFSサポートが改善されていたので、各所修正しました
以下本文
『メディアプレイヤー、NAS、外付ストレージの最強3in1』を謳う Media Wave HD Pro RED を手
に入れたのでレビュー。
残念ながら狙っていた用途と製品が合致していなかったのか、ぐぬぬなレビューとなってます。
Media Wave HD Pro RED は JUST SYSTEMS 直営の Just MyShop モデルとして ITPROTECH 社が 提供
しているメディアプレイヤーでこちらから購入可能です。 お値段は 8,000円前後。
ITPROTECH 社での公式ページはこちらで、公式ページにある通り、以下の特徴を謳ってます。
- 2.5 インチ HDD or SSD × 1 を内蔵可
- USB 3.1 で PC に接続することで USB 外付けドライブとして利用可
- もちろんディスク内のメディアファイルは再生可能
- 外部ストレージ対応
- USB ストレージと microSD 上のメディアファイルを再生可
- ネットワーク対応
電源は AC アダプタ、 USB Type-A、車のシガーライターソケットの3種に対応する電源コードが付属
しています。USB 3.1 、HDMI、 LAN ケーブルも付属しており、各方面への接続に必要そうなケーブル
類は(長さを気にしなければ)一通りそろっています。
操作は一般的なストレージ内蔵型メディアプレイヤーと同じく、付属リモコンを介して全操作をする
形になっています。
さて、自分がこれに手を出した理由(期待)ですが、ネットワーク対応と言うことで自宅 QNAP の共
有フォルダに保存してある写真・映像データを PC レスで再生できる手頃なネットワークメディアプ
レイヤーとしてよさげかな、と触手が蠢いた次第です。
テック社の HD600A やバッファローの LT-V200 のような端末を期待してたわけです。
開封して動作確認てがら「何ができるのか」ということを探ったところ、
- ストレージレス起動(内蔵ドライブ無し、USB外部ストレージ無し)
- OK
- 電源コードを繋いでから 1-2 分でメニューがでます
- USB外部ストレージ内の映像データの再生 (1080/24P MKV H264L4.1+AAC)
- OK
- USB外部ストレージ内の音楽データの再生 (MKA FLAC)
- NG
- 一覧に表示されないため、 MKA 形式(拡張子)自体未対応っぽい
- まぁマイナーだしねorz
- NG
- DLNA 経由で QNAP 内の写真データの再生 (JPEG)
- OK
- 自動でスライドショーに
- DLNA 経由で QNAP 内の映像データの再生 (720/30P MP4 H264L3.1+AAC)
- OK
- CIFS (Samba) 経由でQNAP 内の動画データの再生
NG : フォルダを開こうとすると待機中のまま固まる完全にフリーズするのではなく、待機アニメーションは動いているので何かしらのタイムアウト待ち?電源コード抜き差しで再起動しないと復帰せず
- OK (1080/24P MKV H264L4.1+AAC)
- 2017/9/2 公開のアップデートファームで改善されました
こんな感じでポータブルメディアプレーヤーとしてはいいものの、メインの NAS と絡めたネットワークメディ
アプレーヤーとしては難あり、という感じにorz
CIFS のサポートは弱いようで、固まる以外にも
不可視フォルダにアクセスできないGUI 上からはフォルダを選択するしかない=直接フォルダ名を入力する方法が見あたらないため
認証が必要なフォルダにアクセスできない?開こうとすると固まるため確証はないですが、たぶんユーザ名やパスワードを入力できない
という弱点がありました。ぐぬぬ。
見たいファイルは不可視&要認証なフォルダに置いてるのよねorz
2017/9/2 公開のアップデートファームで改善されてました。
- ユーザ名・パスワードが必要なフォルダはダイアログが出ます
- 不可視設定しているフォルダは見えません
- 直接指定する方法があるのかもしれませんが、触った分にはわかりませんでした。
他に気付いた弱点は以下の通り。
- 外部メディア(USBストレージや microSD)の脱着は電源断状態でなければダメ
- 電源コードを抜き差ししないといけない
- 「これ(USBメモリ)の写真だしてー」みたいな要求に即応できない
- ReadOnly で automount して〜みたいにできんだろうか
- リモコンボタンの反応が一息遅い
- 100ms 未満なんだろうけどディレイが入るのでもっさり感ある
- SoC の RTD1185 が 500MHz らしいので仕方ないかなぁとも思う
NAS を相手にする場合、階層を潜るたびにネトワーク上でNASを探索してるようで、ボタン操作→画面反映までが待たされる。頻繁に出入りする機器でも無いのでキャッシュしといて欲しいなぁ- 2017/9/2 公開のアップデートファームで改善されてました。
Samba 経由で〜となると Raspberry Pi + Kodi とかのほうがいいのかなぁ…
「いかしたネットワークメディアプレイヤーがあるぜ!」ってのがあればコメントなりでお知らせいただければ。
nu board JABARAN を手に入れた。
設計やら何やらするときや打ち合わせやらでのアイデア練りまとめ用にnu boardのJABARANを買った。
練り練り中はうだうだ考えながら書いて、書いては考え整理して修正して〜の繰り返しだから、やっぱり
ホワイトボード的なのがいいよねと。
現行モデルはそのまま持ち歩く想定で表紙が付いてるけれど、買ったのは旧モデルなのでケース+
ボード+マーカーの3点セット。
畳んでケースに入れるとだいたい A4 のクリップボードサイズなので、バッグに入れといて
ホワイトボードがない場所で打ち合わせしたりするときに、すっと取り出して見せるとスマー
トに見える(と期待)。
ケースあるからノートPCとかとバッグにつっこんどいでも痛みにくそうなのが旧モデルのメリット。
全部広げると A4×4 になるので、ミーティングテーブルに広げてあっちとこっちからうだうだ
やるにもよさげな感。
同じ方向性の製品に、バタフライボードもあるけれど、こちらは 1万円からとお高いのが
難点(切り離せたりで面白そうだけれども)。
JABARAN の方は、 2000円ちょいなので手は出しやすい。
→ nu board JABARAN 現行モデル(方眼&白)
両面白白モデルがあってもいいよなーとも思ったり。現行モデルも角を留めるゴムバンドがあれ
ばまとまりよさそうよね。