所以即时通讯使用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]系统找不到指定的文件
如果只需要在等待时运行该进程,则不要使用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
不可用(但也没有用)。