最近のほとんどのMatroskaビデオファイル(.mkv)では、ヘッダー圧縮が有効になっています。これによりハードウェアプレーヤーとの互換性が失われるため、ヘッダー圧縮を使用せずにmkvtoolnixを使用してファイルを再アセンブルすることにより、ずっと前にバッチを「修正」しました。しかし、奇妙なことに、ソースが正しい場合でも、バッチが一部の.mkvで機能しません。しゃっくりにはパターンがありません...
そのため、私は今日、小さなPython 3.2スクリプトを書き始めました。その唯一の目的は、CWD内の.mkvファイルを反復処理し、それらをパラメーターとして使用して、パラメーターを使用してmkvtoolnix-.exeを呼び出すことです。準備したコマンドでos.popen()とos.system()の両方を使用してみましたが、system()はコマンドを誤って解釈しているように見えますが、エスケープしても、popenは少なくとも少し。
そして、それがここでの私の問題です。ここでスクリプトを実行すると、フォルダー内のすべての.mkvファイルに対して.mkv_fix-fileが作成されます。これは問題ありませんが、サイズは元のファイルのごく一部であり、再生できません。私には、popenが.exeを正常に呼び出しているように見えますが、その後ほぼ瞬時に終了し、未完成のファイルのみが残ります。
ここからmkvtoolnixWindows実行可能ファイルを7zipアーカイブとして取得し、スクリプトのCWDのサブディレクトリに配置しました。
また、実行可能ファイルは、バッチから呼び出されたときにコンソール出力を生成することにも注意する必要があります。これは、.py-scriptの場合とは異なります。
コードの重要な部分:
for file in glob.iglob('*.mkv'):
if file.count('_fix') == 0:
print(file)
convertCMD = '"{0}\mkvtoolnix\mkvmerge.exe" -o "{1}_fix" --engage keep_bitstream_ar_info -A -S --compression -1:none "{1}" -D -S --compression -1:none "{1}" -A -D "{1}"'.format(os.getcwd(),file)
os.popen(convertCMD)
print('Converted '+file)
どんな種類の助けもありがたいです。
追加情報:
通常のmkvtoolnix出力:
mkvmerge v5.5.0 ('Healer') built on Apr 6 2012 21:43:24
'F:\$PRECONVERT\MKVFILENAME': Using the demultiplexer for the format 'Matroska'.
'F:\$PRECONVERT\MKVFILENAME': Using the demultiplexer for the format 'Matroska'.
'F:\$PRECONVERT\MKVFILENAME': Using the demultiplexer for the format 'Matroska'.
'F:\$PRECONVERT\MKVFILENAME' track 0: Using the output module for the format 'MPEG-4'.
'F:\$PRECONVERT\MKVFILENAME' track 1: Using the output module for the format 'Vorbis'.
'F:\$PRECONVERT\MKVFILENAME' track 2: Using the output module for the format 'Vorbis'.
'F:\$PRECONVERT\MKVFILENAME' track 3: Using the output module for the format 'text subtitles'.
'F:\$PRECONVERT\MKVFILENAME' track 4: Using the output module for the format 'text subtitles'.
The file 'F:\$PRECONVERT\MKVFILENAME.mkv_fix' has been opened for writing.
Progress: 0%
Progress: 16%
Progress: 39%
Progress: 56%
Progress: 78%
Progress: 96%
Progress: 100%
The cue entries (the index) are being written...
Muxing took 3 seconds.