前提条件
- OSはWindows(10)
- 公式から紹介されているWindows向けビルド(gyan)を使用
- (fullを選んでいるがessentialでもdrawtextに必要なライブラリは入っている)
- filterにdrawtextを含めるとエラーもなくFFmpegが終了する
- fontの指定/無指定、fontfileのファイル名のみorフルパス指定に無関係に落ちる
- 環境変数 Env:FC_CONFIG_DIR, Env:FONTCONFIG_PATH, Env:FONTCONFIG_FILEを指定するとFontconfigのWarningは出るが落ちる
- Env:抜きではFontconfigのエラーも出ずに落ちる
- https://blob.pureandapplied.com.au/solved-ffmpeg-fontconfig-woes-on-windows/ を参考
個人的環境
- ver4.4では自分で適当に書いた fonts/fonts.conf をbinディレクトリ内に入れておけば問題なかった
- <fontfonfig>タグ内に<dir>タグでWindowsのfontディレクトリと、ユーザーごとのfontディレクトリを指定したのみ
- <dir>c:/Windows/Fonts</dir>
- <dir>c:/Users/USERNAME/AppData/Local/Microsoft/Windows/Fonts</dir>
- 環境変数等は未指定で動作していた
- <fontfonfig>タグ内に<dir>タグでWindowsのfontディレクトリと、ユーザーごとのfontディレクトリを指定したのみ
- ver6.0以降に乗り換えようとした途端、同様の方法では上記の通りエラーもなく終了するようになった
- 現在最新のver7.1も同様
- changelogにはそれらしい記載なし
解決方法
いろいろやってみた結果とりあえず最悪の解決方法として、
- カレントディレクトリ(ffmpeg.exeの位置、ではなく)にフォントファイルを配置
- fontfile=フォント名.ttc と指定(font=フォント名、ではなく)
にてdrawtext filterを指定しても落ちずに成功するようになった。環境変数は指定しなくていい。
これならこの記事のように フォントファイルのフルパス指定なら通るのではないかと思うのだが通らなかった。
fontfile=C\\:Windows/Fonts/フォント名.ttc
(:はエスケープしてやる必要あり)
原因の推測
上記記事によるとfonts/fonts.confを自動的に見に行っていたようだが、4.4~6.0までの間で見に行かないようになったのだろうか?(ソース追え)