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

如何在ffmpeg-python的filter_()中使用输入参数实现视频裁剪?

解决ffmpeg-python中使用crop滤镜裁剪为输入尺寸一半的问题

嘿,我之前在使用ffmpeg-python处理crop滤镜时也遇到过同样的困惑,其实核心问题在于要让ffmpeg而不是Python去解析in_w和in_h这些内置变量,下面是两种正确的实现方式:

方式一:直接传递完整的crop表达式字符串

你可以把FFmpeg命令里的crop参数直接作为字符串传给filter_()方法,这样ffmpeg会自动处理其中的in_w和in_h变量:

import ffmpeg

# 读取输入视频
input_stream = ffmpeg.input("your_input_video.mp4")
# 应用crop滤镜,尺寸为输入的一半
cropped_stream = input_stream.filter_("crop", "1/2*in_w:1/2*in_h")
# 输出处理后的视频
cropped_stream.output("your_output_video.mp4").run()

方式二:使用命名参数传递(更清晰)

如果你习惯用命名参数的写法,需要注意把每个参数的表达式用字符串包裹,避免Python试图解析不存在的变量(比如in_w不是Python变量,直接写会报错):

import ffmpeg

input_stream = ffmpeg.input("your_input_video.mp4")
# 通过命名参数w和h指定裁剪尺寸,表达式用字符串传递
cropped_stream = input_stream.filter_("crop", w="1/2*in_w", h="1/2*in_h")
cropped_stream.output("your_output_video.mp4").run()

额外扩展:自定义裁剪位置

如果需要调整裁剪的起始位置(默认是居中裁剪),同样可以用表达式指定x和y参数,比如保持居中的写法:

cropped_stream = input_stream.filter_(
    "crop",
    w="1/2*in_w",
    h="1/2*in_h",
    x="(in_w - w)/2",
    y="(in_h - h)/2"
)

为什么之前的尝试会失败?
因为如果直接写w=1/2*in_w,Python会尝试计算这个表达式,但in_w不是Python环境中的变量,所以会抛出NameError。必须把表达式作为字符串传递,让ffmpeg在处理时解析这些内置的输入尺寸变量。

内容的提问来源于stack exchange,提问作者Linkyu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:22:23