视频编解码优化以及与AI的实践结合

RealNetworks是流媒体类别的发明者,改变了音频和视频内容在各种设备和全世界消费的方式。在编解码市场的大环境下,RealNetworks推出了新一代的视频压缩算法RMHD,专为下一代的高清流媒体业务所设计。本文将从视频编解码优化以及与AI的实践结合两方面来为大家介绍RealNetworks在这部分所做的工作。

文 / 况超

整理/ LiveVideoStack

大家好,我是RealNetworks的况超,本次演讲的主题是视频编解码优化以及与AI的实践结合,虽然我不是AI技术的专家,但在做视频编解码的后期也会用到一些AI的技术,所以也会与大家一起分享这部分的内容。

本次演讲主要由背景与需求、RMHD简介、RMHD优化以及与AI结合和总结展望四部分组成。

1. 背景需求

首先大家需要了解,视频压缩是一种非常重要的技术,随着时代的演进,产品不断更新,新的应用不断出现,在此期间用户的需求和要求也必定会越来越高,这些因素都会促使视频压缩技术的迭代,以求适应市场需求。

做上层应用或产品的公司在产品定义或开发过程中,经常面临的一个问题是选择适合自己的编解码标准,视频服务商的共同目标是在现有的网络和编码工具基础上将视频质量提高到极致,让用户体验更好,用户群增长更快,但在视频质量提高的同时更需要考虑降低包括存储、编码时间、算力和带宽等因素在内的总成本。所以编解码器是需要在综合考虑码率节省、编码速度、码率波动和版权税等诸多因素之后才能做出选择。编解码工作的展开就是围绕在开发一个适合自己的视频压缩技术或使用既有编解码技术之间做选择,工作内容需要在其中找到一个最佳的平衡状态,也就是在画质、码率和性能之间做平衡。

2. RMHD简介

在编解码市场的大环境下,RealNetworks推出了自己的视频压缩算法RMHD,即RealMedia HD。RealMedia HD专为下一代的高清流媒体业务所设计,能够极大地维持视频质量和文件大小之间的平衡,即在现有的网络环境中,也可以帮助运营商和制造商普及高清内容的服务和相关产品。

2.1 RealNetworks

RealNetworks是流媒体类别的发明者,改变了音频和视频内容在各种设备和全世界消费的方式。目前以数字媒体专业知识和创新为基础创造了新一代产品,采用最新的人工智能和机器学习来增强和保护我们的日常生活。编解码技术是不断演进的,从早期的RV8到RV9,再到后来的RV10(RMVB)以及目前主推的RV11(RMHD),本次演讲的内容也主要围绕RMHD展开。

2.2 RealNetworks技术发展路线

RealNetworks在之前的25年里都在不断地创新,部分产品由于是在海外市场使用,因此不被大家熟知。在2017年推出了新一代的编解码技术RMHD,在4K实时流媒体编解码方面实现了前所未有的效果,尤其是在画质和码率控制。

2.3 RMHD

RMHD其实是一个高清低码、低复杂度的算法集合,设计之初主要是针对流媒体产品以及软硬件实现时比较友好的私有编解码解决方案,在达到更高压缩效率的同时能够在软硬件实现更快的编码速度,复杂度也相对较低。由于低复杂性、短PBBP帧间依赖性和高压缩效率,RMHD编解码器对低延迟HLS流非常友好。同时它对CDN也是友好的,只使用标准的 HTTP / 1.1 协议就可以轻松地与P2P 解决方案集成。

2.4 RMHD的性能特性

有关RMHD性能测试的结果可以从上图中了解,在采用1080P/4K测试序列,具有八个CPU的AWS C5计算实例上对RMHD进行测试。采用VMAF作为视频质量感知的衡量指标,编码设置都是在以最慢的速度运行,并且执行二次编码。收集测试结果后从利用编码速度、画质和带宽三个维度分别与主流的Codec进行比较。

在编码速度方面,RMHD的编码速度要比HEVC和VP9更快(都是在以最慢的速度运行,并且执行二次编码)。

编码1080P,在码率大于2M时VMAF的得分RealMedia HD仅低于AV1,但高于其他Codec

对于4K分辨率,在码率大于5M时VMAF的得分RealMedia HD要高于其他Codec

在画质相同的情况下,同为1080P分辨率时,RMHD的码率较AV1之外的其他Codec小;同为4K分辨率时,RMHD的码率表现也优于其他Codec。以上是RMHD技术的性能指标,在实际应用中也有着良好的使用体验,能够在对比中占优势的结果都来源于团队背后所做的大量工作。

3. RMHD优化以及与AI结合

视频压缩技术在实际应用中,主要围绕三个维度来展开工作,首先是视频压缩算法coding tools的设计,coding tool的设计和取舍要考虑到复杂度,既兼顾软件实现的便利又兼顾硬件设计的友好。其次是复杂度的问题,优化调优编解码工具,在使用过程中及时调整不同情况下复杂度对质量的影响。这部分主要是去除实现上的冗余,一套算法在真正实现的过程中存在很多冗余,传统编码框架首先需要做预编码来决策最优编码方案,快速算法的优化对编码的质量和速度影响很大。最后是视觉质量评估系统,从视觉冗余角度来去除冗余信息,将比特调优之后再分配,优化比特利用率。

