将stderr和stdout从ffmpeg重定向到带有子进程的Python文件中
我试图将ffmpeg命令的stderr和stdout重定向到一个文件,并在执行Python脚本时抑制它们。这是我的代码:将stderr和stdout从ffmpeg重定向到带有子进程的Python文件中,python,ffmpeg,subprocess,stdout,stderr,Python,Ffmpeg,Subprocess,Stdout,Stderr,我试图将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(shl
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\u banner-I input.mp4-c:v libx264-b:v 2M-c:a copy enc\u out.mp4&>ffmpeg\u out.txt的事情。因此,目前在ffmpeg_stdout中,我只有(b'',无)
,并且在执行脚本时都会打印stdout和stderr 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)
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)
在这个特殊的情况下,它可能更优越,但为了记录在案,它一点也不难
with open("ffmpeg_out.txt", 'w') as log:
ffmpeg_cmd = subprocess.run(shlex.split(cmd),
stdout=log, stderr=log)
另外请注意(可能还要添加check=True
)在这种特殊情况下可能更优越,但就记录而言,这一点也不难
with open("ffmpeg_out.txt", 'w') as log:
ffmpeg_cmd = subprocess.run(shlex.split(cmd),
stdout=log, stderr=log)
还要注意(可能还要添加check=True
)谢谢。遗憾的是,我今天的票数没有了,但我会记住你。更切题的是,shlex.split()
没有做任何你自己做不到的事情。只需将空格替换为“”、“
”,并将命令列为一个列表。@tripleee实际上我要执行的命令要长得多,因此这为我节省了一些时间,而且在过去,我一直无法放置,
,因此脚本崩溃,我需要查看我没有放置的地方…谢谢。遗憾的是,我今天的票数没有了,但我会记住你。更切题的是,shlex.split()
没有做任何你自己做不到的事情。只需将空格替换为“”、“
”,并将该命令列为一个列表。@tripleee实际上我要执行的命令要长得多,因此这为我节省了一些时间,而且在过去,我一直无法放置,
所以脚本崩溃了,我需要看看我没有放一个脚本的地方…这不会重定向stdout。ffmpeg写入stdout的是什么?一些分析过滤器可以像元数据或libvmaf一样写入stdout。@Gyan如何将ffmpeg
命令的输出直接重定向到文件?在python中,不知道。这不会重定向stdout。ffmpeg会写入stdout什么?一些分析过滤器可以像元数据或libvmaf一样写入stdout。@Gyan我如何将ffmpeg
命令的输出直接重定向到文件?在python中,我不知道。