CRF、ABR、VBR 核心区别(通俗理解)
在 H.264 视频编码(通常指使用 x264 编码器)中,CRF、ABR 和 VBR(2-Pass) 是三种控制码率(Bitrate)和画质之间平衡的模式。
核心区别在于编码器优先保证什么:是保证文件大小、保证画质,还是保证实时性?
1. CRF (Constant Rate Factor) —— 恒定质量因子
核心逻辑: “画质优先,文件大小随缘”
- 原理:
这是 x264/x265 编码器的默认和推荐模式。你设定一个”质量值”(CRF值),编码器会根据画面的复杂程度自动分配码率。 - 简单场景(如静止画面):分配极低码率,不浪费空间。
-
复杂场景(如动作戏、爆炸):分配极高码率,保证不失真。
-
参数:
范围通常是 0-51。数值越小,画质越好,文件越大。 - 0 = 无损。
- 18-23 = 标准范围(23 是默认值,18 被认为是视觉无损)。
-
28+ = 画质明显下降。
-
优点:
编码效率最高(性价比最高)。它能保证整部视频的视觉质量是一致的,不会忽好忽坏。 -
缺点:
无法预测最终文件大小。在编码结束前,你完全不知道视频会有多大。 -
适用场景:
本地存档、压制电影、上传到 YouTube/Bilibili(因为平台会二压,提供高质量源文件最好)。
2. ABR (Average Bitrate) —— 平均码率(单遍)
核心逻辑: “主要控制文件大小,但为了画质可以小幅波动”
-
原理:
你告诉编码器:”我希望整部视频的平均码率是 2000kbps”。编码器会在简单的片段用少一点,复杂的片段用多一点,但整体尽量向 2000kbps 靠拢。 -
区别:
它是单次编码(Single Pass)。编码器在处理当前帧时,不知道后面的帧有多复杂,所以它的码率分配是”猜”的,不够精准。 -
优点:
编码速度快(只需跑一遍),文件大小相对可控。 -
缺点:
画质/体积比最差。因为它不知道全局情况,往往会在简单的场景浪费码率,而在复杂的场景因为码率不够导致马赛克。 -
适用场景:
直播(非严格 CBR 模式下)、需要快速出片且对画质要求不高的场景。通常不推荐用于视频存储。
3. VBR (Variable Bitrate) —— 可变码率(通常指 2-Pass VBR)
核心逻辑: “精准控制文件大小,同时尽量优化画质”
-
注意:
虽然 ABR 和 CRF 从技术上讲也是”可变的”,但在 H.264 讨论中,提到 VBR 通常是指 2-Pass VBR(二次编码)。 -
原理:
- 第 1 遍(Pass 1): 编码器快速扫描整个视频,记录哪里简单、哪里复杂,生成一个日志文件(.log),但不输出视频。
-
第 2 遍(Pass 2): 编码器读取日志,根据你设定的目标码率(或目标文件大小),精准地将有限的”比特”分配给最需要的复杂场景。
-
优点:
精准控制文件大小,且画质比 ABR 好得多。 -
缺点:
耗时最长。因为要跑两遍,编码时间是 ABR 或 CRF 的两倍。 -
适用场景:
受限于存储介质(如必须把一部电影塞进 4.7GB 的 DVD,或 700MB 的 CD),或者受限于流媒体带宽上限。
快速选择指南
| 场景 | 推荐模式 | 原因 |
|---|---|---|
| 自己压片收藏,或要传 B站/YouTube | CRF(设置 CRF=18~23) | 最省心且效果最好 |
| 被要求”视频必须刚好 500MB” | 2-Pass VBR | 精准控制文件大小 |
| 搞直播 | CBR 或 ABR | 取决于推流服务器的要求 |
| 快速预览/临时文件 | ABR | 编码速度快 |
| 高质量存档 | CRF(CRF=18) | 质量优先 |
总结对比表(通俗版)
| 特性 | CRF (恒定质量) | ABR (平均码率) | VBR (2-Pass 二次编码) |
|---|---|---|---|
| 主要目标 | 画质一致 | 编码速度 + 粗略大小 | 精准大小 + 最佳画质分配 |
| 文件大小 | 不可预测 | 基本可控 | 非常精准 |
| 编码次数 | 1次 | 1次 | 2次 (慢) |
| 画质效率 | ⭐⭐⭐⭐⭐ (最高) | ⭐⭐⭐ (较低) | ⭐⭐⭐⭐ (高) |
| 主要用途 | 收藏、上传视频网站 | 直播、快速预览 | 限制容量的存储 (DVD/蓝光) |
注意: 尽量别用 ABR 压制存档视频,那是以前计算能力不足时的妥协产物。现在优先推荐 CRF 或 2-Pass VBR。
详细对比说明(技术细节)
CBR vs CRF
– CBR(VBV 约束):带宽/峰值更可控,但复杂画面更容易牺牲画质
– CRF:质量更一致,但码率/大小不可预测
– 选择建议:
– 直播/网络受限传输:优先 CBR-like(或 capped CRF + VBV)
– 离线转码/存档:优先 CRF
VBR vs CRF
– VBR:只是“码率可变”的描述;如果你指的是“两遍 VBR”,它更适合做大小/平均码率控制。
– CRF:质量驱动的 VBR(码率可变),更适合做质量一致性。
ABR(平均码率)vs CRF
– ABR(单遍):更偏“接近目标平均码率/大小”,但精度有限;想更准用两遍
– CRF:质量优先,大小不可预测
自适应码率流媒体 vs CRF
– 自适应码率流媒体:多档位 + 播放器自适应(传输/封装方案)
– CRF:单档位编码策略之一(也可用于每个档位的编码)
实际应用建议
-
直播场景(带宽可控):使用 CBR-like(VBV 约束)
bash
ffmpeg -i input -c:v libx264 -b:v 2M -maxrate 2M -bufsize 4M -preset veryfast output -
点播转码(质量优先):使用 CRF(推荐)
bash
ffmpeg -i input -c:v libx264 -crf 23 -preset slow output -
存储/传输上限(质量优先但限峰值):使用 capped CRF(CRF + VBV)
bash
ffmpeg -i input -c:v libx264 -crf 23 -maxrate 3M -bufsize 6M output -
自适应流媒体:使用 HLS/DASH 多档位(每档位设置分辨率与 VBV 上限)
bash
# 生成多个码率/分辨率版本,或直接输出 HLS/DASH
# 这是“传输/封装方案”,不是单一的编码码控模式
