H.264/AVC视频编解码技术详解
课时介绍
各位观众朋友们,大家好。今天我们继续学习 H.264 视频编码技术。在前面,我们已经实现了 H.264 格式的 NLUnit,用于 H.264 视频传输的基本数据单元的提取和解析。在接下来进行每一个 NLUnit 的语法元素的解析之前,我们需要了解 H.264 中一个非常重要的概念,就是熵编码。
熵编码是一个比较复杂的部分,我们需要分几次来研究。今天,我们先看一下熵编码的最基本概念和一些基础知识。首先,我们来看一下什么是熵以及什么是熵编码。所谓熵这个概念,原本是来自于化学和热力学中,用于度量能量退化的指标。也就是说,如果熵越高,那么这个物体或者这个系统的可做工能力变得越低。后来,信息论的奠基人香农将熵的这一概念引入到信息论中,用它来表示消息的平均信息量。信源的熵通常可以用来表示这个信源所发出信息的不确定性,也就是说,越是随机的、前后不相关的信息,那么它的熵就越高。
在信息论中,香农提出了一个很重要的概念,叫做信源编码定理。这个定理说明了香农熵与信源符号概率之间的关系。这一概念说明了信息的熵为信源的无损编码后平均码字长度的下限。任何的无损编码方法都不可能使编码后的每一个码源的平均码长小于香农熵,只可能尽量地与这个香农熵的值接近。
下面,我们来看两幅图。这两幅图可以大致的表明信息或者物体系统的混乱程度与信息的熵之间的关系。左边的图有红球和蓝球,右边的图也是有红球和蓝球。如果我们想用信息来表示这两对球,我们该怎么表示呢?首先,这两对球相似的地方都是有 4、5 或 20 个球是整整齐齐排列的。不同的是,它们的颜色混乱度是不同的。左边的 20 个球,它们的红球和蓝球的排列是不规律的,而右边则是非常规律的,上半部分是红球,下半部分是蓝球。那么,我们想表示这些球的关系所付出的代价其实也是不一样的。比如,如果我们要表示左边这堆比较混乱的球,那么我们必须要说明,第一行球前面两个是红色,其余是蓝色;第二行球第一个和第四个是红色,其余是蓝色;第三行球二、三是红球,其余是蓝色的;第四行球只有第二个是蓝色的,其余是红色的。这种方式表达这堆球的关系相对来说是非常繁琐的。由于它们之间的排列关系并没有什么规律,它进行改进和压缩的空间也不是特别大。而如果我们要表示右边这 20 个球的时候,我们就可以用非常简洁的语言表示,也就是说,20 个球分成了四排,上面的 10 个是红球,下面的 10 个是蓝球。这样,就可以非常清楚地表示右边这些球的关系。
因此,从这两堆球中,我们也可以大致地看出一个规律,就是像这些混乱度比较高的数据或者信源,它们的排列和它们所表达的信息更难于被压缩。同样,这些混乱度比较高的球,它们的熵也更高。而右边这些球,它们的排列是非常规律的,因此它们的熵就比较低。所以,也可以用比较少量的信息来表示这些球的关系。通过这种方式,我们就可以大致地理解熵编码的一些基本原理。熵编码的基本思想是,使信源的前后码字之间的关系尽量随机,减少其前后相关性,使其更加接近于信源的熵。基于这种思想,通常情况下用的比较多的熵编码算法有两种,分别是变长编码和算术编码。其中,变长编码的代表算法有哈夫曼编码和自适应算术编码等等。变长编码的特点是,它的运算复杂度和编码效率都比较低,通常用于计算资源比较吃紧,但对压缩的效率要求不是特别高的场合。
课程介绍
H.264/AVC是目前业界应用为广泛的视频压缩编码标准,包含了先进而且较为成熟的视频编码技术。本课程将从原理、标准和实现等多个角度,详细讲述了H.264/AVC视频编码标准的整体架构与技术细节,不但讲解了H.264/AVC标准协议文档中的内容,还通过实际的H.264码流分析/解码程序的开发来帮助观众更深入地理解H.264编码标准的原理。
推荐课程
信息系统项目管理师自考笔记
李明 · 513人在学
python从0到1:期货量化交易系统(CTP实战,高频及合成K线数据
王先生 · 20610人在学
手把手搭建Java超市管理系统【附源码】(毕设)
汤小洋 · 4050人在学
Java毕设springboot外卖点餐系统 毕业设计毕设源码 使用教
黄菊华 · 732人在学
基于SSM酒店管理系统(毕设)
小尼老师 · 786人在学
java项目实战之购物商城(java毕业设计)
Long · 5073人在学
手把手搭建Java求职招聘系统【附源码】(毕设)
汤小洋 · 1459人在学
Python Django 深度学习 小程序
钟翔 · 2235人在学
城管局门前三包管理系统+微信小程序(vue+springboot)
赖国荣 · 497人在学
Vue+Uni-app(uniapp)入门与实战+赠送仿美团点餐小程序
李杰 · 3843人在学