3.1 RMHD框图

RMHD的基本框图是基于传统编码框架,通过pre-encoding决策最优。在上一代RMVB基础上,新增了很多coding tool,做了大量的改进和优化。为了能够同时达到高的压缩率和更高的编解码速度(软件解决方案),coding tool的设计和取舍考虑到复杂度和应用场景。在白色块部分主要是之前提到的第一维度视频压缩算法coding tools的设计。而RDCO在团队内部被称为率失真-复杂度优化模块(滤失真复杂度优化模块),在使用过程中及时调整不同情况下复杂度对质量的影响。RC主要负责将比特调优之后再分配,优化比特利用率。

3.2 编码器速度提升

当编码工具集确定之后,在实际应用中有一些方式可以提升编解码器的速度。首先对于代码的加速,这部分不会改变画质,它只是在算法层面进行加速,在不同的赛道(平台)上运行,都会有相应的SIMD的优化(arm,x86),比如intrinsic/assembly (arm-v7/v8/neon, sse2/4,avx2),速度会有显著的提高。

其次针对架构来说,RMHD采用良好的多线程设计,以CU line为运行单元,短PBBP帧间依赖性利于并发性, 同时拥有高效的内存管理和针对性的cache优化。再者基于硬件加速,主要是利用GPU算力加速,GPU本身比较适合用于大规模、分支条件较少的的视频数据运算,比如运动估计,插值滤波。但在用GPU进行加速时需要尽可能减少数据搬移量,使用“页锁定内存”提高传输带宽,小数据合并一次传输,否则使用GPU的加速作用很小。除此之外也可以基于IntelGPU使用QuickSync Video (Core i7)的部分功能达到加速编码的目的,利用device side VME反馈的有用信息来指导RV11的整个编码流程,达到提质增速的效果。

接下来是一个重要的部分,那就是快速算法,这部分是有损的,会影响画质,其核心就是在优化复杂度,针对coding tool本身的特性,开发出一整套快速算法集合,根据实际需要选择不同的级别(档位),换挡的前提是要控制质量损失,质量损失在可接受范围内即可。RMHD内部大概有10档快速算法的级别,用户可以根据需要自适应选择相应的档位。最后一块就Lossy解码, 主要是动态侦测当前速度,使得在播放速度达标的同时可以保持视频质量。当速度有不达标的风险时,可以用多种快速算法的组合实现不同级别的有损解码,通过牺牲小部分视频质量换取播放速度的大幅上升。

3.3 GPU编码性能对比

GPU编码速度对比上如上图所示,在4K序列上,GPU加速可以在一般家用的IntelCore i7上达到接近每秒50帧的超实时转码速度,没有GPU加速时速度仅为每秒23帧。对比二者在图像细节上的表现(以480p RaceHorse为例)来看,GPU加速后画质损失也相对较小。

3.4 Lossy解码性能

对于Lossy解码性能从质量速度转换图来看,牺牲小部分质量就能够换得速度大幅提升,这可以改善在性能较差的设备上的播放体验。RealNetworks针对市面上大多数的手机和多媒体盒子做了大量的测试(画质和流畅达标率)。通过设备性能达标率的对比图可以看到,这种策略使得在同一个设备上能够顺利播放的视频更多了,更不容易出现视频卡顿现象。通过上面画质对比图,也可以看到策略开启前后,视频的主观质量没有明显的差距,左边是在正常流畅解码状态下的视频画面,右边是在不流畅时开启lossy解码功能的视频画面。

3.5 利用常规手段或AI改善编解码性能

刚刚提到RMHD编码也是基于传统编码框架,其中很多环节都要付出时间的代价,如果想要进一步提高压缩质量,就需要对编码模式有更多的划分和预测,整个遍历的代价会更大,优化的工作量也会更大。除了传统的手段之外,还可以利用AI改善编解码功能,比如利用AI做码率控制模型、CAE编码以及增强编码。

3.5.1 码率控制模型

码率控制模型如上图所示

3.5.2 码率控制

码率控制具体包括比特分配策略、码率控制模型选择和量化参数调整三个部分,关于比特分配策略,首先需要确定码率控制的目标,如VBR、CBR、CQ等,针对不同的目标采取不同的比特分配策略,VBR可以采取较大的时间缓冲区、CBR应该采取较小的时间缓冲区,以适应相应的目标。码率控制模型目前常用的有R-Q模型和R-λ模型可供选择,这里列举了Live-streaming 和 VODRMHD两个RMHD主要的应用场景,对应不同码率控制策略。量化参数调整应该结合可用的参考信息,参数的选择和利用该参数对量化参数的调整通常是最为重要的一个部分。

3.6 通过训练优化之后的RC模型

通过机器学习训练优化之后,RC模型优化前后的差别由图中所示,对于标准测试序列“Fourpeople”来说,优化幅度是0.4比特左右。

