簡體   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