3

Pythonからffmpegを実行して、妥当な出力を取得しようとしています。ffmpegのログレベルがどのように設定されているかは関係ありません。Popen.communicate()から取得する出力はエラー1のみです。ただし、内容はエラーではありません。同じコードを実行して他のコマンド(ls)を実行しようとしましたが、out出力とerr出力の両方で問題ないようです。

こことGoogleをチェックしましたが、残念ながら何も見つかりませんでした。ほとんどの例では、サブプロセスではなく、OSまたはコマンドモジュールを使用しています。

これは私のテストコードです:

command = [
        'ffmpeg',
        '-v', 'debug',
        '-i', '1.mov',
        '-vcodec', 'libx264',
        '-profile:v', 'high',
        '-preset', 'slower',
        '-b:v', '1000k',
        '-vf', 'scale=-1:720',
        '-threads', '0', 
        '-acodec', 'libfdk_aac',
        '-b:a', '192k',
        '-y',   
        '2.mp4',
        ]
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err =  p.communicate()
f = open('out.log', 'w')
f.write(out)
f.close()
f = open('error.log', 'w')
f.write(err)
f.close()

このようなものを見たことがありますか?私は何か間違いをしていますか、それともffmpegにバグがありますか?

4

2 に答える 2

3

ffmpeg の場合、stdout と stderr を誤解していたようです。通常、すべての「コンソール出力」は stderr に送られます。stderr を stdout にリダイレクトすると、問題が解決します。こうやって:

p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

すみません… Pythonの部分に集中しすぎて、当たり前のことを完全に見落としていました。:-)

于 2013-02-16T15:35:55.537 に答える
0

デフォルトffmpegでは、stderrにログが記録されます。つまり、期待される動作が表示されます。

コマンドのstderr出力をファイルに保存するために、次のものは必要ありません.communicate()

import subprocess 

with open("stderr.log", "wb") as logfile:
    subprocess.check_call(command, stderr=logfile)
于 2013-02-16T15:51:52.250 に答える