提示

返回博客列表

同样的 CRF 和 preset,为什么画质差一截:psy-rd、aq-mode、deblock 与 SAO 的调优实验

有次看客户给的样片,参数和我用的几乎一样(同样 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 之外还有什么

编码器参数可以分成三层:

层级 参数 影响
第一层(人人都会调) -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%

结论:

  1. E 组(全套)在摄影、夜景上最好,代价是 6% 体积——非常划算;
  2. F 组在屏录上遥遥领先(4.3 vs 2.6),而且体积还更小;
  3. 没有一组在所有内容上都最好——这就是为什么需要按内容分预设。

八、我最后定下的三套预设

预设 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 略升 保留边缘确实更接近原图

怎么处理:

  1. 用 VMAF 筛掉"明显不合格"的(分数差 2 分以上,一定是客观劣化);
  2. 1~2 分以内的差异,用主观判断(抽帧对比、盲评);
  3. 建立自己的"主观-参数"对照表(就是上面那张实验结果表),以后同类型内容直接套用,不用每次都重测。

我的实际流程:

新类型内容
  → 跑 6 组参数(半小时)
  → VMAF 筛掉明显差的
  → 剩下 2~3 组抽帧盲评(10 分钟)
  → 定下这类的预设,记进文档

一次投入,之后所有同类内容直接受益。我到现在积累了 5 类预设(摄影、动画、屏录、夜景、老片),覆盖了 90% 的素材。

十、坑清单

  1. 只调 CRF 和 preset → 忽略了影响最大的第二层参数。
  2. 盲目照抄别人的 psy-rd/aq 参数 → 对屏录来说 psy-rd=2 是灾难。
  3. 用 VMAF 作为唯一标准 → psy-rd 和 no-sao 会让 VMAF 略降但主观变好。两者都要看。
  4. 一个人评价主观画质 → 个人偏好偏差大。找 2~3 人盲评(不知道哪组是哪组)。
  5. 不对比原图 → 主观评价要"和原图比",不是"单独看好不好看"。
  6. 参数改太多 → 一次改 5 个参数,不知道哪个起作用。一次只改 1~2 个。
  7. 在低分辨率/小窗口下评价 → 一定要 100% 放大看(细节差异在小窗口下看不出来)。
  8. 不看码率变化 → 有些参数提升质量但体积涨 20%,要算账。
  9. x264 和 x265 的参数名混用 → x265 有 psy-rdoq、no-sao、aq-mode=4,x264 没有。
  10. 用了太新的 x265 特性(如 aq-mode=4)→ 老版本不认识,会报错或者静默忽略。检查版本。
  11. no-sao 写法错误 → 是 no-sao=1,不是 sao=0(后者某些版本不认)。
  12. deblock 负值在低码率下出块效应 → 高码率才用负值。
  13. 不做记录 → 调完就忘了,下次又从头来。把结论写进文档。
  14. 用"感觉"而不是盲评 → 知道自己调了什么之后,评价会带偏见。盲评很重要。
  15. 忽略了不同内容的差异 → 没有一个"万能参数组合"。至少分 3 类。

最后说说这次实验最大的收获。

编码参数的调优,本质上是在跟"编码器的默认审美"讨价还价。 编码器的默认值是面向"平均内容 + 客观指标"优化的,而你有具体的内容和具体的审美需求——这两者经常不一致。

第二层参数(psy-rd、aq、deblock、sao)就是让你表达"我要什么"的接口。它们不像 CRF 那样有明显的"多/少"方向,而是表达偏好:

  • psy-rd 高 = "我要细节感,哪怕不太准确";
  • aq-mode=3 = "暗部重要,多给点码率";
  • deblock 负 = "我要锐利边缘,块效应我可以忍";
  • no-sao = "别给我涂抹,我要纹理"。

知道每个参数在表达什么偏好,比记住具体数值重要得多。 数值可以按内容微调,但偏好方向搞反了(比如给屏录开 psy-rd),再怎么调数值都是错的。

最后一条实操建议:把实验结果做成一张表贴在文档里(就是第七节那张)。半年后遇到新素材,看一眼表就知道该用哪套——不用重新做实验,也不用凭记忆猜。我们团队现在谁都能按表选参数,不用每次都问我,这就是把个人经验变成团队资产的最低成本方式。

想亲手试试?用 VidDown 一键解析下载

粘贴视频链接即可解析,多平台支持、网页端即用;下载桌面客户端解锁海外平台本地解析,开通会员更享不限次下载。

顶部