[英]Redirect stderr and stdout from ffmpeg to a file in Python with subprocess
我试图将ffmpeg命令的stderr和stdout都重定向到文件,并在执行Python脚本时禁止它们。 这是我的代码:
import subprocess, shlex
cmd = 'ffmpeg -hide_banner -i input.mp4 -c:v libx264 -b:v 2M -c:a copy enc_out.mp4'
with open("ffmpeg_out.txt", 'w') as log:
ffmpeg_cmd = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE)
ffmpeg_stdout = ffmpeg_cmd.communicate()
for i in range(len(ffmpeg_stdout) - 1):
log.write(str(ffmpeg_stdout[i]) + "\n")
所以总的来说,我想做类似于ffmpeg -hide_banner -i input.mp4 -c:v libx264 -b:v 2M -c:a copy enc_out.mp4 &> ffmpeg_out.txt
。 所以目前在ffmpeg_stdout中我只有(b'', None)
,并且在执行脚本时会同时打印stdout和stderr。
在这种特殊情况下, oguzismail的答案可能会更好,但是仅作记录,一点也不难。
with open("ffmpeg_out.txt", 'w') as log:
ffmpeg_cmd = subprocess.run(shlex.split(cmd),
stdout=log, stderr=log)
还要注意subprocess.run()
对于原始Popen
的首选项。 (可能还添加check=True
。)
ffmpeg
可以自行将stderr重定向到文件,并且由于在大多数情况下它不打印stdout所需的任何内容,因此这将是一个有用的解决方法
my_env = os.environ.copy()
my_env["FFREPORT"] = "file=ffmpeg_out.txt:level=32"
subprocess.Popen(shlex.split(cmd), env=my_env)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.