†ぽんこつビデオ工房†

ログの日本語の文字化け

作成開始日 2018.03.10
最終更新日 2018.03.10

ffmpegの吐き出すログに含まれる日本語のファイル名やタグは文字化けしてしまう。これは、日本語をUnicodeで出力しちゃうせいなんだが…一応、以下の要領で出力メッセージをnkf漢字フィルターに通せば解決する;
ffmpeg -i inpfile …… outfile 2>&1 | nkf -s -u
ポイントは、ffmpegのログは標準出力(stdout:1)ではなく、標準エラー出力(stderr:2)に出力される点。そこで、「2>&1」で標準エラー出力を標準出力にリダイレクトして、nkfに食わせている。また、nkfのオプションの「-s」はShift-JIS(SJIS)出力指定、「-u」は出力のバッファリングを無効化。「-u」を指定しないと、途中経過が数分に一度程度しか表示さない。

【注意】この方法では上書き警告が出ないことがあるようだ(詳細は未検証)。

【参考】これ応用すれば、ログ出力のうち、必要な行だけ出力するバッチも作成できるかも…と思ったが、ちょっと難しそう。バッチは、通常の方法ではstdinからの入力を受け取れないようなのだ(コマンドライン引数はstdinではないらしい)。ネットで「find /v ""」を使うと言う裏技は見つけたが、これだと、ffmpegの出力の終了を検出できないような…今後の課題。

【参考】出力ではなく、コンソール(コマンドライン窓)の方をUnicode化する方法もあるが、あまり上手くいかない。通常の日本語モード(CP=932)でフォントを「MSゴシック」に設定したあと、一度コンソールを終了し、再度コンソールを起動して「CHCP 65001」を実行すればUnicodeが通るようになる。ただし、フォントサイズや画面サイズを変更しようとすると、とんでもないことになる。所詮裏技レベル。


【ぽんこつビデオ工房目次】 【ホーム】