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