You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:39:05