5.3 编码参数:质量、体积与速度的三角


5.3 编码参数:质量、体积与速度的三角

本节摘要:CRF、preset、码率是编码器最核心的三个旋钮,分别控制质量、速度与体积。本节讲透三者的语义与相互作用,给出「点播/直播/存档」三个场景的参数组合,并演示如何用两遍编码(2-pass)追求极限体积。

学习目标

阅读完本节,你应当能够:

  1. 解释 CRF 的语义与典型取值范围,说出它与固定码率的本质区别
  2. 说出 preset 的含义(越慢越精细),以及它对体积的影响
  3. 按点播/直播/存档场景给出合理的参数组合
  4. 说出两遍编码的适用场景与代价

一、数字事实开场

同样一段 1080p 视频,用 H.264 编码,参数不同,产物可以从 50 MB 差到 500 MB。而「看起来差不多」。这个数量级的差距,全在三个旋钮的搭配上:CRF(质量)、preset(速度)、码率(体积上限)。搞懂这三者,你就拿到了转码质量的支配权。

二、核心原理:三个旋钮各管什么

CRF:恒定质量档

CRF 是 H.264/HEVC 系列编码器最推荐的控制方式,值域约 0–51,越小质量越高、体积越大。语义是「让编码器自己决定每个场景花多少比特,目标是全片保持这个感知质量档」。

  • H.264 常用范围:18(高画质)~ 28(高压缩),默认 23
  • 18 以下肉眼基本分不出,纯浪费流量;30 以上块状伪影明显
# CRF 18:接近无损的高画质 ffmpeg -i input.mp4 -c:v libx264 -crf 18 output_crf18.mp4 # CRF 28:高压缩,适合不重要的内容 ffmpeg -i input.mp4 -c:v libx264 -crf 28 output_crf28.mp4

CRF 与固定码率的本质区别:固定码率(-b:v 8000k)给每帧分配固定预算,简单场景浪费、复杂场景不够;CRF 让编码器按场景复杂度「按需分配」,同样画质下总体积更小。所以点播文件几乎总是用 CRF,只有对体积有硬性要求(如平台限制)才用固定码率。

preset:速度与压缩效率的权衡

preset 决定编码器花多大力气找最优解:ultrafast 最快但体积大、画质略糙,veryslow 最慢但最省流量。

preset 速度 体积 用途
ultrafast 极快 快速预览、临时文件
medium 中等 默认,通用
slower 认真转码
veryslow 极慢 最小 追求极限压缩
# 追求体积小的正式转码 ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset slower output.mp4

码率参数:体积的硬约束

直播等对带宽有硬约束的场景,CRF 不够用,要显式给码率:

# 固定码率 4 Mbps,直播推流常见 ffmpeg -i input.mp4 -c:v libx264 -b:v 4000k -maxrate 4000k -bufsize 8000k -pix_fmt yuv420p output.mp4

-maxrate 限峰值,-bufsize 给编码器一个缓冲窗口——允许它在峰值时借用后面简单场景的额度,让码率波动更平滑。

两遍编码:追求极限体积的代价

固定码率下想「每一帧都分配得当」,先跑一遍分析、再跑一遍正式编码:

# 第一遍:只分析,不输出 ffmpeg -i input.mp4 -c:v libx264 -b:v 3000k -pass 1 -f null NUL # 第二遍:按第一遍的统计分配码率 ffmpeg -i input.mp4 -c:v libx264 -b:v 3000k -pass 2 output.mp4

两遍编码能在固定目标码率下把画质最大化,代价是时间约翻倍。注意:第一遍的 -f null NUL(Windows 下是 NUL,Linux 下是 /dev/null)是丢弃输出。但两遍编码的收益只体现在「码率被卡死」时——用 CRF 就没有两遍一说,因为 CRF 本来就在按需分配。

三、工程实践要点

三个场景的参数组合

场景 推荐组合 理由
点播存档 -crf 18 -preset slower 质量优先,不赶时间
平台转码 -crf 23 -preset medium 质量体积均衡
直播推流 -b:v + -maxrate + -bufsize 带宽是硬约束,不能用 CRF
快速预览 -crf 28 -preset ultrafast 看个大概,别浪费机器

用 ffprobe 验证结果

ffprobe -v error -show_entries stream=bit_rate -of default=noprint_wrappers=1 output.mp4

参数关系一图流

参数关系一图流

图说明:三角关系

质量、体积、速度三选二。CRF 控质量、preset 控速度与体积、码率控体积上限。点播默认走 CRF+preset,直播被迫走码率控制。理解「为什么」,组合就不会记错。

⚠️ 常见坑:CRF 和固定码率别同时写,会互相干扰;直播用 CRF 会导致码率不可控、卡顿;两遍编码第一遍输出必须丢弃,否则覆盖第二次结果;-pix_fmt yuv420p 是兼容性保险,很多平台不认其他像素格式。

💡 关键直觉:先问「体积是不是硬约束」。是 → 码率参数 + 两遍;否 → CRF + preset。这一问能省下你一半的转码纠结。

要点回顾

  • CRF:恒定质量档,越小越清晰越大,点播首选;与固定码率本质不同
  • preset:速度与体积的交换,ultrafast 到 veryslow,越慢越省
  • 码率参数:-b:v/-maxrate/-bufsize 是体积硬约束,直播场景必备
  • 两遍编码:只有码率被卡死时才值得,时间翻倍换画质分配
  • 场景定参数:点播 CRF 23+medium、存档 CRF 18+slower、直播码率控制

下一节,管线要走出本机了——第 6 章把编码好的流送到网络上。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U