2013/01/06

バッチファイルでutf-8

年末に某歌番組を録ったら[多]重音声だった。
僕が作っているスクリプトでは多重音声≒デュアルステレオに対応していない(二重音声=デュアルモノには対応させた)ので、ちょこちょこ改造。

その際、mp4boxに設定するタイトルの「日本語」というのが「日本餅E」とかに化けるという症状に遭遇。
はて?
mp4boxへの入力はutf-8でなければならないため、
E6 97 A5 E6 9C AC E8 AA 9E
というのが
E6 97 A5 E6 9C AC E8 AA 81 45
とかに変化している模様。
なんで???
と原因を追っていくとどうやらbatの中で環境変数に放り込んでいているところで化けていました

perlの出力を
for /F %%F in ('perl なんちゃら.pl') do (
set AUDIO_NAME1=%%F
)
とかで取り込んでいるのですが、ここで化けているみたい。
.plの出力を直接txtに吐き出した場合は化けないため、上記コマンドで化けているとしか・・・。
そもそもbatファイルの中でutf-8を無理やり扱おうというので仕方ない部分もあるのかも。

一方sjisで81 45は"・"を表しているようです。
・・・この辺に何かあるのかも。
もう少し調査要です

その後の調査により、バッチファイル内の文字コードを変えればいいんじゃね?という結論にいたりました。
文字コードの設定(CHCP) - ウィンドウの操作 - コマンドプロンプトの使い方

使い方としては、
1.今までutf-8を吐かせていたperlスクリプトの出力をcp932にしておく
2.cp932のままバッチファイル内の環境変数に格納
3.mp4boxへコマンドを渡す時だけchcp 65001でコードページ変更

chcpでコードページを変更すると環境変数も全部変更されるようです。
をぉ、これで解決!
とか思ったのもつかの間、何故かmp4boxがうまく取り込んでくれない・・・

というわけで、仕方なくコマンドで指定するのをあきらめ、一回ファイルに吐き出して、mp4boxにはそのファイルを指定することにしました。
mp4boxのHELPにもある、「NAME can indicate a UTF-8 file ("file://file name")」ってやつで。

最初から素直にこうすればよかった・・・

0 件のコメント:

コメントを投稿