本节摘要:缩放、裁剪、水印、变速是视频滤镜的四类高频操作。本节逐一给出可运行命令并拆解参数,讲清滤镜执行顺序对结果的影响,以及「改分辨率该用 scale 还是硬转码」这类工程取舍。
阅读完本节,你应当能够:
视频滤镜数以百计,但真实项目里 90% 的调用集中在十来个子集。本节挑四类最常上阵的:几何变换(scale/crop)、叠加合成(overlay)、时间重排(setpts/atempo)、画质处理(boxblur 等)。掌握这四类,日常短视频加工基本够用。
# 等比缩放到宽度 720,高度自动保持 ffmpeg -i input.mp4 -vf "scale=720:-2" output.mp4
参数拆解:scale=720:-2 中 720 是目标宽,-2 是「按宽高比自动算高」,-2 这个写法保证结果是偶数(H.264 要求尺寸是偶数,奇数会报错)。
# 强制变成 1280x720,会拉伸变形 ffmpeg -i input.mp4 -vf "scale=1280:720:force_original_aspect_ratio=disable" output.mp4
工程取舍:除非明确要做「拉伸效果」,否则永远用等比缩放。变形是观众最先察觉的瑕疵。
# 从 (100, 200) 起,裁出 640x360 区域 ffmpeg -i input.mp4 -vf "crop=640:360:100:200" output.mp4
参数顺序:crop=宽:高:x:y,x/y 是裁剪起点。把竖屏视频裁成横屏内容,是 crop 最典型的应用。
# 竖屏 1080x1920 → 中间裁出 1080x1080 正方形 ffmpeg -i vertical.mp4 -vf "crop=1080:1080:0:390" output.mp4
# 在右下角叠加 logo.png,边距 20 像素 ffmpeg -i input.mp4 -i logo.png -filter_complex \ "overlay=x=W-w-20:y=H-h-20" output.mp4
W/H 是主视频的宽高,w/h 是叠加层(logo)的宽高,W-w-20 即「贴着右边距 20 像素」。注意这里必须用 -filter_complex,因为有两个输入。要加半透明效果,先给 logo 加 format=rgba,colorchannelmixer=aa=0.6。
变速最容易踩坑,因为视频和音频的滤镜不同:
# 视频加速 2 倍:setpts 压缩时间戳间隔 ffmpeg -i input.mp4 -vf "setpts=PTS/2" -af "atempo=2.0" output.mp4
setpts=PTS/2:把每帧时间戳除以 2,帧间隔减半,画面加速 2 倍atempo=2.0:音频加速 2 倍且音调不变(这是 atempo 的核心价值)若只写 -vf "setpts=PTS/2" 而不管音频,视频快两倍、音频还是原速,结果就是音画脱节。反过来,慢放用 setpts=PTS*2 + atempo=0.5。
# 模糊画面(常见于打码前的预处理) ffmpeg -i input.mp4 -vf "boxblur=luma_radius=10:luma_power=2" output.mp4
滤镜链是有顺序的,先裁剪后缩放、先缩放后裁剪,结果天差地别:
# 先裁 1080x1080 再缩到 720x720(内容保留裁剪区域) ffmpeg -i v.mp4 -vf "crop=1080:1080:0:390,scale=720:720" o1.mp4 # 先缩到 720x720 再裁 500x500(裁剪坐标按缩小后的画面算) ffmpeg -i v.mp4 -vf "scale=720:720,crop=500:500:0:0" o2.mp4
先几何再几何,顺序决定裁剪坐标的坐标系;先几何再画质(模糊、锐化),顺序决定模糊作用在哪个分辨率上。原则:能把「一次缩小」做完的别分两步,画质损失最小。
用一张图记住四类滤镜在管线里的位置:

四类滤镜处理不同维度:几何管空间、叠加管合成、时间管节奏、画质管观感。它们可以自由串链,但顺序有讲究——上图的「顺序三原则」是实战总结,直接背下来用。
改分辨率有两种路:走滤镜 scale,或直接改编码参数。区别在于:
| 需求 | 做法 | 说明 |
|---|---|---|
| 只是换输出尺寸 | -vf "scale=..." |
滤镜在编码前完成,最终编码参数可另定 |
| 顺手换编码 | -c:v libx264 -preset ... |
滤镜 + 编码参数各管各的,可组合 |
| 只想试试效果 | ffplay -vf "scale=..." |
不写文件,即时看 |
关键认知:scale 这类滤镜输出的是「指定分辨率的 Frame」,编码器再决定怎么压。 所以「要不要滤镜」和「用什么编码」是两个独立开关,别混为一谈。
⚠️ 常见坑:
scale=720:-2里的 -2 必须加。写scale=720只改宽、高保持原值,会变形;写-1则可能产生奇数高度,H.264 直接报错。偶数尺寸是硬约束。
💡 关键直觉:先想清楚「改动发生在哪个维度」——空间(scale/crop)、合成(overlay)、时间(setpts)、质量(blur)——再选滤镜,比翻滤镜列表高效得多。
下一节看音频滤镜——处理对象从像素变成采样点,混音、音量、延时怎么落地。