guide6 分钟阅读

视频压缩方法详解:CRF、码率控制与分辨率缩放

视频压缩方法完全指南:CRF(恒定质量因子)、CBR/VBR 码率控制和分辨率缩放。了解每种方法的原理和最佳使用场景,兼顾画质与文件大小。

作者:Gisg

深入理解 CRF 视频压缩

恒定质量因子(CRF,Constant Rate Factor)是现代视频编码器使用的一种码率控制方法,用于生成感知画质一致的输出。与以特定码率或文件大小为目标的方法不同,CRF 以画质水平为目标,让编码器自行决定每帧需要多少比特才能达到该画质。

CRF 已成为离线视频编码的默认推荐方案,因为它无需两遍编码就能实现最优的画质/比特比。如果你搜索过"FFmpeg 最佳设置"或"如何无损压缩视频",CRF 几乎一定是你找到的答案。

本指南从技术层面解释 CRF 的工作原理,将其与其他码率控制方法进行对比,并明确指出 CRF 的适用场景。实际命令行示例请参阅 FFmpeg CRF 实例指南。如果你是完全的新手,建议从 CRF 入门基础 开始。

CRF 的内部工作机制

画质定向机制

当你设定一个 CRF 值(例如 H.264 的 CRF 23)时,你实际上是在告诉编码器:"整个视频都以这个感知画质水平为目标。"编码器随后根据每帧的压缩难度来决定分配多少比特。

内部处理流程如下:

  1. 帧分析:编码器分析每帧(或每组帧)的复杂度——空间细节量、运动量,以及该帧从相邻帧预测的有效性。

  2. 量化参数(QP)选择:根据分析结果,编码器为每个宏块或编码单元选择量化参数。更高的 QP 意味着更激进的量化(压缩更多,画质更低),更低的 QP 意味着更温和的量化(压缩更少,画质更高)。

  3. 画质均衡:CRF 调整 QP 值以维持一致的感知画��。静态场景获得更高的 QP(用较少比特就能保持好效果),复杂场景获得更低的 QP(需要更多比特来保留细节)。

  4. 视觉心理学优化:使用 CRF 的现代编码器还会考虑人类视觉感知特性。人眼不太敏感的区域(快速运动、细微噪点)使用较低精度,而更重要的区域(边缘、人脸、文字)使用更高精度。

CRF 与量化参数(QP)的区别

CRF 常被与 QP 混淆,但两者有本质区别:

特性 CRF 恒定 QP
控制目标 感知画质 数学量化
码率表现 按需变化以维持画质 随内容变化
画质一致性 一致的感知画质 不一致的感知画质
视觉心理学优化 有(多数编码器)
场景自适应 按场景调整 QP 全局固定 QP

恒定 QP 下,简单场景和复杂场景接受相同的量化水平,这意味着简单场景画质高于必要水平,而复杂场景画质低于应有水平。CRF 纠正了这种不平衡。

CRF 公式

在 x264 和 x265 中,CRF 大致遵循以下关系:

QP = CRF + 复杂度偏移

其中"复杂度偏移"由编码器对每帧复杂度相对于视频平均值的分析决定。简单帧得到正偏移(更高 QP,更少比特),复杂帧得到负偏移(更低 QP,更多比特)。

实际实现远比这复杂,涉及前瞻缓冲、宏块树分析(mbtree)和帧类型加权等机制,但这个简化模型捕捉了核心概念。

宏块树分析(mbtree)

x264 和 x265 中 CRF 最重要的子功能之一是宏块树分析。启用时(默认开启),mbtree 追踪每个宏块被未来帧引用的频率。

频繁被引用的宏块(如静态背景区域)获得更多比特,因为其画质损失会传播到许多未来帧。很少被引用的宏块(如即将被运动遮挡的区域)获得更少比特,因为其影响是暂时的。

这就是 CRF 显著优于恒定 QP 编码的原因,即使平均 QP 可能相近。

各编码器的 CRF 标尺

每个视频编码器有自己的 CRF 标尺。这些标尺不可直接对比,因为它们反映了不同的底层量化体系。

