FFmpeg压缩:CRF vs CBR vs VBR怎么选?

结论先行:FFmpeg视频压缩有三种码率控制模式——CRF(恒定画质)适合归档和本地存储,CBR(恒定码率)适合直播推流,VBR(可变码率)适合流媒体点播。同一个1080p视频,CRF 23输出42MB画质最优,CBR 4Mbps输出38MB码率最稳定,VBR输出36MB体积最小但画质波动。选错模式不是体积浪费就是画质下降,下面从原理、命令、实测三个层面详解怎么选。

如果你对视频压缩的整体方法还不太熟悉,建议先阅读视频压缩指南

一、三种码率模式原理对比

视频编码的码率控制模式决定了编码器如何分配比特资源。不同模式的核心差异在于"优先保证什么"——CRF优先保证画质、CBR优先保证码率稳定、VBR在两者间折中。理解这三种模式的原理,是做好视频压缩的基础。

对比维度CRF (Constant Rate Factor)CBR (Constant Bitrate)VBR (Variable Bitrate)
中文全称恒定速率因子恒定码率可变码率
核心目标画质恒定码率恒定体积可控
码率分配按画面复杂度动态分配每帧固定码率在上下限间波动
画质一致性★★★★★★★☆☆☆★★★☆☆
体积可控性★★☆☆☆★★★★★★★★★☆
编码速度中等最快较慢
适用场景归档/本地存储直播推流流媒体点播

简单来说:CRF让编码器"根据画面难易程度分配码率"——动作大片多给码率、静态对话少给码率,最终每帧画质一致;CBR则"不管画面复杂与否都给一样多的码率"——简单场景浪费码率、复杂场景码率不够导致马赛克;VBR介于两者之间,设定码率范围让编码器自行调节。

二、FFmpeg命令示例与参数

三种模式在FFmpeg中的命令写法不同,关键参数也不同。下面给出每种模式的标准命令模板和参数说明。

模式关键参数参数说明典型值范围
CRF-crf画质因子,值越小画质越高0-51(18-28常用)
CRF约束-maxrate / -bufsize限制峰值码率maxrate 2-8Mbps
CBR-b:v / -minrate / -maxrate三者设为相同值实现CBR2-8Mbps
VBR-b:v目标平均码率2-6Mbps
VBR范围-minrate / -maxrate码率波动范围min 1-2Mbps / max 4-8Mbps
通用-preset编码速度与压缩率平衡ultrafast-fast-medium-slow

1. CRF模式命令

CRF是最推荐的归档压缩模式。编码器根据画面复杂度自动分配码率,保证每帧画质一致。CRF 23是H.264的默认值,适合大多数场景。

纯CRF模式(不限码率上限):
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

约束CRF模式(限制峰值码率,适合需要码率上限的场景):
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -maxrate 4M -bufsize 8M -preset medium output.mp4

2. CBR模式命令

CBR通过将minrate、maxrate和b:v设为相同值来实现恒定码率。直播推流必须用CBR保证码率稳定。

标准CBR模式:
ffmpeg -i input.mp4 -c:v libx264 -b:v 4M -minrate 4M -maxrate 4M -bufsize 8M -preset fast output.mp4

直播推流模式(配合RTMP):
ffmpeg -i input.mp4 -c:v libx264 -b:v 4000k -minrate 4000k -maxrate 4000k -bufsize 8000k -g 60 -preset fast -f flv rtmp://server/live/stream

3. VBR模式命令

VBR设定目标平均码率,编码器在范围内自由调节。适合流媒体点播等需要体积预估的场景。

标准VBR模式:
ffmpeg -i input.mp4 -c:v libx264 -b:v 4M -preset medium -c:a aac -b:a 128k output.mp4

两遍编码VBR(Two-pass,更精确控制体积):
ffmpeg -y -i input.mp4 -c:v libx264 -b:v 4M -pass 1 -an -f mp4 /dev/null
ffmpeg -i input.mp4 -c:v libx264 -b:v 4M -pass 2 -c:a aac -b:a 128k output.mp4

三、实测数据:同视频三种模式对比

我们用同一段1080p/30fps测试视频(原始体积350MB,H.264编码,时长5分钟),分别用三种模式压缩,对比体积、画质和编码耗时。

模式参数输出体积压缩率画质评分编码耗时
CRF 18-crf 18 -preset medium85.2MB75.7%★★★★★142秒
CRF 23-crf 23 -preset medium42.1MB88.0%★★★★☆128秒
CRF 28-crf 28 -preset medium22.5MB93.6%★★★☆☆115秒
CBR 4M-b:v 4M -minrate 4M -maxrate 4M38.3MB89.1%★★★☆☆98秒
CBR 2M-b:v 2M -minrate 2M -maxrate 2M19.4MB94.5%★★☆☆☆92秒
VBR 4M-b:v 4M -preset medium36.8MB89.5%★★★★☆135秒
VBR 4M 两遍-b:v 4M -pass 236.2MB89.7%★★★★☆268秒

实测数据揭示了几个关键结论:CRF 23在画质和体积间达到最佳平衡(42MB,画质四星半);CBR 4M体积接近CRF 23但画质略差(复杂场景出现马赛克);VBR两遍编码体积最精确但耗时翻倍。对于归档场景,CRF 23是最优选择。

