nico-lab / beer-media-server2

Automatically exported from code.google.com/p/beer-media-server2
0 stars 0 forks source link

ファイル名にANSI以外の文字が入っているとトランスコードでエラーになる #25

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
What steps will reproduce the problem?
1.
2.
3.

What is the expected output? What do you see instead?
仕様なのかもしれませんが、ファイル名にANSI以外の文字が�
��っているとトランスコードでFile not 
found等のエラーになってしまいます
プロセス作成時にTProcessUTF8でCommandLineがUTF8からUnicode(UTF16?)��
�変換されないようなのでその辺が原因なのかもしれません
UTF8からUnicodeに変換してからCreateProcessWを自前で呼べば何と�
��なるかもしれないですが大変そうですね・・・

$_in_$の置換でコメントのExtractShortPathNameUTF8(fname)を有効にす�
��と、一応エラーが発生せずに動作しました
ただし、8.3形式の仕様をあまり知らないので、文字列にUnico
de文字が絶対入らないのかはわかりません

What version of the product are you using? On what operating system?
Version 2.0.130212

Please provide any additional information below.

Original issue reported on code.google.com by voc...@gmail.com on 23 Feb 2013 at 1:52

GoogleCodeExporter commented 8 years ago
ありましたね、そういう問題が。すっかり忘れていました��
�
外人はAnsiとUTF8がよく分かってないところがありUTF8ToSys()使�
��とけば十分だろ見たいなところがあるんですよね・・・
TProcessUTF8.Execute() 
をオーバーライドするだけでできる気もするんですが・・��
�
Lazarus 
projectにパッチを投げると大変喜ばれる代物といえますすね�
��

Original comment by malcome...@gmail.com on 23 Feb 2013 at 10:59

GoogleCodeExporter commented 8 years ago
あっ、でもCreateProcessW使ってもmencoderやffmpegがユニコ-ド未�
��応だとどうにもなりませんね。ユニコ-ドに対応してるん
ですかね?コマンドラインツールでユニコード対応してる��
�はあまりみたことないですが・・・

Original comment by malcome...@gmail.com on 23 Feb 2013 at 11:27

GoogleCodeExporter commented 8 years ago
今手元にPCがないのでmencoderはわかりませんがffmpegは対応し�
��るみたいです
表示上の文字は化けてしまうんですがちゃんと変換はして��
�れてました

確かにExecute()を元のコード参考にして上書きしちゃえば簡��
�そうですね

Original comment by voc...@gmail.com on 23 Feb 2013 at 1:10

GoogleCodeExporter commented 8 years ago
ffmpeg 
にユニコードでファイル名を渡すやり方のサンプルを教え��
�もらえると助かります。

Original comment by malcome...@gmail.com on 23 Feb 2013 at 8:22

GoogleCodeExporter commented 8 years ago
win7のcmd.exeを開いて、ffmpegの-iにunicodeなファイルパスを指定
するだけです
ffmpeg -i "C:\test\♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯.mkv" -map 
0:v:0 -map 0:a:0 -vcodec libx264 -b:v 5529000 -preset ultrafast -g 24 -nal-hrd 
vbr -x264opts bluray-compat=1:force-cfr:vbv-bufsize=20000:vbv-maxrate=20000 -r 
24000/1001 -acodec aac -profile:a aac_low -strict experimental -cutoff 15000 
-ac 2 -ar 48000 -ab 192k -f mpegts -mpegts_m2ts_mode 1 -y "C:\test\output.m2ts"

mencoderも試してみましたがFile not found: 
'C:\test\??????????♪??♭?♯.mkv'になってしまいますね
"mencoder" -noconfig all 
"C:\test\♠♡♢♣♤♥♦♧♨♩♪♫♬♭♮♯.mkv" -demuxer lavf 
-vid 0 -aid 0 -nofontconfig all -ovc x264 -x264encopts 
bitrate=5529:preset=ultrafast:keyint=24:nal-hrd=vbr:bluray-compat=1:force-cfr:vb
v-bufsize=20000:vbv-maxrate=20000:threads=auto:nointerlaced -ofps 24000/1001 
-af lavcresample=48000 -oac faac -faacopts object=2:br=192:mpeg=4 -channels 2 
-srate 48000 -of lavf -lavfopts format=mpegts -o "C:\test\output.ts"
file://形式でurlencodeして渡してみてもダメでした
ソースコードを見てもparse_custom_urlの中でfileプロトコルは通
常url_unescape_stringを通らないのでurlencodeしても無駄みたいで�
��
mencoderは8.3形式に変換して呼び出すしかないかもしれません
ね

ちなみに、vlcだとluaでurlencodeすればOKです
"file:///"..string.gsub(fname, "([^%w%-%.%_%~])", function (c) return 
string.format("%%%02X", string.byte(c)) end)

Execute()のオーバーライドは、やってみると他のメソッドも��
�構いじらないとダメそうなので諦めました

Original comment by voc...@gmail.com on 24 Feb 2013 at 5:04

GoogleCodeExporter commented 8 years ago
>ffmpeg 
にユニコードでファイル名を渡すやり方のサンプルを教え��
�もらえると助かります。
もしかしたらPascalで書いたサンプルを期待されてたらすみ��
�せん
Pascal上でffmpegの対応を確認したわけではありません
cmd.exeで確認しただけです

Original comment by voc...@gmail.com on 24 Feb 2013 at 5:11

GoogleCodeExporter commented 8 years ago
>Pascal上でffmpegの対応を確認したわけではありません
いえ、期待してた通りのものです。ありがとうございまし��
�。色々検討してみます。

Original comment by malcome...@gmail.com on 24 Feb 2013 at 12:02