gpt4 book ai didi

python - 使用 Python 的子进程模块和 ffmpeg 运行 2-pass 视频转换

转载 作者:太空宇宙 更新时间:2023-11-04 08:17:15 25 4
gpt4 key购买 nike

我正在尝试转换一堆视频以在我的 iPad 上播放。我正在使用 subprocess 模块,据我所知,它会在与我的脚本不同的进程中启动一个二进制文件。我不确定如何处理要求第一个进程在第二个进程开始之前终止的 2-pass 编码。

这是我的代码:

def convert(filename):
extension = filename[-3:]

destination_filename_720 = filename[-4:] + '-a720p' + '.mp4'
destination_filename_1080 = filename[-4:] + '-a1080p' + '.mp4'

p = subprocess.Popen(['ffmpeg','-i', str(filename) ,
'-acodec' , 'aac' ,
'-ab' , '160k' ,
'-ac' , '2' ,
'-vcodec' , 'libx264' ,
'-strict' , '-2' ,
'-vpre' , 'ipod640' ,
'-threads' , '8' ,
'-s' , '1280x720' ,
'-b:v' , '2000k' ,
'-pass' , '1' ,
'-y' ,
destination_filename_720])

p = subprocess.Popen(['ffmpeg','-i', str(filename) ,
'-acodec' , 'aac' ,
'-ab' , '160k' ,
'-ac' , '2' ,
'-vcodec' , 'libx264' ,
'-strict' , '-2' ,
'-vpre' , 'ipod640' ,
'-threads' , '8' ,
'-s' , '1280x720' ,
'-b:v' , '2000k' ,
'-pass' , '2' ,
'-y' ,
destination_filename_720])

一旦调用 convert() 函数,两个进程都会立即生成。

第二个进程失败,因为第一个进程尚未完成。

我该如何解决这个问题?或者,有更好的方法吗?

最佳答案

只需将 p.wait() 添加到您的 supprocess 中,它不会继续,直到它完成您的第一遍。

p = subprocess.Popen(['ffmpeg','-i' ...etc])
p.wait()

出于可读性目的,编写命令可能更容易,就像您在终端中所做的那样,然后只需使用 split() 将其放入字符串数组即可。示例:

p = subprocess.Popen(
'ffmpeg -i blah.mov -s 128x72 blah.jpg'.split())
p.wait()

关于python - 使用 Python 的子进程模块和 ffmpeg 运行 2-pass 视频转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12220446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com