H.264 (x264) CRF 标尺

  • 范围:0-51
  • 默认值:23
  • 无损:0
  • 视觉无损:约 17-18
  • 每 +6 CRF:量化程度大致翻倍

H.265 (x265) CRF 标尺

  • 范围:0-51
  • 默认值:28
  • 无损:0
  • 视觉无损:约 20-22

H.265 与 H.264 使用相同的数值范围,但默认值是 28 而非 23。这并不意味着 H.265 CRF 28 的画质更低,而是 H.265 CRF 28 产出与 H.264 CRF 23 大致相当的画质,但文件更小。更多对比详见 H.264 与 H.265 对比

VP9 CRF 标尺

  • 范围:0-63
  • 默认值:31
  • 无损:0
  • 视觉无损:约 15-20

VP9 使用更宽的标尺(0-63),因此数值不可与 H.264/H.265 直接对比。

AV1 CRF 标尺

  • 范围:0-63(libaom 和 SVT-AV1 均是)
  • 默认值:32(libaom)、35(SVT-AV1)
  • 无损:0
  • 视觉无损:约 18-23(libaom)、20-25(SVT-AV1)

各编码器的全面对比请参阅 AV1 vs VP9 vs H.264 分析

跨编码器画质等效表

画质级别 H.264 CRF H.265 CRF VP9 CRF AV1 (SVT) CRF
视觉无损 17-18 20-22 15-20 20-25
优秀 19-21 23-25 22-28 26-30
良好(通用) 22-24 26-28 30-34 32-36
可接受 26-28 30-32 36-40 38-42
低画质 30+ 34+ 42+ 45+

CRF 与其他码率控制方法对比

CRF vs 恒定码率(CBR)

CBR 无论内容复杂度如何都维持固定码率。这是最简单的码率控制方法,也是大多数直播场景的必要选择。

方面 CRF CBR
画质一致性 画质一致 画质波动
码率表现 可变 固定
文件大小可预测性 不可预测 可预测
编码遍数 单遍 单遍
最适合 离线编码、归档 直播、实时传输
带宽占用 有波动 平稳
效率 高(比特按需分配) 低(简单场景浪费比特)

场景示例:一段 10 分钟的视频,前 5 分钟是静态演讲,后 5 分钟是激烈动作。

  • CBR 5 Mbps:静态部分画质极好(比特过多),动作部分画质平平(比特不足)。总大小:375 MB。
  • CRF 23:静态部分可能只用 2 Mbps(仍然画质极好),动作部分可能用 8 Mbps(同样画质极好)。总大小:约 300 MB,且整体画质更好。

CRF vs 可变码率(VBR)

两遍 VBR 和 CRF 一样能根据场景复杂度调整码率,但它以特定的平均码率(从而可预测的文件大小)为目标,而非画质水平。

方面 CRF 两遍 VBR
画质一致性
文件大小可预测性
编码遍数 1 2
编码速度 较快 较慢(约 2 倍)
码率目标 无(画质目标) 指定平均码率
最适合 画质优先的编码 文件大小受限的编码

选择 VBR 而非 CRF 的场景:需要精确控制文件大小(邮件附件限制、存储配额)或特定平均码率(CDN 带宽规划)时。

CRF vs 恒定 QP(CQP)

恒定 QP 对每帧应用相同的量化参数,不做任何画质自适应逻辑。

方面 CRF 恒定 QP
画质分配 跨场景优化 全局统一 QP
感知画质 一致 随场景复杂度变化
压缩效率 更高 更低
使用场景 通用编码 测试、基准评测
mbtree 支持

实际上,几乎没有理由在生产环境中使用恒定 QP 而非 CRF。CQP 主要用于学术研究和编码器基准评测,这些场景需要一致的量化(而非一致的画质)。

决策流程图

是否用于直播或实时传输?
  是 -> 使用平台推荐码率的 CBR
  否 -> 是否需要特定文件大小?
          是 -> 使用两遍 VBR 搭配目标码率
          否 -> 是否需要码率上限?
                  是 -> 使用受限 CRF(CRF + maxrate + bufsize)
                  否 -> 使用 CRF

预设对 CRF 输出的影响

一个常见的误解是 CRF 单独决定输出文件大小。实际上,编码预设有着显著影响。

