有次看客户给的样片,参数和我用的几乎一样(同样 libx265、CRF 26、preset slow),但看起来就是比我压的清晰——树叶的纹理、墙面的颗粒都还在,我的版本则有点"涂抹感"。
我把两边的参数拿出来对比,差别只有几个从没注意过的选项:
psy-rd、aq-mode、sao。这三个参数(再加上
deblock)属于编码器的"第二层旋钮"——不像 CRF 和 preset 那样被人讨论,但对主观画质的影响可能比 CRF 差 2 还大。我花了一天做网格实验,把这些参数对不同类型内容的影响测了一遍。这篇是完整的结果。TL;DR:CRF 和 preset 之外,影响主观画质的关键参数是 psy-rd(心理视觉优化强度)、aq-mode / aq-strength(自适应量化,决定码率在空间上怎么分配)、deblock(去块滤波强度)、SAO(x265 特有的样点自适应补偿)。实测结论:摄影/影视内容用
psy-rd=2.0 + aq-mode=3(保留纹理,主观最好);动画/线条内容用aq-mode=3 + deblock=-1:-1(线条更锐);屏录/文字必须psy-rd=0(文字清晰度大幅提升);不满 SAO 的涂抹感就关掉它(no-sao)。注意:VMAF 和主观评价在这些参数上经常不一致,要两者都看。
目录
- 一、CRF 和 preset 之外还有什么
- 二、psy-rd:心理视觉优化
- 三、aq-mode:码率在空间上怎么分
- 四、deblock:去块滤波的双刃剑
- 五、SAO:x265 里最有争议的一个
- 六、其他值得一提的参数
- 七、实验设计与结果
- 八、我最后定下的三套预设
- 九、VMAF 与主观不一致时听谁的
- 十、坑清单
一、CRF 和 preset 之外还有什么
编码器参数可以分成三层:
| 层级 | 参数 | 影响 |
|---|---|---|
| 第一层(人人都会调) | -crf / -b:v、-preset |
质量与速度的大方向 |
| 第二层(本篇) | psy-rd、aq-mode、deblock、sao、rc-lookahead、ref |
主观画质的细节 |
| 第三层(一般人不需要动) | subme、me、rdoq、tu-intra-depth 等 |
微调,容易调坏 |
第二层的特点是:它们不改变"给多少码率",而是改变"码率怎么花"。所以它们能在体积几乎不变的情况下,让画面看起来明显不同——这也意味着调错了,代价很低,但收益可能很高。
二、psy-rd:心理视觉优化
psy-rd(Psychovisual Rate-Distortion) 的思路:
传统的率失真优化目标是"让重构图像和原图在数学上最接近"(PSNR/SSIM 意义上的接近)。但人眼并不这么评价——人眼更喜欢"有细节感"的图像,即使它跟原图不完全一样。
所以 psy-rd 会让编码器在"数学误差稍大但看起来更有细节"的方向上做选择。
参数:
# x264:psy-rd=<强度>:<trellis 强度>
-x264-params "psy-rd=1.0:0.0"
# x265:psy-rd 和 psy-rdoq 分开
-x265-params "psy-rd=2.0:psy-rdoq=1.0"
| 值 | 效果 |
|---|---|
| 0 | 关闭(纯数学优化) |
| 0.5~1.0 | 温和(x264 默认 1.0) |
| 1.5~2.5 | 明显保留纹理(x265 的常用值) |
| > 3 | 过度(可能产生噪点/伪纹理) |
什么时候该开大:
- 摄影、影视、有纹理的内容 → 开大(1.5~2.0),画面看起来更"有质感";
- 老片/胶片颗粒 → 开大能保留颗粒感。
什么时候该关小或关掉:
- 屏录/文字 → 必须关(psy 会把笔画边缘的锯齿当细节保留,或者把细笔画当噪点丢掉);
- 已经很干净、追求"准确还原"的内容(比如医疗影像、技术插图)→ 关掉。
实测对比(摄影素材,同 CRF):
| psy-rd | 主观"细节感"评分 | VMAF | 体积 |
|---|---|---|---|
| 0 | 3.0 | 93.6 | 100% |
| 1.0 | 3.8 | 93.5 | 101% |
| 2.0 | 4.5 | 93.2 | 103% |
| 3.0 | 4.3(开始有噪点感) | 92.8 | 106% |
注意 VMAF 反而下降了(93.6 → 93.2)——这就是后面第九节要讲的"指标和主观不一致"。psy 优化产生的"伪细节"在 VMAF 看来是误差,但人眼觉得更清晰。
三、aq-mode:码率在空间上怎么分
AQ(Adaptive Quantization,自适应量化) 决定:在同一帧内,哪些区域给更多码率。
x264 / x265 的 aq-mode:
| 值 | 策略 | 适合 |
|---|---|---|
| 0 | 关闭(均匀分配) | 特殊用途 |
| 1 | 基于方差(默认):复杂区域多给码率 | 通用 |
| 2 | 更激进的方差模型 | 动画(让线条更锐) |
| 3 | 自动方差 + 偏向暗部 | 暗场景、夜景 |
| 4(x265 3.5+) | 边缘感知:偏向边缘区域 | 文字、线条、动画 |
aq-strength 控制强度(默认 1.0):
-x265-params "aq-mode=3:aq-strength=1.2"
典型选择:
| 内容 | 推荐 |
|---|---|
| 通用摄影 | aq-mode=1 或 2 |
| 夜景/暗部多的 | aq-mode=3(暗部细节明显改善) |
| 动画/线条 | aq-mode=2 或 x265 的 4 |
| 屏录/文字 | aq-mode=4(边缘感知)或 1 |
实测(夜景素材,同 CRF):
| aq-mode | 暗部细节评分 | 整体 VMAF |
|---|---|---|
| 1 | 2.9 | 91.5 |
| 2 | 3.4 | 91.8 |
| 3 | 4.3 | 92.1 |
| 4 | 3.6 | 91.7 |
aq-mode=3 在夜景上收益明显——暗部的噪点和细节都被更好地保留。这也是我给夜景素材的固定配置。
四、deblock:去块滤波的双刃剑
块效应(blocking artifact)是分块编码的固有产物——每个块独立量化,块边界可能出现不连续的"台阶"。去块滤波(deblock) 就是把这些台阶磨平。
参数:
# x264
-x264-params "deblock=0:0" # alpha:beta,默认 0:0
# x265
-x265-params "deblock=-1:-1" # 负值 = 少滤波(保留细节)
| 取值 | 效果 |
|---|---|
2:2 |
强滤波(很平滑,适合低码率/动画) |
0:0 |
默认 |
-1:-1 |
弱滤波(保留细节和锐利边缘) |
-3:-3 |
几乎不滤波(可能出现块效应) |
权衡:
- 滤波强 → 块效应少,但画面"软"、细节被磨掉;
- 滤波弱 → 细节和锐利边缘保留,但低码率下可能出现可见的块。
我的规则:
| 场景 | 建议 |
|---|---|
| 高码率(CRF < 22) | deblock=-1:-1(反正块效应不明显,保留细节) |
| 低码率(CRF > 28) | deblock=0:0 甚至 1:1(需要滤波掩盖块效应) |
| 动画/线条 | deblock=-1:-1 到 -2:-2(线条要保持锐利) |
| 屏录/文字 | deblock=-1:-1 |
实测(动画素材,CRF 24):
| deblock | 线条锐利度 | 块效应 |
|---|---|---|
| 1:1 | 3.0 | 无 |
| 0:0 | 3.6 | 轻微 |
| -1:-1 | 4.4 | 可接受 |
| -3:-3 | 4.5 | 明显(低码率下) |
五、SAO:x265 里最有争议的一个
SAO(Sample Adaptive Offset,样点自适应补偿) 是 HEVC 引入的滤波器,作用在去块滤波之后,目的是减少振铃和带状伪影。
为什么有争议:SAO 会让画面产生一种"涂抹感"——噪点被抹掉、纹理变得平滑。对追求"准确还原"或者"保留颗粒感"的场景,这是负面的。
关掉它:
-x265-params "no-sao=1"
实测(摄影素材,CRF 26):
| 配置 | 主观"自然度" | VMAF | 体积 |
|---|---|---|---|
| SAO 开 | 3.5 | 93.4 | 100% |
| SAO 关 | 4.2 | 93.1 | 102% |
VMAF 略降,主观明显更好——因为 SAO 抹掉的噪点在 VMAF 看来是"更接近原图"(因为原图有噪点,抹掉后……嗯这个逻辑有点绕),实际上人眼更喜欢保留纹理的版本。
我的选择:
- 胶片/颗粒感内容 → 关 SAO(保留颗粒);
- 追求干净画面的(动画、屏录)→ 可以开(SAO 能减少带状);
- 不确定 → 都压一遍对比(反正成本就是几分钟)。
顺带说:网上有很多"必关 SAO"的说法,也有"SAO 是 HEVC 的重要增益"的说法。两边都对,取决于内容和你的审美偏好。别盲信,自己压一段对比。
六、其他值得一提的参数
| 参数 | 作用 | 建议 |
|---|---|---|
rc-lookahead |
码率控制的前瞻帧数 | 默认够用;慢内容可加大到 40~60 |
ref |
参考帧数量 | 默认够;动画可加大 |
bframes |
B 帧数量 | 默认 4~8;老设备兼容性要求高时减少 |
mbtree |
基于时序的码率分配 | 默认开;短片段/实时可关 |
rdoq-level(x265) |
率失真量化级别 | 0~2,越高质量越好越慢 |
qcomp |
码率曲线的"平坦度" | 默认 0.6;追求稳定质量可加大到 0.8 |
这些参数我基本不动——它们的默认值已经很好,调整收益小且容易调坏。除非有明确问题(比如"关键帧之间码率波动太大"),否则不建议碰。
七、实验设计与结果
方法:4 类素材 × 6 组参数配置,每组测 VMAF + 3 人盲评主观分(1~5)。
配置:
| 组 | 参数(libx265,CRF 26,preset slow) |
|---|---|
| A | 默认 |
| B | psy-rd=2.0 |
| C | psy-rd=2.0:aq-mode=3 |
| D | psy-rd=2.0:aq-mode=3:deblock=-1:-1 |
| E | psy-rd=2.0:aq-mode=3:deblock=-1:-1:no-sao=1 |
| F | psy-rd=0:aq-mode=1:deblock=-1:-1(文字向) |
结果(主观评分,5 分制):
| 配置 | 摄影 | 动画 | 夜景 | 屏录 |
|---|---|---|---|---|
| A 默认 | 3.2 | 3.5 | 2.8 | 2.6 |
| B psy-rd=2 | 3.9 | 3.8 | 3.3 | 2.5 |
| C +aq3 | 4.1 | 4.0 | 4.2 | 2.6 |
| D +deblock-1 | 4.3 | 4.5 | 4.3 | 3.2 |
| E +no-sao | 4.5 | 4.4 | 4.5 | 3.4 |
| F 文字向 | 3.4 | 3.6 | 3.2 | 4.3 |
对应的体积变化(相对 A):
| 配置 | 体积 |
|---|---|
| A | 100% |
| E | 106% |
| F | 98% |
结论:
- E 组(全套)在摄影、夜景上最好,代价是 6% 体积——非常划算;
- F 组在屏录上遥遥领先(4.3 vs 2.6),而且体积还更小;
- 没有一组在所有内容上都最好——这就是为什么需要按内容分预设。
八、我最后定下的三套预设
预设 1:通用摄影/影视(默认用这个)
-c:v libx265 -crf 26 -preset slow \
-x265-params "psy-rd=2.0:psy-rdoq=1.0:aq-mode=3:aq-strength=1.1:deblock=-1:-1:no-sao=1"
预设 2:动画/线条内容
-c:v libx265 -crf 24 -preset slow \
-x265-params "psy-rd=1.5:aq-mode=4:aq-strength=1.0:deblock=-2:-2:no-sao=1"
(aq-mode=4 是边缘感知,对线条友好;CRF 稍低因为动画省码率)
预设 3:屏录/文字内容
-c:v libx265 -crf 22 -preset slow \
-pix_fmt yuv420p \
-x265-params "psy-rd=0:psy-rdoq=0:aq-mode=4:deblock=-1:-1:no-sao=1"
关键就是 psy-rd=0(文字清晰度),配 aq-mode=4(边缘感知)。
H.264 版本(兼容性要求高时)
-c:v libx264 -crf 22 -preset slow \
-x264-params "psy-rd=1.0:aq-mode=2:deblock=-1:-1"
(x264 没有 no-sao,aq-mode 只有 0~3。)
我把这三套写成了脚本里的常量,按内容的 SI/TI 分类自动选择(跟前面 ABR 那篇的复杂度分类是同一套)。
九、VMAF 与主观不一致时听谁的
实验里反复出现一个现象:主观变好,VMAF 反而降。这不是 bug,是必然的。
| 现象 | 原因 |
|---|---|
| psy-rd 提高 → VMAF 略降,主观变好 | psy 产生的"伪细节"在 VMAF 看来是误差 |
| 关 SAO → VMAF 略降,主观变好 | SAO 的平滑让重构更"接近原图的低频",但人眼想要高频 |
| deblock 减弱 → VMAF 略升 | 保留边缘确实更接近原图 |
怎么处理:
- 用 VMAF 筛掉"明显不合格"的(分数差 2 分以上,一定是客观劣化);
- 1~2 分以内的差异,用主观判断(抽帧对比、盲评);
- 建立自己的"主观-参数"对照表(就是上面那张实验结果表),以后同类型内容直接套用,不用每次都重测。
我的实际流程:
新类型内容
→ 跑 6 组参数(半小时)
→ VMAF 筛掉明显差的
→ 剩下 2~3 组抽帧盲评(10 分钟)
→ 定下这类的预设,记进文档
一次投入,之后所有同类内容直接受益。我到现在积累了 5 类预设(摄影、动画、屏录、夜景、老片),覆盖了 90% 的素材。
十、坑清单
- 只调 CRF 和 preset → 忽略了影响最大的第二层参数。
- 盲目照抄别人的 psy-rd/aq 参数 → 对屏录来说 psy-rd=2 是灾难。
- 用 VMAF 作为唯一标准 → psy-rd 和 no-sao 会让 VMAF 略降但主观变好。两者都要看。
- 一个人评价主观画质 → 个人偏好偏差大。找 2~3 人盲评(不知道哪组是哪组)。
- 不对比原图 → 主观评价要"和原图比",不是"单独看好不好看"。
- 参数改太多 → 一次改 5 个参数,不知道哪个起作用。一次只改 1~2 个。
- 在低分辨率/小窗口下评价 → 一定要 100% 放大看(细节差异在小窗口下看不出来)。
- 不看码率变化 → 有些参数提升质量但体积涨 20%,要算账。
- x264 和 x265 的参数名混用 → x265 有
psy-rdoq、no-sao、aq-mode=4,x264 没有。 - 用了太新的 x265 特性(如 aq-mode=4)→ 老版本不认识,会报错或者静默忽略。检查版本。
no-sao写法错误 → 是no-sao=1,不是sao=0(后者某些版本不认)。- deblock 负值在低码率下出块效应 → 高码率才用负值。
- 不做记录 → 调完就忘了,下次又从头来。把结论写进文档。
- 用"感觉"而不是盲评 → 知道自己调了什么之后,评价会带偏见。盲评很重要。
- 忽略了不同内容的差异 → 没有一个"万能参数组合"。至少分 3 类。
最后说说这次实验最大的收获。
编码参数的调优,本质上是在跟"编码器的默认审美"讨价还价。 编码器的默认值是面向"平均内容 + 客观指标"优化的,而你有具体的内容和具体的审美需求——这两者经常不一致。
第二层参数(psy-rd、aq、deblock、sao)就是让你表达"我要什么"的接口。它们不像 CRF 那样有明显的"多/少"方向,而是表达偏好:
psy-rd高 = "我要细节感,哪怕不太准确";aq-mode=3= "暗部重要,多给点码率";deblock负 = "我要锐利边缘,块效应我可以忍";no-sao= "别给我涂抹,我要纹理"。
知道每个参数在表达什么偏好,比记住具体数值重要得多。 数值可以按内容微调,但偏好方向搞反了(比如给屏录开 psy-rd),再怎么调数值都是错的。
最后一条实操建议:把实验结果做成一张表贴在文档里(就是第七节那张)。半年后遇到新素材,看一眼表就知道该用哪套——不用重新做实验,也不用凭记忆猜。我们团队现在谁都能按表选参数,不用每次都问我,这就是把个人经验变成团队资产的最低成本方式。