音视频生产关键指标:视频质量优化丨音视频工业实战

随着音视频内容日趋成为主要的内容消费载体,用户们对视频清晰度画质的要求也在不断提高,我们在这里把视频清晰度、画质都统称为视频质量,来聊一聊如何对其进行优化。

1、视频质量评估标准

要对视频质量进行优化,首先需要确定评估视频质量的标准,用来评价视频质量的标准通常有以下几种:

  • PSNR,Peak Signal to Noise Ratio,峰值信噪比。是一个表示讯号最大可能功率和影响它表示精度的破坏性噪声功率的比值的工程术语。由于许多讯号都有非常宽的动态范围,峰值信噪比常用对数分贝单位来表示。PSNR 是最广泛使用的评价图像质量的客观标准,不过许多实验结果都显示,PSNR 的分数无法和人眼看到的视觉品质完全一致,有可能 PSNR 较高者看起来反而比 PSNR 较低者差。这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化,例如:人眼对空间频率较低的对比差异敏感度较高,人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响。
  • SSIM,Structural Similarity,结构相似性。是一种衡量两幅图像相似度的指标。SSIM 使用的两张图像中,一张为未经压缩的无损图像,另一张为压缩后的有损图像,二者的结构相似性可以看成是有损图像的图像质量衡量指标。相较于传统所使用的图像质量衡量指标(如 PSNR),SSIM 在图像质量的衡量上更能符合人眼对图像质量的判断。
  • VMAF,Visual Multimethod Assessment Fusion,视频质量多方法评价融合。这项技术是由美国 Netflix 公司开发的客观的全参考视频质量指标。它根据参考和失真的视频序列预测主观视频质量。该指标可用于评估不同视频编码器、编码设置或传输变体的质量。于 2016 年 1 月开源,项目地址:https://github.com/Netflix/vmaf。
  • MOS,Mean Opinion Score,平均意见分。是一种主观评估视频质量并给出打分的方式。主观评估,顾名思义就是人参与的人工评估,视频主观质量评价就是选择一批非专家类型的受测者,让他们参加一些培训,然后在一个特定的受控环境中,连续观看一系列的测试序列大约 10 至 30 分钟,然后采用不同方法让他们对视频序列的质量进行评分,最后求得平均意见分,并对所得数据进行分析。测试环境中的受控因素包括:观看距离、观测环境、测试序列的选择、序列的显示时间间隔等。

下图是以上各种视频质量评估标准的具体参数:

图片
几种视频质量评估标准

可以看到视频质量评估分为主观评估方式(如 MOS)和客观评估方式(如 PSNR、SSIM、VMAF)。通常主观质量评估方式依赖人眼观看并打分,这种得到的分数比较精确,但是很耗时间和人力,不方便大规模部署。所以在工程上比较通用的还是客观评估方式。

在安装相关插件后,我们可以通过 FFmpeg 来使用 PSNR、SSIM、VMAF 这几种评估标准,相关命令如下:

// PSNR
ffmpeg -i src.mp4  -i dst.mp4 -lavfi psnr="stats_file=psnr1.log" -f null -

// SSIM
ffmpeg -i src.mp4 -i dst.mp4 -lavfi ssim=stats_file=ssim_logfile.txt -f null -

// VMAF
ffmpeg -i src.mp4  -i dst.mp4 -filter_complex libvmaf -f null -

2、编码优化

通过上面的描述我们基本了解了视频质量的评价标准以及评估方法,如果要提升视频质量,我们还需要了解一下视频的基本属性,以及这些属性可以在多大程度上影响视频的质量。

我们首先使用 MediaInfo 来查看一下视频的属性:

图片
视频属性

我们可以把视频看作在一组经过编码后的图像序列,所以影响视频最终呈现质量的最关键的因素有编码质量画面质量。我们先来看看编码方面的优化。

2.1、选择合适的视频码率

视频码率是指存储单位时间视频需要的数据大小,单位是 kbps,码率越大,单位时间填充的数据就越多,通常视频质量就越高。

但是码率并不是越大就越好,码率设置超过一定的大小,对视频画质的提升已不太明显,肉眼已经看不出区别,但是视频大小会增加很多。所以设置合适的码率就行。

得物视频清晰度优化一文中给出过一种码率设置方式是:

Bitrate = width * height * frameRate * factor
factor = 0.15

