Python运行带有子进程的cm d命令(ffmpeg),并在执行某些代码之前等待cmd关闭

问题描述 投票:0回答:1

所以即时通讯使用ffmpeg调整视频大小,这需要一些时间,因此在代码继续之前,我必须等待cmd关闭。我还没有找到解决的办法,我希望真正了解他们的知识的人可以教给我一种方法。即时通讯可能只是在做一些智障的事情...无论如何,我已经尝试了多种方法,例如使用subprocess.Propen(),然后使用pope()来查看何时不返回“ None”,还尝试了subprocess.CompletedProcess()之类的subprocess.run()之类的东西,但我只是无法获得它工作是否可以有人在乎,以说明是否有办法做到这一点,而我只是做错了? :)

这里是我尝试过的例子

p = subprocess.Popen("start ffmpeg -y -i "+DIR+"/post.mp4 -vf scale="+str(nW)+":"+str(nH)+" "+DIR+"/post_r.mp4", shell=True)
    while p.poll() is None:
        time.sleep(1)
        print("alive")
    else:
        print("cmd exited")

而且每当我将shell = False放置时,它都会立即中断,并且出现此错误:FileNotFoundError:[WinError 2]系统找不到指定的文件

python ffmpeg subprocess
1个回答
0
投票

如果只需要在等待时运行该进程,则不要使用subprocess.Popen()。旧版subprocess.call()或现代版subprocess.run()正是为此用例设计的。

使用shell=False,您需要自己将命令行拆分为一个列表。为了方便起见,您可以致电shlex.split(),但自己做起来并不难。

subprocess.run(['ffmpeg', '-y', '-i', DIR+"/post.mp4",
    '-vf', 'scale=' + str(nW) + ":" + str(nH), DIR+"/post_r.mp4"])

start看起来就像在Windows上一样,当然start也是shell的功能;如果没有外壳,则start不可用(但也没有用)。

© www.soinside.com 2019 - 2024. All rights reserved.