Python subprocesses (ffmpeg) only start once I Ctrl-C the program?
我尝试使用cygwin和python 2.7并行运行几个ffmpeg命令。
这大概就是我所拥有的:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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通过不再写入管道来处理错误,因此被取消阻塞并开始工作。
因此,如果您不在乎,它会在父进程中使用
除了@mata所说的之外,ffmpeg可能还会询问您是否要覆盖output.avi并等待您键入"y"。要强制覆盖,请使用"-y"命令行选项(