簡體   English   中英

Python子進程(ffmpeg)只在我按Ctrl-C程序啟動一次?

[英]Python subprocesses (ffmpeg) only start once I Ctrl-C the program?

我正在嘗試使用Cygwin和Python 2.7並行運行一些ffmpeg命令。

這大致是我所擁有的:

import subprocess
processes = set()

commands = ["ffmpeg -i input.mp4 output.avi", "ffmpeg -i input2.mp4 output2.avi"] 

for cmd in commands:
  processes.add(
    subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
  )

for process in processes:
  if process.poll() is None:
    process.wait()

現在,一旦我在這段代碼的末尾,整個程序就會等待。 創建了所有ffmpeg進程,但它們處於空閑狀態,即使用0%CPU。 而Python程序一直在等待。 只有當我按下Ctrl-C時,它才會突然開始編碼。

我究竟做錯了什么? 我是否必須向流程“發送”一些內容才能啟動它們?

這只是猜測,但ffmpeg通常會在stderr或stdout上產生大量狀態消息和輸出。 您正在使用subprocess.PIPE將stdout和stderr重定向到管道,但是您從未讀取過這些內容,因此如果管道緩沖區已滿,則ffmpeg進程將在嘗試向其寫入數據時阻塞。

當你殺死父進程時,管道在它的末端被關閉,並且可能(我還沒有檢查)ffmpeg通過不再寫入管道來處理錯誤,因此解除阻塞並開始工作。

因此os.devnull在您的父進程中使用process.stdoutprocess.stderr管道,或者如果您不關心它os.devnull輸出重定向到os.devnull

除了@mata所說的,ffmpeg也可能會問你是否要覆蓋output.avi並等待你輸入“y”。 要強制覆蓋,請使用“-y”命令行選項( ffmpeg -i $input -y $output )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM