使用Python的subprocess模块和ffmpeg运行2pass视频转换

2024-09-23 20:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试转换一堆视频在我的iPad上播放。我使用的是subprocess模块,据我所知,它在脚本的另一个进程中启动了一个二进制文件。我不知道如何处理两遍编码,这要求第一个进程在第二个开始之前终止。在

这是我的代码:

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()函数,就会立即生成两个进程。在

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

我该怎么解决这个问题?或者,有更好的方法吗?在


Tags: convertab进程filenamedestinationffmpegacmp4
3条回答

只需将p.wait()添加到您的supprocess中,它将在第一次传递完成之前继续。在

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

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

^{pr2}$

(找不到“comment”链接,因此“answer”:)

最后一行应该是1080,不是720?在

最好使用pexpect,因为ffmpeg通常不会刷新输出

相关问题 更多 >