如何用 FFmpeg 压缩视频
用 CRF、preset、codec 选择和分辨率缩放来压缩视频,画质和体积怎么权衡看这一篇。

用 FFmpeg 压缩视频是不花钱缩文件的最快路子 —— CRF、preset、编码器选择、分辨率缩放,每一个都能精细控制画质和体积的平衡。下面是几种最常用的写法,全是能复制粘贴跑的命令。要更深入的编码原理,再看视频压缩最佳实践。
用 CRF 一行搞定
最快的压缩方式是 CRF(Constant Rate Factor,恒定质量因子)。值越小画质越好,体积越大;值越大画质越差,体积越小。
ffmpeg -i input.mp4 -crf 23 output.mp4
| CRF 值 | 画质 | 用在哪 |
|---|---|---|
| 18 | 接近无损 | 归档 |
| 23 | 不错(默认值) | 一般场景 |
| 28 | 中等 | 网络分享 |
| 32+ | 较差 | 体积优先 |
如果同时要换容器格式(比如 MKV → MP4),看格式转换指南。
选哪个 codec
H.264 — 兼容性最好
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium output.mp4
H.265(HEVC)— 同画质体积小一半
H.265 在相同画质下体积大约能小 50%,代价是编码慢得多。
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
preset:拿编码时间换体积
preset 控制速度和压缩率的取舍。同样的 CRF,preset 越慢,压得越狠。
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slow output.mp4
| Preset | 速度 | 文件体积 |
|---|---|---|
| ultrafast | 最快 | 最大 |
| fast | 快 | 较大 |
| medium | 平衡 | 平衡 |
| slow | 慢 | 较小 |
| veryslow | 最慢 | 最小 |
降分辨率
降分辨率是减体积最直接的办法:
# 缩到 720p
ffmpeg -i input.mp4 -vf "scale=-2:720" -crf 23 output.mp4
# 缩到 480p
ffmpeg -i input.mp4 -vf "scale=-2:480" -crf 23 output.mp4
-2 表示自动按比例算宽,并保证宽是 2 的倍数(很多 codec 要求)。
限制比特率
要做流媒体,或者对最终体积有硬要求,就给个最大码率:
ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -maxrate 1M -bufsize 2M output.mp4
别忘了音频
音频也占体积,把音频码率压下来通常没什么感知损失:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4
一条够用的命令
如果不想纠结,下面这条适用大多数场景:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
输出是画质过关、体积明显变小的 MP4,几乎所有设备和平台都能播。
常见问题(FAQ)
压缩视频 CRF 用多少合适?
CRF 23 是 H.264 的默认值,也是通用 web 视频的安全选。要更高画质(归档或精品流媒体)用 CRF 18–20,要狠压(社交媒体、低带宽场景)用 CRF 26–28。H.265 的话相当于 H.264 + 5(H.265 的 CRF 28 ≈ H.264 的 CRF 23)。
FFmpeg 压视频不掉肉眼可见的画质能压多少?
H.264 配 CRF 18–23 + -preset medium,相机或录屏原文件一般能压到原来的 50%–80%,肉眼基本看不出差别。再切到 H.265 + CRF 28 还能再省 30–40%。具体比例看源 —— 已经被网压过的视频就没多少水分了。
H.264 和 H.265 选哪个?
同画质下 H.265 比 H.264 文件小 30%–40%,但编码时间慢 3–5 倍,播放支持也窄一些(Safari、现代手机有,部分浏览器和老设备没)。要兼容性拉满用 H.264,带宽和存储更值钱用 H.265。
想压到指定大小(比如 25MB 内)怎么办?
用两遍码率编码(two-pass)。目标视频码率 = (目标体积比特数 - 音频体积) / 时长秒数。然后跑两遍:第一遍分析复杂度,第二遍按分析结果分配码率。比如 10 分钟视频压到 100MB + 128k 音频,目标视频码率约 1.2 Mbps。
我压完反而变大了?
通常 3 种情况之一:(1) 源已经被压过,你又用了低 CRF(18–20)变相提画质了;(2) 用 H.265 这种慢编码器配了 fast preset,效率没出来;(3) 不小心放大了分辨率。先 ffprobe input.mp4 看源参数,CRF 不要试图"超过"源画质。
FFmpeg 最快的压缩方式?
-c:v libx264 -preset ultrafast -crf 28。比 -preset medium 快约 5 倍但同画质下文件大 2–3 倍。适合做 proxy、草稿、一次性转换。正式交付还是回 medium 或 slow。
延伸阅读
- FFmpeg 视频压缩最佳实践 — 更进一步的画质 / 体积权衡策略
- 如何用 FFmpeg 转换视频格式 — MP4、WebM、MKV、MOV 互转
- 如何用 FFmpeg 剪辑与合并视频 — 简单命令做剪辑和拼接