但上面这种计算方法也不是万能的,对于同一分辨率同一帧率的视频,当画面较为复杂时,则需要加大码率因子。更精准的方法则是通过抽帧进行图片识别,根据画面的复杂度配置不同码率。比如,腾讯云在如何实现好画质[1]的文档中就根据不同游戏的画面复杂情况给出过码率和分辨率设置的推荐:

  • 皇室战争:这类画面变化幅度不大的游戏,推荐选择 960 * 540 的分辨率,800kbps-1000kbps 的码率就可以输出不错的效果。
  • 捕鱼达人:这类画面变化幅度较大的游戏,推荐选择 960 * 540 的分辨率,码率相对要高一点,例如 1200kbps-1500kbps
  • 神庙逃跑:这类画面变化幅度超大的游戏,推荐选择 640 * 360 的分辨率,码率也要很大,例如 2000kbps,否则妥妥的满屏马赛克。

针对具体的情况,我们可以测试手机的编码质量来选择指定分辨率、帧率时对应的码率甜点

在这种测试中我们一般需要分场景进行,比如:

  • 外景拍摄,低运动
  • 外景拍摄,中等运动
  • 外景拍摄,高运动
  • 人像拍摄,低运动
  • 人像拍摄,中等运动
  • 人像拍摄,高运动

测试指标我们可以采用上面提过的 PSNR、SSIM、VMAF 进行综合考量。

比如,我们可以测试 iOS 硬编,使用 540P,15 帧推流时,设置不同的码率(800kbps-1300kbps)分别测试各场景下的各指标值,找出 R-D(码率-失真)曲线拐点出现的区间,这就是我们要找的码率甜点

在测试 iOS 硬编时需要注意的是:可以不采用 PSNR 指标来参考,原因是 iOS 硬编自带前处理模块对亮度分量进行了大幅修改。

下面是一组粗略的测试结果示例:

  • iOS 硬编 540P,15 帧推流:800kbps-1000kbps 码率为高性价比区间,1000kbps 以上性价比不高,R-D(码率-失真)曲线拐点多数出现在 900kbps 和 1000kbps。
  • iOS 硬编 720P,15 帧推流:整体来看没有出现太明显的 R-D(码率-失真)曲线的拐点,质量随码率提升相对均匀,1100kbps 到 1300kbps 区间性价比稍高。

2.2、选择合适的码率分配模式

码率分配模式是指在对视频进行编码时如何针对画面情况来进行码率的分配。码率分配模式一般有 CBR、VBR、ABR、CRF 等几种方式,他们的特点和适用性如下:

  • CBR:Constant Bitrate,固定比特率。
    • 以恒定比特率方式进行编码,有运动发生时,由于码率恒定,只能通过增大 QP 来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。
    • CBR 编码的缺点在于编码内容的质量不稳定,容易产生马赛克。因为对于某些较复杂的图像比较难压缩,所以 CBR 流的某些部分质量就比其他部分差。CBR 编码这种算法优先考虑码率(带宽),适合在流式播放中应用。
  • VBR:Variable Bitrate,动态比特率。
    • 比特分配根据图像内容的复杂度进行。如果图像细节较丰富或者含有大量的运动,则给其分配多一点码率,若图像比较平坦,就给其分配较少的码率。
    • VBR 编码既保证了质量,又兼顾带宽限制。这种算法适合图像内容变化幅度较大的情况,适合的应用场景是媒体存储,但由于码率不均衡不适合网络传输。
  • ABR:Average Bitrate,平均比特率,是 VBR 的一种插值参数。
    • ABR 是在 CBR 和 VBR 两者之间的一种权衡,即设定一段时间的平均码率,在此时间内,对简单、静态的图像分配低于平均码率的码率,对于复杂的、大量运动的图像分配高于平均码率的码流。
    • ABR 由于码率分配较为均衡,比较适合网络传输。
  • CRF:Constant Rate Factor,恒定码率系数。
    • 把某一个视觉质量作为输出目标。通过降低那些耗费码率但是又难以用肉眼察觉的帧(高速运动或者纹理丰富)的质量提升那些静态帧的码率来达到此目的。

2.3、设置 B 帧优化码率

视频由 I、P、B 帧三种类型的视频帧组成的,P 帧是前向预测图像帧,P 帧大小相当于 I 帧大小的 1/10 ~ 1/20。B 帧是双向预测图像帧,B 帧大小约是 I 帧大小的 1/50。

这样一来,如果设置了 B 帧了,并不会降低清晰度,但是可以大大降低视频的大小,这样我们就有更大的操作空间来调高码率,实现提升清晰度的目标。设置 B 帧的缺点是双向预测会带来一些延迟。

2.4、调整 GOP 长度优化码率

GOP 表示两个 I 帧之间的图像帧序列,GOP = 2s,表示两个 I 帧之间的间隔是 2s。

上面我们提到了:P 帧大小相当于 I 帧大小的 1/10 ~ 1/20,B 帧大小约是 I 帧大小的 1/50。

也就是说,由于 I 帧较大,当设置 GOP 长度越长时,I 帧就较少,占用码率就越少,这样我们也可以获得更多的空间来相应地调大码率提升清晰度。目前在短视频场景很多视频的 GOP 长度已经设置到了 10s 左右,当然 GOP 太长也有缺点,比如在直播场景会增大延迟。

