ens*_*are 1 python subprocess ffmpeg
我正在尝试将一堆视频转换为在我的iPad上播放.我正在使用子进程模块,根据我的理解,在我的脚本的单独进程中启动二进制文件.我不知道如何处理2遍编码,这要求第一个进程在第二个进程开始之前终止.
这是我的代码:
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])
Run Code Online (Sandbox Code Playgroud)
一旦调用convert()函数,就会立即生成两个进程.
第二个过程失败,因为第一个过程尚未完成.
我怎样才能解决这个问题?或者,还有更好的方法?
只需将p.wait()添加到您的supprocess中,它将不会继续,直到它完成第一次传递.
p = subprocess.Popen(['ffmpeg','-i' ...etc])
p.wait()
Run Code Online (Sandbox Code Playgroud)
出于可读性目的,可以像在终端中一样编写命令,然后使用split()将其带入字符串数组中.例:
p = subprocess.Popen(
'ffmpeg -i blah.mov -s 128x72 blah.jpg'.split())
p.wait()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |