我想使用子进程从python中通过ffmpeg裁剪和重新编码视频。
我使用纯字符串命令和shell = True管理启动子进程,但我想构建更复杂的命令,并且更喜欢使用shell = False并传递参数列表。
这样的形式是什么(这是一个简化的例子,最终版本中会有多个流):
import subprocess as sp
sp.Popen('ffmpeg.exe -i Test.avi -filter_complex "[0:v]crop=1024:1024:0:0[out1]" -map [out1] out1.mp4', shell=True)
此脚本生成预期的裁剪输出视频。
对于参数列表,我试过:
FFMPEG_PATH = 'ffmpeg.exe'
aviP='Test.avi'
sp.Popen([FFMPEG_PATH,
'-i', aviP,
'-filter_complex', '[0:v]crop=1024:1024:0:0[out1]',
'-map', '[out1] out1.mp4'])
当我执行第二个版本时,根本没有任何反应。 (没有错误,没有输出)
我怀疑我在使用map命令语法搞乱了什么?
答案 0 :(得分:0)
我想我明白了:
FFMPEG_PATH = 'ffmpeg.exe'
aviP='Test.avi'
sp.Popen([FFMPEG_PATH,
'-i', aviP,
'-filter_complex', '[0:v]crop=1024:1024:0:0[out1]',
'-map', '[out1]', 'out1.mp4'])
是正确的语法