视频码率控制

CRF、ABR、VBR 核心区别(通俗理解)

在 H.264 视频编码(通常指使用 x264 编码器)中,CRFABRVBR(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:单档位编码策略之一(也可用于每个档位的编码)

实际应用建议

  1. 直播场景(带宽可控):使用 CBR-like(VBV 约束)
    bash
    ffmpeg -i input -c:v libx264 -b:v 2M -maxrate 2M -bufsize 4M -preset veryfast output

  2. 点播转码(质量优先):使用 CRF(推荐)
    bash
    ffmpeg -i input -c:v libx264 -crf 23 -preset slow output

  3. 存储/传输上限(质量优先但限峰值):使用 capped CRF(CRF + VBV)
    bash
    ffmpeg -i input -c:v libx264 -crf 23 -maxrate 3M -bufsize 6M output

  4. 自适应流媒体:使用 HLS/DASH 多档位(每档位设置分辨率与 VBV 上限)
    bash
    # 生成多个码率/分辨率版本,或直接输出 HLS/DASH
    # 这是“传输/封装方案”,不是单一的编码码控模式

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Index