常用视频滤镜
本教程共 32 篇 · 第 24 篇 · 更新于 2026-08-09 · 约 5 分钟阅读
本节目标:把日常 80% 会用到的视频滤镜学会,包括缩放、裁剪、填充、旋转翻转、调速和帧率调整。语法基础已在上一章讲透,这一章直接用。
一、scale:缩放
scale 是使用频率最高的滤镜,用于改变分辨率。
ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4
保持宽高比
宽或高写 -1 表示按比例自动计算:
ffmpeg -i input.mp4 -vf "scale=1280:-1" output.mp4
但 H.264/H.265 要求宽高是偶数,自动算出来可能是奇数导致报错。所以推荐写 -2,它会自动取最接近的偶数:
ffmpeg -i input.mp4 -vf "scale=-2:720" output.mp4
常用表达式
| 写法 | 含义 |
|---|---|
scale=iw/2:ih/2 | 宽高都缩一半 |
scale=min(1280,iw):-2 | 最大不超过 1280 宽,小于则不放大 |
scale=-2:720:flags=lanczos | 用 lanczos 算法,缩小质量更好 |
flags=lanczos 在降采样时画面更锐利,做 1080p→720p 时建议加上。放大则用 flags=bicubic 即可。
二、crop:裁剪
crop=宽:高:x:y,从 (x,y) 位置裁出一块区域:
ffmpeg -i input.mp4 -vf "crop=1280:720:0:0" output.mp4
不写 x、y 默认居中裁剪。裁掉四周 20 像素:
ffmpeg -i input.mp4 -vf "crop=iw-40:ih-40" output.mp4
iw、ih 是输入宽高的内置变量。
三、pad:填充黑边
pad 给画面加边,常用于把竖屏视频嵌进横屏画布(加黑边):
ffmpeg -i input.mp4 -vf "pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black" output.mp4
参数是 pad=总宽:总高:偏移x:偏移y:颜色。(ow-iw)/2 让原画面水平居中。
scale + pad 组合:等比放进指定尺寸
这是最常用的组合之一——把任意比例的视频等比缩放到 1920×1080 画布内,不足的地方补黑边:
ffmpeg -i input.mp4 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" output.mp4
force_original_aspect_ratio=decrease 让 scale 在不超出目标尺寸的前提下等比缩放,然后 pad 补齐。发朋友圈、B站投稿需要统一分辨率时非常好用。
四、transpose / rotate:旋转与翻转
transpose 是固定角度旋转,最常用:
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
| 值 | 关键字 | 效果 |
|---|---|---|
| 0 | cclock_flip | 逆时针 90° 并垂直翻转(默认) |
| 1 | clock | 顺时针 90° |
| 2 | cclock | 逆时针 90° |
| 3 | clock_flip | 顺时针 90° 并垂直翻转 |
旋转 180° 用两次:transpose=2,transpose=2。
镜像翻转不需要 transpose:
ffmpeg -i input.mp4 -vf "hflip" output.mp4 # 水平镜像
ffmpeg -i input.mp4 -vf "vflip" output.mp4 # 上下翻转
rotate 滤镜支持任意角度,比如旋转 30°:
ffmpeg -i input.mp4 -vf "rotate=PI/6" output.mp4
但任意角度旋转后角落会出现黑边,需要配合 pad 或裁剪。
五、fps:改帧率
ffmpeg -i input.mp4 -vf "fps=30" output.mp4
把视频转为 30fps。高帧率转低帧率会丢帧,低转高不会增加真实细节(只是重复帧)。做 GIF 时常用 fps=15 减小体积。
六、setpts:调整播放速度
setpts 修改时间戳,实现快放/慢放:
ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" output.mp4 # 慢放 2 倍
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" output.mp4 # 快放 2 倍
PTS 是当前帧的时间戳。系数越大画面越慢,越小越快。注意:setpts 不改音频,调速后视频和音频会不同步。要同时调音频要用 -filter_complex 加 atempo:
ffmpeg -i input.mp4 -filter_complex \
"[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" \
-map "[v]" -map "[a]" output.mp4
七、其他实用滤镜速览
| 滤镜 | 作用 | 示例 |
|---|---|---|
eq | 亮度对比度饱和度 | eq=brightness=0.05:saturation=1.2 |
boxblur | 模糊 | boxblur=5:1 |
unsharp | 锐化 | unsharp=5:5:1.0 |
noise | 加噪点 | noise=alls=10:allf=t |
format | 转换像素格式 | format=yuv420p(保证兼容性) |
trim | 按帧截取(配合 setpts) | trim=start=10:end=20,setpts=PTS-STARTPTS |
reverse | 倒放 | reverse(占内存,短视频用) |
Tip缩放后加
format=yuv420p是个好习惯。有些源是 yuv444p 或 yuv422p,H.264 baseline/main profile 和很多播放器只认 yuv420p。命令写成-vf "scale=-2:720,format=yuv420p"可以避免 QuickTime 等播放器只有声音没有画面的问题。
八、串联常用链
滤镜的真正威力在于组合。几个日常能直接用的滤镜链:
缩放到 720p 并保证兼容:
-vf "scale=-2:720,format=yuv420p"
居中裁成正方形(适合 Instagram):
-vf "crop=min(iw\,ih):min(iw\,ih)"
先裁剪再缩放:
-vf "crop=iw:iw*9/16,scale=1080:1920"
(注意:在命令行里,逗号本身是滤镜分隔符,所以 crop 参数里的逗号要转义成 \,,或者整个 filtergraph 用引号包住。)
Note内置变量除了
iw/ih(输入宽高),还有ow/oh(输出宽高)、a(宽高比)、sar/dar(采样/显示宽高比)。写表达式时善用它们,比硬编码数字灵活得多。