4.2 视频滤镜:画面在管线里如何变换


4.2 视频滤镜:画面在管线里如何变换

本节摘要:缩放、裁剪、水印、变速是视频滤镜的四类高频操作。本节逐一给出可运行命令并拆解参数,讲清滤镜执行顺序对结果的影响,以及「改分辨率该用 scale 还是硬转码」这类工程取舍。

学习目标

阅读完本节,你应当能够:

  1. 写出 scale、crop、overlay、setpts/atempo、boxblur 的命令并解释参数
  2. 判断多个滤镜的先后顺序对最终画面的影响
  3. 在「加滤镜」与「改编码」之间做出正确的取舍

一、数字事实开场

视频滤镜数以百计,但真实项目里 90% 的调用集中在十来个子集。本节挑四类最常上阵的:几何变换(scale/crop)、叠加合成(overlay)、时间重排(setpts/atempo)、画质处理(boxblur 等)。掌握这四类,日常短视频加工基本够用。

二、四大类核心滤镜

1. 缩放 scale:分辨率的一切问题

# 等比缩放到宽度 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

工程取舍:除非明确要做「拉伸效果」,否则永远用等比缩放。变形是观众最先察觉的瑕疵。

2. 裁剪 crop:只留画面的一部分

# 从 (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

3. 叠加合成 overlay:水印与画中画

# 在右下角叠加 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

4. 变速:视频与音频要分开处理

变速最容易踩坑,因为视频和音频的滤镜不同:

# 视频加速 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

画质辅助:boxblur 等

# 模糊画面(常见于打码前的预处理) 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

先几何再几何,顺序决定裁剪坐标的坐标系先几何再画质(模糊、锐化),顺序决定模糊作用在哪个分辨率上。原则:能把「一次缩小」做完的别分两步,画质损失最小。

用一张图记住四类滤镜在管线里的位置:

04-02-fig01

图说明:四类各司其职

四类滤镜处理不同维度:几何管空间、叠加管合成、时间管节奏、画质管观感。它们可以自由串链,但顺序有讲究——上图的「顺序三原则」是实战总结,直接背下来用。

四、工程取舍:滤镜还是重编码

改分辨率有两种路:走滤镜 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)——再选滤镜,比翻滤镜列表高效得多。

要点回顾

  • 四类主力:几何(scale/crop)、合成(overlay)、时间(setpts/atempo)、画质(boxblur)
  • 等比缩放:scale=720:-2 保持比例且保证偶数,强制尺寸会变形
  • 水印坐标:W/w/H/h 自动展开,overlay 必须用 -filter_complex
  • 变速配套:视频 setpts、音频 atempo 同时上,否则音画脱节
  • 顺序即结果:先裁先缩坐标系不同,几何变换一次做完画质损失最小

下一节看音频滤镜——处理对象从像素变成采样点,混音、音量、延时怎么落地。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U