x264 UTF-8になったとかそんなところのメモ

H265 のご時世なのに、端末やら何やらの都合で x264 にしがみついてるわけですが、昨秋に入ったコミット 7ab4c928 で、 x264 がいろいろエラーを出すようになったのでメモ。

commit 7ab4c928ef4511ea5753a36a57c3506d9fd5086b
Author: Henrik Gramner <henrik@gramner.com>
Date:   Sat Sep 12 19:24:00 2020 +0200

    Add support for long filenames on Windows 10

何があったかというと、manifest ファイルが追加されてその中で activeCodePage UTF-8 という指定が付いたので、x264 プロセスのデフォルト文字コードUTF-8 になったというそういうことです。

正道の対応策は「x264 が読むファイルは全てUTF-8にする」です。
直前のコミット d198931a63 でも「GPAC が UTF-8 サポートしてるから~」とかあるので UTF-8 統一が方針に則った方向と思います。

この変更で出るようになったエラーがこんなのです↓ (現行の master fa264466 のビルドで SJIS なファイルを読んだ場合のエラー)
中身にSJIS(非ASCII)を含む avs ファイルを入力にした場合。例えば日本語パスから Import した場合のエラーメッセージ。

avs [error]: Import: couldn't open "文字化け化け"
(Enc.avs, line 11)
x264 [error]: could not open input file `Enc.avs'

avs の中で (DGIndex で Demux した) d2v を読んでいて、d2v の中に日本語パスがあった場合のエラーメッセージ。

avs [error]: Avisynth open failure:MPEG2Source: Could not open one of the input files. (Enc.trim.avs, line 4)

(Enc.avs, line 13)
x264 [error]: could not open input file `Enc.avs'


対策としては以下のどれかで、上から順におすすめです(上で書いたとおりUTF-8化路線なので)。

  • x264 が読むファイルは全て UTF-8 にする。
    • バッチの途中とかでファイルの文字コード変換かけるようにする。など。
  • x264 が読むファイルをASCIIに統一する。
    • 上の亜種。日本語パスなど使わず全てASCIIで通せば自動的に UTF-8 対応に。
  • 7ab4c928 を含まないビルドを作る。
    • rebase -i で d 7ab4c928 したビルドで試したところ、ビルド時エラーなし。実行時も従来通りSJISファイルを与えてもエラーなしでした。ただし最後までエンコードしてないのでエンコード結果が正しいかは不明です。


エンコードチェーン見直さないと。。