Python中使用subprocess调用ffmpeg命令无报错但无输出问题咨询
ffmpeg Python调用无输出文件问题成因
核心问题是你对subprocess的命令参数拆分规则理解错误,导致ffmpeg收到非法参数后异常退出,未生成输出文件:
- ffmpeg的
-vf(视频滤镜)参数后面必须跟完整的滤镜表达式字符串,多个滤镜用逗号分隔,属于同一个命令参数。原始命令中scale=1280:-2,setsar=1:1是完整的一个参数块,不能拆分为scale=、1280:-2、setsar=、1:1四个独立参数。 - 错误拆分参数后,ffmpeg无法识别错乱的滤镜语法,会直接报错退出,但因为你没有捕获ffmpeg的标准错误输出,所以看不到报错信息,误以为程序运行无异常。
正确代码示例
import subprocess # 完整滤镜字符串作为单个参数传给-vf即可 subprocess.call([ 'ffmpeg.exe', '-y', '-i', pname1, '-vf', 'scale=1280:-2,setsar=1:1', '-c:v', 'libx264', '-c:a', 'copy', pname2 ])
调试小技巧
如果后续调用ffmpeg出现异常,可以捕获输出查看具体报错:
import subprocess res = subprocess.run( [ 'ffmpeg.exe', '-y', '-i', pname1, '-vf', 'scale=1280:-2,setsar=1:1', '-c:v', 'libx264', '-c:a', 'copy', pname2 ], capture_output=True, text=True ) # 打印ffmpeg错误日志定位问题 print(res.stderr)
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

