Python调用FFmpeg按1.8倍缩放视频无效果,如何排查问题
问题定位
- scale滤镜表达式存在语法错误:你代码中写的
.{}/{}*iw格式化参数后会生成.1.8/1.8*iw,开头多了一个无效小数点,ffmpeg无法解析该非法表达式,直接跳过缩放滤镜,导致输出视频无变化。 - 高度未配置缩放规则:scale参数的高度部分你只写了固定的
ih(输入视频原始高度),即使宽度表达式修复,高度也不会按照1.8倍缩放。 - 未加输出覆盖参数:subprocess调用ffmpeg时没有添加
-y参数,如果输出路径已存在同名文件,ffmpeg会等待用户输入确认覆盖,程序实际未生成新的输出文件,你看到的是历史旧文件。 - 冗余内容:你导入了
ffmpeg库但全程使用subprocess调用ffmpeg命令,该导入无意义可以删除;函数命名为crop(裁剪)但实际执行的是缩放逻辑,容易造成混淆。
修复后代码
import subprocess def scale_video(input_file, output_file, scale_x, scale_y): # scale滤镜中iw为输入宽度,ih为输入高度,分别乘以缩放系数即可 subprocess.call([ 'ffmpeg', '-y', # 自动覆盖已存在的输出文件 '-i', input_file, '-filter:v', f'scale=iw*{scale_x}:ih*{scale_y}', output_file ]) scale_video('/Users/Aaron/Desktop/reil1.mp4', '/Users/Aaron/Desktop/reil2.mp4', 1.8, 1.8)
额外调试建议
如果运行后还是有问题,可以把subprocess.call换成以下写法,打印ffmpeg的运行日志,就能直接看到具体报错原因:
result = subprocess.run( ['ffmpeg', '-y', '-i', input_file, '-filter:v', f'scale=iw*{scale_x}:ih*{scale_y}', output_file], capture_output=True, text=True ) print("标准输出:", result.stdout) print("错误输出:", result.stderr)
内容的提问来源于stack exchange,提问作者bodyanyash
相关产品推荐
相关产品推荐