预设控制编码器在寻找最优压缩时投入多少计算量。更慢的预设能找到更好的压缩方式,在相同 CRF 值下产出更小的文件。

预设对文件大小的影响(H.264,CRF 23,1080p,60 秒)

预设 编码速度 大致文件大小 相对 medium
ultrafast 10x 65 MB +85%
superfast 7x 55 MB +57%
veryfast 5x 48 MB +37%
faster 3.5x 42 MB +20%
fast 2.5x 38 MB +8%
medium 1x(基准) 35 MB --
slow 0.5x 32 MB -8%
slower 0.3x 30 MB -14%
veryslow 0.15x 28 MB -20%
placebo 0.05x 27.5 MB -21%

关键发现:

  • ultrafastmedium 的文件大小降幅巨大(近 2 倍)
  • mediumveryslow 的降幅较为温和(约 20%)
  • placebo 相比 veryslow 几乎没有改善,但速度代价极大
  • 对于大多数工作流,mediumslow 是最佳选择

受限 CRF:兼顾画质与码率控制

受限 CRF 是一种混合方案,以 CRF 作为主要画质目标,同时设置最大码率上限。适用于需要画质自适应编码但不能超过特定带宽的流媒体场景。

ffmpeg -i input.mp4 -c:v libx264 -crf 22 -maxrate 6M -bufsize 12M output.mp4

受限 CRF 的行为模式:

  • 大部分时间,编码器按纯 CRF 模式运行
  • 当 CRF 目标会导致码率超过 -maxrate 时,编码器提高 QP 以控制在限制内
  • 原本会突破 6 Mbps 的场景被更激进地压缩
  • 自然低于 6 Mbps 的简单场景以完整 CRF 画质编码
  • -bufsize 决定编码器对码率超标的反应速度(通常设为 maxrate 的 2 倍)

不同内容类型的 CRF 策略

高速运动内容(体育、游戏、动作片)

高速运动内容每帧需要更多比特才能保持画质。同一 CRF 值下,体育视频的文件远大于静态讲话视频。

  • H.264 建议 CRF 18-22
  • 实拍体育可配合 -tune film
  • 考虑使用更高帧率(60 fps)以减少单帧运动模糊

低运动内容(演示、教程、摄像头)

静态内容在 CRF 下压缩效率极高。编码器对未变化的区域分配极少比特。

  • H.264 CRF 24-28 通常效果出色
  • 同一 CRF 下,文件大小远小于高速运动内容
  • 屏幕录制含文字时可配合 -tune stillimage

动画和卡通

动画内容有独特的特征:大面积均匀色块、锐利边缘,有时场景切换极快。

  • H.264 可配合 -tune animation
  • H.264 CRF 20-24 效果良好
  • 动画在同一 CRF 下通常比实拍内容压缩效果更好

带胶片颗粒的内容

保留胶片颗粒需要额外比特。处理不当时,CRF 编码要么浪费比特试图保留随机噪点,要么彻底抹平颗粒质感。

  • H.264 配合 -tune grain 可保留��粒
  • 保留颗粒时建议 CRF 18-22
  • 或者先降噪再编码,使用更高的 CRF

CRF 画质评估:VMAF、SSIM 和 PSNR

要客观对比不同 CRF 值的效果,可以使用画质指标:

VMAF(视频多方法评估融合):由 Netflix 开发,与人类感知高度相关。评分范围 0-100,95 分以上为优秀,70 分以上通常可接受。

SSIM(结构相似性指数):衡量帧间的结构相似度。评分范围 0-1,0.95 以上为优秀。

PSNR(峰值信噪比):最古老的指标,以 dB 为单位。数值越高越好,但与人类感知的相关性不如 VMAF。

## 计算原始视频与编码视频之间的 VMAF
ffmpeg -i encoded.mp4 -i original.mp4 -lavfi libvmaf -f null -