再看不同preset对CRF 23的影响:

preset输出体积编码耗时体积差异推荐场景
ultrafast58.2MB32秒+38%实时预览
fast45.6MB68秒+8%快速压缩
medium42.1MB128秒基准通用默认
slow39.8MB285秒-5%高质量归档
slower38.5MB612秒-9%极致压缩

不同分辨率下的推荐码率参考,帮助选择合适的CBR/VBR目标码率:

分辨率帧率CBR推荐码率VBR目标码率CRF推荐值适用场景
480p30fps1.0Mbps1.0MbpsCRF 24移动端低清
720p30fps2.5Mbps2.5MbpsCRF 23网页标准清晰度
1080p30fps4.0Mbps4.0MbpsCRF 23高清通用
1080p60fps6.0Mbps6.0MbpsCRF 22高清高帧率
1440p30fps8.0Mbps8.0MbpsCRF 222K画质
2160p(4K)30fps16.0Mbps16.0MbpsCRF 20超高清归档

四、场景推荐:不同用途选不同模式

不同使用场景对画质、体积、码率稳定性的要求不同,选择码率模式的核心是匹配场景需求。

使用场景推荐模式推荐参数选择理由预期压缩率
本地归档存储CRF-crf 23 -preset medium画质优先,体积最优85%–90%
高质量归档CRF-crf 18 -preset slow接近无损,长期保存70%–80%
直播推流CBR-b:v 4M -minrate 4M -maxrate 4M码率稳定,防卡顿因源而定
流媒体点播VBR两遍-b:v 4M -pass 2体积精确,画质均衡80%–90%
移动端播放约束CRF-crf 26 -maxrate 2M -bufsize 4M限制码率适配移动网络90%–95%
网页视频约束CRF-crf 24 -maxrate 3M -bufsize 6M平衡画质和加载速度88%–92%
监控录像CBR-b:v 1M -minrate 1M -maxrate 1M恒定码率便于存储计算因源而定
视频邮件CRF-crf 28 -preset fast体积优先,画质可接受93%–96%

智压通 SmartSlim 在视频压缩时基于自研 Rust 压缩引擎,内置场景化参数库——4级压缩 x 15场景 x 5档性能 = 300组合,自动根据视频用途选择最佳码率模式和参数,无需手动调FFmpeg命令。企业用户还可通过SDK集成到业务系统中,实现视频压缩自动化。

更多视频编码对比,可以参考H.264 vs H.265 vs AV1编码对比视频压缩画质评估方法

五、常见问题FAQ

Q1:FFmpeg视频压缩用CRF还是VBR好?

归档和本地存储用CRF更好。CRF以恒定画质为目标,复杂场景多分配码率、简单场景少分配,画质一致且体积最优。推荐CRF值18-28,18接近视觉无损,23是默认平衡点,28画质可接受但体积更小。VBR适合需要控制码率上限的场景如流媒体,但画质不如CRF稳定。

Q2:CRF值多少画质最好?

CRF值越小画质越高,体积越大。H.264编码下:CRF 0为无损,CRF 18接近视觉无损(体积约为原片的50%),CRF 23是FFmpeg默认值(体积约原片的25%),CRF 28画质可接受(体积约原片的12%)。推荐范围18-28,大多数场景用CRF 23即可,追求高质量用CRF 18-20。

Q3:直播推流应该用CBR还是VBR?

直播推流推荐用CBR。直播对码率稳定性要求极高——CBR保持恒定码率,避免网络波动导致卡顿。推流平台通常要求固定码率(如Twitch 6000kbps,B站 4000kbps),CBR能精确匹配。VBR在复杂场景可能码率飙升超出带宽上限导致丢帧,CBR则始终稳定。建议推流用CBR + maxrate = bufsize = 目标码率。

Q4:FFmpeg两种VBR模式有什么区别?

FFmpeg有两档VBR:-crf配合maxrate/bufsize是约束VBR(constrained VBR),画质接近纯CRF但限制码率峰值;-b:v配合-minrate/-maxrate是传统VBR,码率在范围内波动。约束VBR更适合实际使用,既保证画质又控制峰值码率。传统VBR适合需要精确控制码率范围的场景,如适配特定带宽环境。

总结

FFmpeg三种码率模式各有最佳场景:CRF优先画质适合归档(推荐CRF 23),CBR优先稳定适合直播推流(推荐4Mbps恒定),VBR优先体积可控适合流媒体点播(推荐两遍编码)。选对模式是视频压缩的第一步——归档选CRF、直播选CBR、点播选VBR,记住这个原则就不会出错。

如果不想手动写FFmpeg命令,智压通 SmartSlim 提供开箱即用的视频压缩方案,基于自研 Rust 压缩引擎内置300种场景化参数组合,支持 mp4/mkv/avi/mov/wmv/flv/webm/m4v 等 8 种视频格式,本地压缩数据不出域。

需要压缩文件?试试智压通 SmartSlim

基于自研 Rust 压缩引擎,支持 PDF/图片/视频/Office/OFD 等 10 大类 40+ 格式,本地压缩数据不出域。