2.5、选择合适的 Profile

H.264 有四种画质级别,分别是 BaselineExtendedMainHigh

  • Baseline Profile:基本画质。支持 I/P 帧,只支持无交错(Progressive)和 CAVLC
  • Extended Profile:进阶画质。支持 I/P/B/SP/SI 帧,只支持无交错(Progressive)和 CAVLC
  • Main Profile:主流画质。提供 I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),也支持 CAVLC 和 CABAC
  • High Profile:高级画质。在 Main Profile 的基础上增加了 8x8 内部预测、自定义量化、无损视频编码和更多的 YUV 格式。

BaselineExtendedMain 都是针对 8 位样本数据、YUV 4:2:0 格式的视频序列。在相同配置情况下,High Profile 可以比 Main Profile 降低 10% 的码率。根据应用领域的不同,Baseline Profile 多应用于实时通信领域,Main ProfileHigh Profile 多应用于流媒体领域。

所以我们可以根据编码器的情况和应用场景,尽量选择更高的 Profile 来优化码率使用效率,从而达到用同样的码率编码出更好画质的目的。

2.6、尽量使用 HEVC 编码

比起 H.264/AVC,H.265/HEVC 提供了更多不同的工具来降低码率。以编码单位来说,最小的 8x8 到最大的 64x64。信息量不多的区域划分的宏块较大,编码后的码字较少,而细节多的地方划分的宏块就相应的小和多一些,编码后的码字较多,这样就相当于对图像进行了有重点的编码,从而降低了整体的码率,编码效率就相应提高了。同时,H.265 的帧内预测模式支持 33 种方向(H.264只支持 8 种),并且提供了更好的运动补偿处理和矢量预测方法。HEVC 对比 H.264 可降低 30% 以上码率:

图片
H.265 与 H.264 码率对比表

通过尽量使用 HEVC 编码,也能够为我们创造更多的空间来提高码率优化画面。使用 HEVC 编码,可以保证在不增加文件大小的情况下,大大提升视频的清晰度。

2.7、合理使用软编和硬编优化编码

软编码相对于硬件编码画质更好,设备适配更好,但性能较差。

  • 硬件编解码:是非 CPU 通过烧写运行视频加速功能对高清视频流进行编解码,其中非 CPU 可包括GPU、FPGA 或者 ASIC 等独立硬件模块,把 CPU 高使用率的视频解码工作从 CPU 里分离出来,降低 CPU 的使用负荷,使得平台能高效且流畅的执行视频的编解码动作。
    • 优点是可分离出音视频编解码的工作,无需占用 CPU 资源,功耗低。
    • 缺点是兼容性相对于软编码较差,大量画面输出补偿及画质增强等技术方面有一定欠缺,导致画质不如软编码。
  • 软件编解码:指视频等信号直接通过 CPU 进行编解码。如此而来,会增加 CPU 的工作负荷,提升功耗。
    • 优点是编码器更易于开发,协议兼容度高,可以进行 ROI 编码(针对人脸分配更高码率等)。拥有大量画面输出补偿及画质增强的技术,画质优于硬件编解码。
    • 缺点是对 CPU 的性能要求较高,CPU 的负担较重。

基于软编码硬件编码的对比,对于性能要求不高的场景更适合软件编码,例如短视频录制(具体还要参考 APP 业务);性能要求较高的场景则选择硬件编码。

3、画质增强

除了上面讲到的在编码质量上的优化,我们还可以从画质方面入手优化视频质量。

3.1、锐化

图像锐化是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。

常用的图像锐化的方法有:

  • USM(Unsharpen Mask)锐化:图像卷积处理实现锐化常用的算法,这种锐化的方法就是对原图像先做一个高斯模糊,然后用原来的图像减去一个系数乘以高斯模糊之后的图像,然后再把值 Scale 到 0~255 的 RGB 像素值范围之内。基于 USM 锐化的方法可以去除一些细小的干扰细节和噪声,比一般直接使用卷积锐化算子得到的图像锐化结果更加真实可信。
  • 拉普拉斯(Laplace)锐化:拉普拉斯算子是一个在图像增强中经常出现的二阶微分算子。拉普拉斯锐化依据的是图像某个像素的周围像素到此像素的突变程度。运用拉普拉斯可以增强图像的细节,找到图像的边缘,但是有时候会把噪音也给增强了,可以在锐化前对图像进行平滑处理。
  • 高通滤波:采用高通滤波器让高频分量通过,使图像的边缘和线条变得清楚,实现锐化。

3.2、降噪