各 CRF 值典型 VMAF 分数(H.264,1080p���

CRF 典型 VMAF 感知效果
17 97-99 视觉无损
20 95-97 优秀
23 92-95 很好
26 87-92 良好
30 80-87 可接受
35 70-80 可察觉的劣化

CRF 编码的常见陷阱

跨编码器混用 CRF 标尺

最常见的错误是假设不同编码器的 CRF 值等效。H.264 CRF 23 是"良好画质",但 H.265 CRF 23 是"优秀画质"(产出的文件比需要的更大)。请始终使用各编码器的推荐默认值。

忽略预设的影响

使用"CRF 23"的两个编码实例可能产出大小迥异的文件,如果一个用 -preset ultrafast,另一个用 -preset slow。请始终在 CRF 值旁标注预设参数。

禁用前瞻或 mbtree

部分编码流程为追求速度而禁用 mbtree 或使用零前瞻。这会显著削弱 CRF 智能分配比特的能力,使其相对恒定 QP 的优势大打折扣。

在带宽敏感场景使用纯 CRF

CRF 的可变码率可能产生瞬时峰值,耗尽网络缓冲。用于流媒体时,务必使用受限 CRF 搭配 -maxrate-bufsize,或切换到 CBR。

用 Vibbit 简化 CRF 编码

理解 CRF 值、预设和编码器专属标尺需要技术知识,大多数内容创作者不应为此烦恼。Vibbit 视频压缩工具能根据你的内容类型和画质目标自动选择最优 CRF 值和编码设置。上传视频,选择画质等级,即可获得完美压缩的输出。如需格式转换并获取最优编码,试试我们的视频转换工具

常见问题

CRF 在视频压缩中代表什么?

CRF 是 Constant Rate Factor(恒定质量因子)的缩写。它是一种码率控制方法,通过逐帧动态调整码率来维持整个视频中一致的感知画质水平。你指定的不是码率,而是画质目标(CRF 值),编码器会自动决定每帧的合适码率。

CRF 比固定码率编码更好吗?

CRF 产出的每字节画质优于恒定码率(CBR)编码,因为它将比特分配到最需要的地方。但 CRF 并非万能。直播需要可预测的码率(CBR 或受限 VBR),文件大小受限的分发需要两遍 VBR。对于以画质为优先的离线编码,CRF 几乎总是最佳选择。

为什么同一 CRF 值编码不同视频的文件大小差异很大?

这是设计使然。CRF 的目标是画质而非文件大小。运动丰富、细节复杂的视频需要更多比特来维持画质,因此文件更大。基本静态的视频需要更少比特,文件更小。如需可预测的文件大小,请改用两遍 VBR。

H.264 和 H.265 的 CRF 值能直接对比吗?

不能直接对比。虽然两者的 CRF 数值范围相同(0-51),但代表不同的画质水平。粗略换算为:H.265 CRF 约等于 H.264 CRF + 5。因此 H.264 CRF 23 大致对应 H.265 CRF 28,但 H.265 的文件会显著更小,因为 H.265 是更高效的编码器。

上传 YouTube 应该用什么 CRF?

上传 YouTube 建议使用 CRF 17-20 搭配 H.264 和 slow 预设。YouTube 无论如何都会重新编码,上传更高画质的源素材能让 YouTube 获得更好的原始材料。用 CRF 0(无损)上传没有意义,因为文件巨大而 YouTube 会大幅压缩。

CRF 能配合硬件编码器(NVENC、QuickSync)使用吗?

NVIDIA NVENC 和 Intel QuickSync 等硬件编码器有自己的类 CRF 模式(通常称为"恒定质量"或 CQP 模式),但与软件 CRF 并不完全相同。硬件编码器缺少 mbtree 分析和精密的前瞻功能,因此在同等画质下通常产出更大的文件。追求最佳 CRF 效果,请使用软件编码器(libx264、libx265、libsvtav1)。

如何找到最适合我内容的 CRF 值?

截取一段 30-60 秒的代表性片段,以多个 CRF 值编码(例如 H.264 用 20、23、26、28),对比画质和 VMAF 分数,检查文件大小。选择仍能满足画质要求的最高 CRF 值(最小文件)。这个测试只需几分钟,却能节省大量存储和带宽。

标签

视频压缩方法crf 码率 缩放crf 视频压缩恒定质量因子crf vs 码率视频缩放压缩码率控制方法cbr vs vbr vs crf