视频压缩时应该选择固定码率还是可变码率?CRF质量模式又是什么?本文将系统讲解三种主流码率控制方式的原理、优缺点和最佳应用场景。
快速结论
日常压缩推荐CRF模式(质量优先)、直播推流用CBR(带宽稳定)、专业存档用VBR两遍编码(体积与质量最佳平衡)。
什么是视频码率
码率(Bitrate)是指视频每秒传输的数据量,单位通常是Mbps(兆比特每秒)或Kbps(千比特每秒)。码率直接决定了视频的文件大小和画质。
计算公式很简单:文件大小 = 码率 × 时长
例如,码率5Mbps的10分钟视频,文件大小约为:5 × 60 × 10 ÷ 8 = 375 MB
注意单位转换:1 Byte = 8 bit,所以Mbps要除以8才能得到MB/s。
码率与画质的关系
码率越高,画质通常越好,但这个关系不是线性的。从1Mbps提升到3Mbps,画质提升很明显;但从20Mbps提升到50Mbps,肉眼可能完全看不出差别。
| 分辨率 | 最低可用码率 | 推荐码率 | 高质量码率 |
|---|---|---|---|
| 480P | 0.5 Mbps | 1-2 Mbps | 2-3 Mbps |
| 720P | 1.5 Mbps | 2.5-4 Mbps | 4-6 Mbps |
| 1080P | 3 Mbps | 5-8 Mbps | 8-12 Mbps |
| 4K | 15 Mbps | 25-40 Mbps | 50-80 Mbps |
CBR - 恒定码率模式
CBR(Constant Bitrate)保持整个视频的码率恒定不变。无论画面简单还是复杂,每秒都使用相同的数据量。
工作原理
编码器会严格控制每秒输出的数据量。简单画面时可能会浪费码率(质量过高),复杂画面时码率不够用(质量下降)。
想象你用固定速度的水龙头装水,不管容器大小,流速都一样。小杯子会溢出,大桶又装不满。
优点
- 文件大小可预测 - 精确知道最终文件多大
- 带宽稳定 - 网络传输不会突然激增
- 播放流畅 - 低端设备和网络都能稳定播放
- 直播友好 - 推流不会因码率波动而卡顿
缺点
- 压缩效率低 - 简单画面浪费码率,复杂画面不够用
- 画质不均匀 - 动作场景可能出现马赛克,静止场景又过于清晰
- 文件偏大 - 为了保证复杂场景质量,整体码率必须设高
FFmpeg命令
ffmpeg -i input.mp4 -c:v libx264 -b:v 5M -minrate 5M -maxrate 5M -bufsize 10M -c:a aac -b:a 128k output.mp4
参数说明:
-b:v 5M- 目标视频码率5Mbps-minrate 5M -maxrate 5M- 最小和最大码率都设为5M,强制恒定-bufsize 10M- 缓冲区大小,通常是码率的2倍
适用场景
- 直播推流 - 保证网络稳定性
- 在线视频平台 - 便于带宽管理
- 低端设备播放 - 避免解码压力突然增大
- 蓝光光盘制作 - 严格的容量限制
VBR - 可变码率模式
VBR(Variable Bitrate)根据画面复杂度动态调整码率。简单画面用低码率,复杂画面用高码率,整体平衡质量和体积。
工作原理
编码器会分析每一帧的复杂度,自动分配合适的数据量。静止的风景画面可能只用2Mbps,激烈的打斗场景可能用到15Mbps,但平均下来可能是8Mbps。
VBR的三种模式
1. 单遍VBR(One-Pass VBR)
编码时实时决定码率分配,速度快但效果一般。
ffmpeg -i input.mp4 -c:v libx264 -b:v 5M -c:a copy output.mp4
2. 两遍VBR(Two-Pass VBR)
第一遍分析视频,第二遍根据分析结果优化码率分配。质量最好但编码时间翻倍。
第一遍:
ffmpeg -i input.mp4 -c:v libx264 -b:v 5M -pass 1 -an -f null /dev/null
第二遍:
ffmpeg -i input.mp4 -c:v libx264 -b:v 5M -pass 2 -c:a aac output.mp4
3. 约束VBR(Constrained VBR)
设置平均码率和峰值码率,在范围内动态调整。
ffmpeg -i input.mp4 -c:v libx264 -b:v 5M -maxrate 8M -bufsize 10M -c:a copy output.mp4
优点
- 压缩效率高 - 同等质量下文件更小,或同等大小下质量更好
- 画质均匀 - 整个视频保持一致的视觉质量
- 适应性强 - 自动优化不同类型的画面
缺点
- 文件大小不可预测 - 很难精确控制最终体积
- 网络传输不稳定 - 码率波动可能导致缓冲
- 两遍编码耗时 - 需要扫描两次视频
适用场景
- 本地存储视频 - 不需要担心实时传输
- 视频分享平台 - YouTube、Bilibili等会二次压缩的场景
- 有明确大小限制 - 需要压缩到特定体积(如邮件附件)
CRF - 恒定质量模式
CRF(Constant Rate Factor)是最智能的编码模式,不控制码率而是控制质量。编码器会根据画面复杂度自动选择合适的码率,保持整个视频的主观质量一致。
工作原理
CRF值越小质量越高。编码器会分析每一帧,为了达到目标质量自动调整码率。简单画面用低码率就能达到高质量,复杂画面会增加码率保证质量。
CRF值范围0-51:
- 0 - 数学无损(文件巨大)
- 17-18 - 视觉无损(专业存档)
- 19-23 - 高质量(日常推荐范围)
- 24-28 - 标准质量(网络视频)
- 29+ - 低质量(不推荐)
FFmpeg命令
H.264编码:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a copy output.mp4
H.265编码:
ffmpeg -i input.mp4 -c:v libx265 -crf 26 -preset medium -c:a copy output.mp4
注意:H.265的CRF值通常比H.264高3-4才能达到相同的主观质量。
优点
- 操作简单 - 只需设置一个CRF值
- 质量一致 - 整个视频主观感受统一
- 智能优化 - 自动平衡质量和体积
- 压缩效率高 - 不浪费码率在简单画面上
- 单遍编码 - 比两遍VBR快一倍
缺点
- 文件大小不可预测 - 复杂视频会明显更大
- 不适合直播 - 码率波动对实时传输不友好
适用场景
- 日常视频压缩 - 最通用、最推荐的模式
- 个人影音收藏 - 追求质量而非精确大小
- 社交媒体分享 - 平台会二次压缩,高质量源更好
- 快速压缩 - 不需要两遍扫描
三种模式实测对比
使用相同的1080P 10分钟测试视频(包含静止、动作、字幕等多种场景)进行对比。
测试设置
| 模式 | 参数设置 | 目标 |
|---|---|---|
| CBR | 5 Mbps恒定 | 固定码率 |
| VBR单遍 | 平均5 Mbps | 可变码率 |
| VBR两遍 | 平均5 Mbps,两遍 | 最优分配 |
| CRF | CRF 23 | 恒定质量 |
测试结果
| 模式 | 文件大小 | 实际平均码率 | VMAF评分 | 编码时间 |
|---|---|---|---|---|
| CBR | 375 MB | 5.0 Mbps | 89.3 | 4分15秒 |
| VBR单遍 | 368 MB | 4.9 Mbps | 91.2 | 4分20秒 |
| VBR两遍 | 365 MB | 4.87 Mbps | 92.8 | 8分50秒 |
| CRF 23 | 412 MB | 5.5 Mbps | 93.5 | 4分30秒 |
不同场景表现
分析视频中三个典型场景的码率分配:
| 场景 | CBR | VBR单遍 | VBR两遍 | CRF |
|---|---|---|---|---|
| 静止风景 | 5.0 Mbps | 2.8 Mbps | 2.3 Mbps | 2.5 Mbps |
| 人物对话 | 5.0 Mbps | 4.5 Mbps | 4.2 Mbps | 5.0 Mbps |
| 激烈动作 | 5.0 Mbps | 8.2 Mbps | 9.5 Mbps | 11.3 Mbps |
分析:
- CBR在所有场景都是5Mbps,静止画面浪费,动作场景不足
- VBR两遍给动作场景分配了最多码率,整体质量最均匀
- CRF给动作场景分配了最高码率,保证了该场景的质量
选择建议总结:
- 日常使用 → CRF 20-23(H.264)或 22-26(H.265)
- 直播推流 → CBR,根据网络设置固定码率
- 文件大小限制 → VBR两遍,精确控制体积
- 快速处理 → CRF或VBR单遍
- 最高质量 → VBR两遍或CRF 18-20
进阶:码率计算与预估
如何计算所需码率
如果要把视频压缩到特定大小,可以反向计算所需码率:
公式:码率(Kbps) = 目标大小(MB) × 8192 ÷ 时长(秒) - 音频码率
示例:把30分钟视频压到500MB(音频128Kbps)
视频码率 = 500 × 8192 ÷ 1800 - 128 = 2150 Kbps ≈ 2.1 Mbps
FFmpeg命令:
ffmpeg -i input.mp4 -c:v libx264 -b:v 2100k -pass 1 -an -f null /dev/null
ffmpeg -i input.mp4 -c:v libx264 -b:v 2100k -pass 2 -c:a aac -b:a 128k output.mp4
CRF与文件大小的关系
CRF无法精确预测文件大小,但有规律可循:
- CRF每增加6,文件体积约减半
- CRF每减少6,文件体积约翻倍
示例:
CRF 23生成了1GB文件,估算其他CRF值的大小:
- CRF 17 → 约4GB(-6两次)
- CRF 20 → 约2GB(-3一次)
- CRF 26 → 约500MB(+3一次)
- CRF 29 → 约250MB(+6一次)
特殊场景的码率选择
屏幕录制视频
屏幕内容变化少,可以用较低码率获得高质量:
- 1080P屏幕录制 - CRF 18-20 或 2-3 Mbps
- 1440P/4K屏幕 - CRF 20-22 或 5-8 Mbps
ffmpeg -i screen.mp4 -c:v libx264 -crf 18 -preset medium -tune stillimage -c:a copy output.mp4
注意使用-tune stillimage参数优化静态画面。
动画/卡通视频
平滑的色块和清晰的线条,压缩效率很高:
- 720P动画 - CRF 20-22 或 1.5-2.5 Mbps
- 1080P动画 - CRF 20-22 或 3-5 Mbps
ffmpeg -i anime.mp4 -c:v libx264 -crf 20 -preset slow -tune animation -c:a copy output.mp4
高动态场景(运动、游戏)
快速运动需要更高码率:
- 1080P 60fps游戏 - CRF 18-20 或 10-15 Mbps
- 4K运动视频 - CRF 20-22 或 40-60 Mbps
电影/剧集
平衡质量和体积:
- 1080P电影 - CRF 20-22 或 4-6 Mbps
- 4K电影 - CRF 22-24 或 20-30 Mbps
常见问题
为什么CRF 23的文件比5Mbps VBR还大?
CRF追求质量一致性,会给复杂场景更多码率。如果视频整体比较复杂,CRF的平均码率可能超过固定码率设置。这是正常的,说明CRF在保证质量。
直播应该用多大码率?
根据平台和网络条件:
- 抖音/快手 - 2-4 Mbps(720P)
- B站/YouTube(1080P) - 4-6 Mbps
- Twitch游戏直播 - 6-8 Mbps
- 专业直播(1080P 60fps) - 8-12 Mbps
音频码率应该设多少?
| 音频质量 | AAC码率 | 适用场景 |
|---|---|---|
| 语音 | 64-96 Kbps | 会议录音、有声书 |
| 标准 | 128 Kbps | 日常视频、社交分享 |
| 高质量 | 192 Kbps | 音乐视频、影视剧 |
| 顶级 | 256-320 Kbps | 音乐专辑、专业存档 |
如何测试最佳CRF值?
用短片段(30-60秒)测试不同CRF值:
ffmpeg -i input.mp4 -ss 300 -t 60 -c:v libx264 -crf 20 -preset medium test_crf20.mp4
ffmpeg -i input.mp4 -ss 300 -t 60 -c:v libx264 -crf 22 -preset medium test_crf22.mp4
ffmpeg -i input.mp4 -ss 300 -t 60 -c:v libx264 -crf 24 -preset medium test_crf24.mp4
对比文件大小和画质,找到最满意的平衡点。
理解码率控制模式是掌握视频压缩的关键。对于95%的日常场景,CRF模式都是最佳选择,简单、高效、质量稳定。只有特殊需求(如直播、精确大小限制)才需要用CBR或VBR。记住:不要盲目追求低码率,画质才是最重要的。