4、H.265/HEVC编码参数:x265预设与调优、ctu大小、tu大小、rd级别、psy-rd与psy-rdoq参数调优
H.265/HEVC 的编码复杂度比 H.264 高了一个数量级。我刚接触 x265 时,面对那一大堆参数,说实话有点懵。但用久了你会发现,真正决定编码质量和效率的核心参数,其实就那么几个。
这一章,我们就来拆解 x265 的预设体系,以及 CTU、TU、RD 级别和 psy 调优这几个关键点。掌握了这些,你就能在画质、码率和编码速度之间找到自己的平衡点。
4.1 x265 预设体系:从 ultrafast 到 placebo
x265 的预设(preset)是一组预定义参数的集合。它控制着编码器的“思考深度”。
| 预设名称 | 编码速度 | 压缩效率 | 典型应用场景 |
|---|---|---|---|
| ultrafast | 极快 | 低 | 实时预览、直播推流 |
| superfast | 很快 | 较低 | 快速转码、移动端录制 |
| veryfast | 快 | 中等 | 日常批量处理 |
| faster | 较快 | 中等偏上 | 高质量直播、非编代理 |
| fast | 中等偏快 | 良好 | 个人视频归档 |
| medium | 中等 | 良好 | 默认值,通用场景 |
| slow | 较慢 | 高 | 高质量压制 |
| slower | 慢 | 很高 | 高码率电影、存档级 |
| veryslow | 很慢 | 极高 | 极限压缩、蓝光原盘 |
| placebo | 极慢 | 最高 | 学术研究、追求极致 |
slow 或 slower 是性价比最高的选择。从 veryslow 到 placebo,编码时间翻倍,但码率节省通常不到 1%。除非你有特殊需求,否则别碰 placebo。
命令行用法很简单:
ffmpeg -i input.mp4 -c:v libx265 -preset slow -crf 23 output.mp4
4.2 CTU 大小:编码树单元的“粒度”
CTU(Coding Tree Unit)是 HEVC 的基本处理单元。你可以把它想象成一块“积木”。H.264 的宏块最大是 16x16,而 HEVC 的 CTU 最大可以到 64x64。
CTU 越大,编码器在平坦区域(比如天空、墙壁)的压缩效率就越高。但在复杂纹理区域,太大的 CTU 反而会浪费计算资源。
| CTU 大小 | 优势 | 劣势 | 推荐场景 |
|---|---|---|---|
| 16 | 精细控制,适合低延迟 | 压缩率低,码率偏高 | 屏幕录制、文字内容 |
| 32 | 平衡点 | 中庸 | 通用视频 |
| 64 | 高压缩率,平坦区域表现好 | 复杂场景可能效率下降 | 电影、纪录片、自然风光 |
参数设置:
ffmpeg -i input.mp4 -c:v libx265 -x265-params "ctu=64" output.mp4
4.3 TU 大小:变换单元的“精度”
TU(Transform Unit)是进行 DCT 变换的最小单位。CTU 是“大块”,TU 是“小块”。TU 的大小范围是 4x4 到 32x32。
TU 越小,对细节的保留越好,但码率也会增加。TU 越大,压缩率越高,但可能丢失高频细节。
我个人习惯用 tu-intra-depth 和 tu-inter-depth 来控制 TU 的递归深度。深度越大,编码器尝试的 TU 组合就越多,质量越好,速度越慢。
# 允许 TU 从 4x4 到 32x32 的完整递归
ffmpeg -i input.mp4 -c:v libx265 -x265-params "tu-intra-depth=4:tu-inter-depth=4" output.mp4
4.4 RD 级别:率失真优化的“深度”
RD(Rate-Distortion)级别是 x265 最核心的调优参数之一。它控制着编码器在“码率”和“失真”之间做权衡时的计算量。
RD 级别从 0 到 6,数字越大,编码器尝试的候选模式越多,决策越精确。
| RD 级别 | 行为描述 | 速度影响 |
|---|---|---|
| 0 | 完全不进行 RD 计算,纯靠经验 | 极快 |
| 1-2 | 快速模式,用于低延迟场景 | 快 |
| 3-4 | 中等模式,平衡质量和速度 | 中等 |
| 5 | 高精度模式,用于高质量压制 | 慢 |
| 6 | 最高精度,开启全部 RD 工具 | 极慢 |
参数设置:
ffmpeg -i input.mp4 -c:v libx265 -x265-params "rd=5" output.mp4
4.5 psy-rd 与 psy-rdoq:心理视觉调优
这两个参数是 x265 的“画质魔法”。它们利用人眼的视觉特性,在编码时故意保留一些“瑕疵”,来换取更好的主观观感。
- psy-rd:心理视觉率失真优化。它会让编码器在平坦区域保留更多纹理,减少“水波纹”和“色块”。
- psy-rdoq:心理视觉率失真优化量化。它会在量化阶段,优先保留人眼敏感的高频细节。
说白了,这两个参数就是让画面看起来更“锐利”、更“自然”,而不是一味追求 PSNR 指标。
参数范围通常是 0.0 到 2.0。值越大,效果越明显,但也可能引入噪声。
# 开启 psy-rd 和 psy-rdoq,强度适中
ffmpeg -i input.mp4 -c:v libx265 -x265-params "psy-rd=1.0:psy-rdoq=1.0" output.mp4
4.6 核心逻辑关系图
下面这张图,帮你理清这几个参数之间的关系:
4.7 实战组合推荐
说了这么多理论,来点实际的。下面是我在不同场景下的参数组合:
| 场景 | 预设 | CTU | TU 深度 | RD | psy-rd | psy-rdoq |
|---|---|---|---|---|---|---|
| 快速转码 | veryfast | 32 | 2 | 3 | 0.5 | 0.5 |
| 高质量电影 | slow | 64 | 4 | 5 | 1.0 | 1.0 |
| 低码率直播 | faster | 32 | 2 | 4 | 0.3 | 0.3 |
| 存档级压制 | veryslow | 64 | 4 | 6 | 1.5 | 1.5 |
slow 预设 + CRF 23 跑一遍,看看效果。如果觉得码率太高,再逐步调整 CTU、RD 和 psy 参数。编码调优,本质上就是一场“试错”的游戏。