图像降噪的方式有很多中,最常见的是对图像做滤波:

  • 均值滤波(Mean Filter):均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围 8 个像素,构成一个滤波模板,即包括目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
  • 高斯滤波(Gauss Filter):高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
  • 中值滤波(Medium Filter):中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
  • 双边滤波(Bilateral Filter):双边滤波本质是基于高斯滤波,目的结合图像的空间邻近度和像素值相似度来解决高斯滤波造成的边缘模糊的一种滤波算法,同时考虑空域信息和灰度相似性,达到保边去噪的目的。具有简单、非迭代、局部的特点。
  • 导向滤波(Guided Filter):导向滤波通过输入一副图像(矩阵)作为导向图,这样滤波器就知道什么地方是边缘,这样就可以更好的保护边缘,最终达到在滤波的同时,保持边缘细节。所以有个说法是导向滤波是各向异性的滤波器,而高斯滤波、双边滤波这些是各向同性滤波器,我觉得也是很贴切。

此外还有诸如:时域降噪算法、基于统计模型的降噪、基于深度学习的降噪等等,这里就不细讲了。

3.3、防抖

对视频做防抖也能在一定程度优化画质,防抖技术有这些:

  • 传统电子防抖:通过分析前后帧画面的变化,建立特征点,反求出在拍摄时的手机运动,之后再通过反求出来的运动轨迹反向补偿达到稳定画面的目的。
  • 光学防抖:利用手机中已经有的陀螺仪进行手机运动姿态的采集,然后通过马达驱动单个镜头或者整个镜组移动来补偿运动。
  • 陀螺仪电子防抖:不再通过识别画面来反求运动信息,而是直接从陀螺仪数据读取数据。
  • 光学 + 电子混合防抖:同时采用光学和电子防抖对图像进行稳定。
  • 微云台防抖:vivo X50 Pro 机型采用该方案。和 OIS 仅移动镜组不同的是,微云台移动的是整个相机模组。
  • 传感器防抖:传感器位移式光学图像防抖。既然镜头更重了,那么就不移动镜头,转而去移动重量更轻的传感器。这样就有可能在更小的体积内实现类似于浮动镜组方案的光学防抖效果。

现在很多采集设备是从硬件和系统层面支持防抖技术的,一般来讲我们只需要开启设备的防抖即可。

3.4、超分

超分,即超分辨率,是指通过机器学习地方式重建图像,达成提升图像分辨率的效果。

目前比较成熟的超分技术是 Real-ESRGAN,基于 BasicSR,采用 ESRGAN 算法,利用机器学习的优势对图片和视频进行去模糊、Resize、降噪、锐化等处理,重建图片,实现对图片的超分辨率处理。

在生产端,一般可以直接设置高分辨率,所以超分的实现一般可以做在服务端或观看端。尤其是观看端,如果设备性能跟得上,可以在不增加带宽消耗的情况下通过超分提升画质。

3.5、对焦优化

对焦优化是视频质量优化中比较容易忽略的一个点,但是如果对焦不合理又会对视频清晰度造成很大的影响。下面是可供参考的一套对焦策略:

  • 手动对焦:用户点击哪里就对焦哪里。
  • 自动对焦:
    • 基于系统能力在识别场景发生变化后,进行一次中心对焦。
    • 如果有识别到画面从无人脸到有人脸时,做一次人脸对焦(这里是只做一次人脸对焦,不能一直跟着人脸对焦,这样可以防止用户不想对焦人脸的场景:在有人脸时,点击了其他地方进行手动对焦)。
    • 人脸对焦时,一般对焦两眼中间的眉心点位效果比较好。
  • 手动对焦后,在满足这些条件时会切换到自动对焦:
    • 前后摄像头切换。
    • 场景发生较大切换。比如,相机位移或晃动较大,外部光线敏感度变化较大等。
    • 画面中从无人脸变为有人脸。

3.6、颜色优化

通过调整视频画面的颜色参数,综合调整亮度、对比度、色温、饱和度、锐度等颜色参数,进而优化整体的视频画面,让视频画面看上去更舒适,这也是提升用户主观观看感受的一种方式。

尤其是当 HDR 视频逐渐流行,而一些旧设备不支持 HDR 时,还需要正确的实现 HDR 视频向 SDR 视频的转换来解决色差问题从而提升用户的观看感受。

3.7、模糊检测

在图像或视频采集的过程中可能由于镜头不干净、对焦不准等因素导致采集的图像模糊,这时候可以做一下模糊检测来提醒用户清洗镜头或做好对焦,从而尽可能排查外部因素导致的图像源模糊的情况。

小结

以上便是对视频质量优化的一些思路,我从编码质量和画面质量等方面给出了一些技术和策略上的优化建议,希望对大家有帮助。

参考资料

[1]如何实现好的画质: https://cloud.tencent.com/document/product/454/7955

来源:公众号——关键帧Keyframe

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论