3.7 Adaptive Quantization

码控模型可以理解为一种基准的比特分配功能,但其实这样还不足以改善画质,提升比特分配的精准度,Adaptive Quantization就是对比特分配进行微调的工具,输入图像在进入编码流程之前,将会进行LCU级别的图像预分析。图像在经过LSM (Local SensitivityMeasurement) 模块和dQPM (delta QP Mapping) 模块后,每个LCU将会被动态赋予一个delta QP值,并最终影响每个LCU的编码量化系数,从而得到更优的编码效率。采用的局部感知测量方法,将主要考虑对比度屏蔽效应对于人眼主观视觉的影响,为追求更好的主观编码效率提升,后续可能会引入更多人眼屏蔽效应因子做结合。

通过训练,得到模型的最佳参数。对不同的场景,方便对模型参数调整。

3.8 基于内容的CAE编码

基于内容的CAE编码包括人脸的检测/特殊处理和场景的检测/区别处理两个方面,人脸检测利用RN自身的CV技术,能够检测画面中关键的人脸部位并进行特殊的处理,包括QP调整和增强。场景检测可以通过不同场景的信息,利用不同的训练模型得到最佳的编码配置,不同的场景采用不同的编码配置,进一步提高编码比特利用效率。

3.8.1 基于场景的动态编码的模型训练

基于场景的动态编码模型训练过程分为四步,首先对每个视频场景进行多次fix-QP编码,每次编码采用不同的分辨率和QP的组合,根据VMAF值,画出convex hull。在convex hull上,根据目标码率,找到最佳VMAF对应的分辨率和QP组合,作为神经网络的dataset的y值。之后统计每个视频场景的feature信息,比如每一帧的satd的平均值,这些feature作为神经网络的dataset的x值。最后采用4层神经网络训练准确率为0.96,而目前测试的准确率为0.9。

3.9 Playback Navigation

PlaybackNavigation 是CV与codec应用结合的播放导航功能,在编码端产生对应的CV meta data,在播放端基于对应的meta data开展应用,可以灵活选择感兴趣的片段、自动插播广告、删除某些人像等功能,SAFR技术是非codec依赖的。

上图是Playback Navigation Sever端和Client端的流程图,在Sever端数据进来之后会进行CV分析,一个产生编码数据,另一个产生CV信息,在未来RealNetworks会做更多关于AI相关的实践。

4. 总结与展望

在未来,RealNetworks会基于RMHD框架,利用AI的相关技术实施增强编码引擎(Enhancement Coding Plugin),对前处理,后处理,视频压缩等方面进行改善,助力RMHD的生态更加完善。

SAFR系统不断优化会便利和保障人们的日常生活。作为实时视频人脸识别平台,需要提供高准确度同时识别运动中人脸,以及化妆和部分遮挡,自然环境和微光下人脸,做到这一点最小只需要60x60像素即可识别面部。测试准确率99.86%, 可在100ms内快速识别实时视频中移动的人脸,比其它算法快3-5倍,在准确性和性能方面达到了最佳的效果,是一套轻量级的人脸识别系统,后续会基于CV技术继续对SAFR系统进行持续优化改进。

本文分享自微信公众号 - LiveVideoStack(livevideostack)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端桃园

发布订阅模式,在工作中它的能量超乎你的想象

其实在早期还是用jq开发的时代,有很多地方,我们都会出现发布订阅的影子,例如有trigger和on方法

10440
来自专栏安卓圈

SpringIOC

IOC:控制反转的底层原理就是:工厂模式+反射+配置文件 DI:依赖注入就是通过配置文件设置属性值

8020
来自专栏Python爬虫与算法进阶

Redis SCAN的使用

有时候需要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据,可能是修改它的值,也可能是删除 key。这里就有一个问题,如何从...

32010
来自专栏机器之心

NLP技术路线详解:这是从数学到算法的艺术

自然语言处理很多时候都是一门综合性的学问,它远远不止机器学习算法。相比图像或语音,文本的变化更加复杂,例如从预处理来看,NLP 就要求我们根据对数据的理解定制一...

8820
来自专栏安卓圈

MyBatis注解开发

指的是MyBatis中SqlSession对象的缓存,当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。

8620
来自专栏安卓圈

SSH整合

Spring的配置文件是applicationContext.xml和web.xml

5920
来自专栏墨白的Java基地

利用JS生成自己的个性二维码

二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也...

19430
来自专栏安卓圈

Hibernate文件配置

映射需要通过XML的配置文件来完成,这个配置文件尽量统一(xxx.hbm.xml) Hibernate核心的配置:必须的配置、可选的配置、映射文件的引入

9030
来自专栏along的开发之旅

hls视频的加解密示例

hls的加密采用aes-128-cbc, 关于aes-128-cbc, 请参考前文使用openssl命令加解密 aes-128-cbc的简单示例.

11920
来自专栏养码场

微信刷屏的「给我一面国旗」如果要做到,技术原理是什么?

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_auth...

12210

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励