ぬうぱんの備忘録

技術系のメモとかいろいろ

作った曲一覧はこちら

windows上でffmpegに日本語名画像ファイルを与えると上手く行かなかった話

なにがあった

こんな状況

すると、こんなエラーを吐かれる

[image2 @ 03159aa0] Could find no file with with path '縺サ縺偵⊇縺偵・繧医・繧・
png' and index in the range 0-4

みたいなエラーを吐かれる。
ちなみにこれが動画ファイルの場合だと上手く行く。何でや…。

解決策

 -iの前に「-pattern_type none」を付けるとうまくいきます、と言いたかったのだがffmpegを最新の物にアップグレードしたら何もしなくても動くようになった…。
 まぁとにかく、最新版にアッポグレーヨしても動かないよという人は「-pattern_type none」を試すと良いと思います。なお、出力ファイル側でコケてる場合は出力ファイルパスの直前にオプションを書きましょう。

一応の解説

 こんなようなことが動かなかった環境では起きてたんだと思います(ホジホジ)
 まず原因としては

  • マルチバイトのパス文字列をASCIIとして強制的に解釈する
  • 存在しない「%」を見つけてしまう
  • ffmpegではファイル名に「%03d」なんて付けると連番静止画を指定出来る
  • 連番静止画を0-4番を起点に探す
  • 当然、元々は連番静止画でも何でもないのでファイルは見つからない
  • あぼーん

こんな感じのことが内部で起きているのでしょう。
で「-pattern_type」はファイルパス中の「%d」指定みたいなパターンを許容するかの設定を行うパラメータです。デフォルトだと全部アリになってますが、ご覧のとおりファイル名が一意にきまっている場合は邪魔でしかありません。ということで、「-pattern_type none」とすることでこのパターンマッチを全部無効化するんですね。すると、ffmpegは余計なパターンマッチをしなくなるので正常にファイルを開けると、そういうことのようです。