3. 画质评价指标:PSNR、SSIM、VMAF,以及主观评价(MOS)的适用场景

做编码的人,天天跟「画质」打交道。但画质这东西,你说它好,我说它差,总得有个标准吧?

我入行那会儿,大家基本只看 PSNR。后来慢慢有了 SSIM,再后来 Netflix 搞出了 VMAF。到现在,这三个指标加上人工打分(MOS),基本构成了我们评价画质的全部武器库。

但说实话,每个指标都有自己的脾气。用错了地方,结果可能完全相反。今天我就把这几个指标的底细,给你掰扯清楚。

核心观点:没有完美的单一指标。客观指标(PSNR/SSIM/VMAF)用于自动化对比和回归测试,主观评价(MOS)用于最终交付验收。两者互补,缺一不可。

画质评价指标体系 画质评价 客观评价 主观评价 PSNR SSIM VMAF MOS 适用场景速览 • PSNR:适合快速回归测试、编码器对比、学术论文 • SSIM:适合评估感知结构失真,比 PSNR 更接近人眼 • VMAF:适合流媒体场景,综合多个维度,最接近主观评分

3.1 PSNR —— 最老牌,但也最「直男」

PSNR,全称 Peak Signal-to-Noise Ratio,峰值信噪比。说白了,就是算两帧图像之间像素对像素的误差有多大。

它的计算公式很简单:

MSE = (1/N) * Σ (原始像素 - 重建像素)²
PSNR = 10 * log10( (255²) / MSE )

单位是 dB。一般 30dB 以下算差,35dB 算及格,40dB 以上算不错。

我的经验:PSNR 适合做「回归测试」。比如你改了一个编码参数,跑一遍 PSNR,如果掉了 0.5dB 以上,大概率是改出问题了。但千万别拿它当唯一标准。我记得有一次,一个编码器 PSNR 高了 0.3dB,主观一看,画面全是振铃和块效应——PSNR 根本不管这些。

PSNR 的硬伤:

  • 完全不考虑人眼视觉特性。人眼对亮度敏感,对色度不敏感;对平坦区域敏感,对纹理区域不敏感。PSNR 一视同仁。
  • 对平移、旋转、亮度偏移极度敏感。画面整体调亮 5%,PSNR 可能掉 2dB,但人眼根本看不出来。
  • 跨内容对比没有意义。一个动画片的 35dB 和一个体育直播的 35dB,主观感受可能天差地别。

什么时候用 PSNR?

  • 编码器开发阶段的快速验证
  • 大量序列的自动化对比(比如跑 100 个序列取平均)
  • 学术论文中作为基准指标

3.2 SSIM —— 更懂人眼,但也不是万能

SSIM,Structural Similarity Index,结构相似性。它不比较像素绝对值,而是比较亮度、对比度、结构三个维度。

我打个比方:PSNR 像是一个严格的监考老师,你写错一个标点都扣分;SSIM 像是一个语文老师,更关注你的文章结构是否通顺。

SSIM 的取值范围是 0 到 1。0.9 以上算不错,0.95 以上算很好,0.98 以上基本看不出差异。

关键区别:SSIM 对模糊、块效应、振铃等常见编码失真更敏感,但对色度偏移、整体亮度变化仍然不够敏感。我在项目中遇到过,SSIM 高达 0.97 的画面,观众反馈「颜色不对」——因为 SSIM 主要看亮度结构,色度权重太低。

SSIM 的变种:

  • MS-SSIM:多尺度 SSIM,在不同分辨率下计算,更稳定。我个人习惯用这个替代普通 SSIM。
  • CW-SSIM:复小波域 SSIM,对平移和旋转更鲁棒,适合图像检索场景。

什么时候用 SSIM?

  • 评估编码器对纹理和边缘的保留能力
  • 对比不同编码参数对结构失真的影响
  • 作为 PSNR 的补充,两者一起看

3.3 VMAF —— Netflix 的「王牌」,但别迷信

VMAF,Video Multi-Method Assessment Fusion。Netflix 开源的综合画质评价模型。

它的思路很聪明:把多个基础指标(视觉保真度、细节丢失、时域一致性等)用机器学习模型融合起来,输出一个 0-100 的分数。

90 分以上:接近原始画质,几乎看不出差异。
80-90 分:有轻微失真,但可接受。
70-80 分:明显失真,但还能看。
70 分以下:画质较差,建议重新编码。

注意:VMAF 模型是用特定数据集训练出来的。如果你处理的视频内容(比如游戏录屏、监控视频、医学影像)跟训练集差异很大,VMAF 的分数可能不准。我曾经在一个游戏直播项目中,VMAF 分数一直偏低,但主观看起来完全没问题——后来发现是模型对高动态范围内容的偏见。

VMAF 的优势:

  • 最接近主观评价的客观指标
  • 同时考虑空间失真和时域失真(抖动、闪烁)
  • 支持自定义模型,可以针对特定内容微调

VMAF 的局限:

  • 计算量大,不适合实时场景
  • 对超高分辨率(4K 以上)和 HDR 内容支持有限
  • 模型版本不同(v0.6.1、v1.0、v2.0),结果不可直接对比

我的建议:在流媒体场景下,把 VMAF 作为主要客观指标,PSNR 和 SSIM 作为辅助。但最终上线前,一定要做主观评价。

3.4 MOS —— 最贵,但也最靠谱

MOS,Mean Opinion Score,平均意见分。找一群人来打分,取平均值。

标准做法是 ITU-R BT.500 和 ITU-T P.910,规定了观看环境、显示器校准、评分尺度、异常值剔除等细节。

评分尺度一般是 1-5 分:

分数 质量等级 描述
5 优秀 看不出任何失真
4 良好 有失真但不影响观看
3 一般 明显失真,但还能接受
2 较差 失真严重,影响观看
1 极差 完全无法接受

MOS 的痛点:

  • 贵。一次正规的主观测试,场地、设备、人员、时间,几万块打底。
  • 慢。从准备到出结果,一两周算快的。
  • 不稳定。不同人群、不同显示器、不同环境,结果可能差异很大。

我的经验:MOS 不是用来「日常调试」的,而是用来「最终验收」的。比如你要上线一个新的编码方案,先用 VMAF 筛选出几个候选参数,然后只对这几个候选做 MOS 测试。这样既省钱又高效。

3.5 实战中怎么选?

我给你一个我自己的决策流程:

  1. 日常开发调试:用 PSNR + SSIM 组合。PSNR 看整体误差,SSIM 看结构失真。两个指标同时下降,基本可以确认有问题。
  2. 参数对比和优化:用 VMAF。跑一遍 BD-Rate 曲线,看 VMAF 分数随码率的变化趋势。VMAF 提升 1 分,往往比 PSNR 提升 0.2dB 更有意义。
  3. 最终交付验收:做 MOS 测试。找 15-20 个人,选 3-5 个典型片段,在标准环境下观看打分。MOS 4.0 以上算合格,4.5 以上算优秀。

避坑指南:我曾经在一个项目中,只靠 VMAF 选参数,结果上线后被用户投诉「画面模糊」。后来发现 VMAF 对时域抖动不敏感,而那个参数恰好引入了轻微的帧间闪烁。从那以后,我坚持在 VMAF 之外,至少用 SSIM 和 PSNR 做交叉验证。

最后说一句:指标是工具,不是目的。你的目标是让观众看得舒服,而不是让 PSNR 跑到 45dB。工具用对了,事半功倍;用错了,事倍功半。