繁体   English   中英

使用子进程将ffmpeg中的stderr和stdout重定向到Python中的文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM