对视频编解码结构的理解

视频编解码系统浅析——以HEVC框架为例

  • HEVC系列编解码器思路
    • HEVC框架
    • HEVC结构框图
  • 后记
  • Ref

HEVC系列编解码器思路

在大厂的音视频算法领域摸爬滚打了一年,老东家leader和同事都很nice。但由于自身某些原因选择了换部门。近日尘埃落定,恰好身边朋友(其实是女朋友)在攻读这方面(虽然只是有一点点点点沾边),写一点自己独有的思考,也算是一年的技术总结。

HEVC框架

总的来说视频编解码系统有很多,今天只说软件编解码。我认为可以分为传统方法和NN(神经网络)方法,但是由于在音视频领域,尤其是实时音视频在目前很难应用NN。像YouTube这种云播平台是用的NN那就另外一回事了。那传统方法呢?其实我们自己也可以搭建一个简单的系统:视频编码无非是在图像编码的基础上增加了时间信息。而对时间信息的简单利用方式即利用帧间信息。那么就很容易咯,我们可以利用图片编码算法,如jpeg, bmp等算法对每一帧图像进行编码,记此结果为大写I。在编第i+1帧的时候与第i帧进行对比(比如做差),把差别(记为di)作为第i+1帧的编码结果。那么最终的视频码流(即对视频编码后的数据二进制文件)的总大小=I+d1+d2+…+dn。这种算法我们可以叫他视频编码算法v1.0。

其实HEVC在我看来也是这样的套路或者是流程,先对第一帧(官称I帧)进行编码,再对与前一帧区别不大的第i帧(官称P帧)编码。对P帧的编码就用到了P帧与其前1帧或前几帧的差别。当然,针对I帧和P帧,H.264/H.265/SCC(Screen Content Coding)这三种协议又有所区别,总的来说算是逐渐进步。

想说下编码时间效率和空间效率,但是想了想这可能算是敏感信息。只能说HEVC很强大。有兴趣的同学可以试下,SCC的编码空间效率大概能比H.265高一倍,H.265的空间效率大概又比H.264高两三倍,H.264又比咱们刚刚提出的编码v1.0高一百多倍……时间效率方面,SCC略低于H.265(大概100M视频在几到几十ms级),H.265稍低于H.264(大概100M视频在百毫秒级),编码v1.0比SCC/H.265/H.264大概慢一百多倍……至于视频的视觉效果方面,抛除ROI(region of interest)或其他后处理,SCC比H.265好很多,H.265又比H.264好很多,但是编码v1.0比SCC丝毫不差。给这四种算法打个分数,编码v1.0和SCC并列99分(扣一分怕他们骄傲),H.265能有80分,H.264可能也就60分(一句话,能看)。

刚刚一直在说编码,是因为就目前技术而言解码实在没什么好说的,无非是编码的反变换而已。

看到这里,相信你已经对视频编解码系统有了一个简单的了解。简单解释一下各个指标的结论。SCC在H.265协议的基础上针对桌面视频做的特性优化,在细节上提出了五个新的算法;而H.265是对H.264的演进版本。因此H.265可以是说在牺牲了一定编码时间(即增大了编码复杂度)的条件下减少了码率(编码后数据量)但是提升了画质。而SCC又牺牲了一点编码时间而减少了码率,又提升了一些画质。但是总得来讲,H.264/H.265/SCC都是有损编码(这个概念指的是损失一定的画面质量减少码率),用的是DCT(离散余弦变换)和量化。至于画面质量上,也就SCC能和咱们的v1.0比,因为v1.0里用的图像编码算法清晰度都还不错。

HEVC结构框图

而整体结构上H.264/H.265/SCC这三种协议差不多。为了不迷失在不必要的技术细节里,只看基本结构。放H.264和SCC的框图看下就很明显。

对视频编解码结构的理解_第1张图片

对视频编解码结构的理解_第2张图片
看第二张SCC的结构图相对清晰一些。流程上是1. 对帧分块;2. 变换、量化;3. 反量化、反变换后做预测和估计得到帧内参考(就是图里标出来的reference frame);4. 利用此帧内参考和原帧图像比较差异(简单理解为做差)后再过一次变换、量化。其中3、4两个步骤会循环几次,直到不再有进一步收益时送入CABAC编码得到bitstream。

在这张图里帧内和帧间信息(就是那个Hash-bsaed block matching & motion estimation)基本已经得到了充分利用。当然比较两图差异,SCC又提出了Palette Coding等快速算法,暂时可以忽略忽略(不要迷失在技术细节里面啊……)

后记

其实里面有意思的东西挺多的,比如B帧(反向参考帧)之类的概念也没有提。HEVC另外很大一部分工作还体现在网络相关,比如RTP/RTCP协议也没有讲。甚至更细节的如何对帧内信息和帧间信息充分利用,非常有趣的预测、估计等算法的实现。还有相对独立但是极其重要的后处理算法。等等。这些在工作中都能感觉到很牛逼的东西只好以后慢慢逐一讲述。

毕竟只是工作一年,见识有限。有理解错误或不到位的地方欢迎斧正。

另:后续有时间的话会打算开一个音视频编解码讨论组,有兴趣的可以私聊啊~

Ref

[1] The H.264/AVC Advanced Video Coding Standard: Overview and Introduction to the Fidelity Range Extensions
[2] Overview of the Emerging HEVC Screen Content Coding Extension

你可能感兴趣的:(音视频算法)