目录

  1. 视频为什么要编解码
  2. 视频是否可以压缩
  3. 编解码实现原理
  4. 编解码标准和国际组织
  5. 视频文件封装(容器)
  6. 视频质量评价体系
1.为什么视频要编解码?

未经过压缩的视频数据量非常大,存储困难,同时也不便于在网络中传输。

以数字电视一秒钟的数据量为例,观看一秒钟数字电视需要等待9秒钟。

数据量约1113KB,如果按照1M传输带宽计算,比特率是9123840,大约需要9秒钟

如何定义智能编解码(编解码学习分享)(1)

IPhone6 16G手机,最多只能存储50秒视频。

拍摄10秒钟视频,未经压缩的数据量是2.4G,16G的IPhone6除去系统占用的部分,剩下的存储空间最多是12G

如何定义智能编解码(编解码学习分享)(2)

要解决视频存储难、传输难的问题,综合考虑软硬件成本,最有效的办法应该是压缩视频体积!

2.视频是否可以压缩?

答案是肯定的,因为原始视频包含大量的冗余信息,比如:人的视觉系统有一些先天的特性,对某些细节不敏感。所以从理论上分析,基于人的视觉特性去掉视频冗余信息既可以保证视频质量又可以压缩视频体积。除此之外视频还有很多其他冗余信息可以去除,接下来我们详细介绍一下视频冗余信息。

视频冗余信息

原始视频至少存在5个方面的信息冗余:空间冗余、时间冗余、编码冗余、视觉冗余、知识冗余,接下来详细讲解一下这5个方面的冗余。

空间冗余:图像相邻像素之间有较强的相关性

由图可知,在颜色接近的色块区域,相邻像素是非常接近的有较强的相关性,这部分信息其实是冗余的,下文将的条、块编码就是去除这种空间冗余数据。

如何定义智能编解码(编解码学习分享)(3)

时间冗余:视频序列的相邻图像之间内容相似

视频一般由时间轴区间内一组连续画面组成,其中的相邻帧往往包含相同的背景和移动物体,只不过移动物体所在的空间位置略有不同,所以后一帧的数据与前一帧的数据有许多共同的地方,这就称为时间冗余。 如下图所示,或许只有人的嘴巴和手在动,其他大部分的像素都是没有变化的。

如何定义智能编解码(编解码学习分享)(4)

编码冗余:不同像素值出现的概率不同

先介绍一下等长编码和变长编码的概念

等长码:在一组码字集合C中的所有码字cm (m = 1,2, …,M),其码长都相同,则称这组码C为等长码。

变长码:若码字集合C中的所有码字cm (m = 1,2, …,M),其码长不都相同,称码C为变长码。

【例】设待压缩的数据文件共有100个字符,这些字符均取自字符集C={a,b,c,d,e,f},分别使用等长、变长编码方案对比优劣。

等长编码方案

等长编码需要三位二进制数字来表示六个字符,因此,整个文件的编码长度为300bits。

变长编码方案

变长编码方案将采用Huffman编码,通过码字出现的频率高低构造一个Huffman树,频度高的字符编码设置短,将频度低的字符编码设置较长。

如何定义智能编解码(编解码学习分享)(5)

根据计算公式:451 133 123 163 9*4 584=224 整个文件被编码为224bits,比定长编码方式节约了约25%的存储空间。

由此可知,在图像编码中,不同的像素值出现的概率不同,采用定长编码相对变长编码需要更多的存储空间,这一部分冗余就称之为编码冗余。

了解更多Huffman编码

视觉冗余:人的视觉系统对某些细节不敏感

在介绍视觉冗余之前先来介绍一下人类视觉系统(Human Visual System,简称HVS)的几个特性:

  1. 对亮度的变化敏感,对色度的变化相对不敏感。
  2. 对静止图像敏感,对运动图像相对不敏感。
  3. 对图像的水平线条和竖直线条敏感,对斜线相对不敏感。
  4. 对整体结构敏感,对内部细节相对不敏感。
  5. 对低频信号敏感,对高频信号相对不敏感(如:对边沿或者突变附近的细节不敏感)。

由于人类视觉系统的先天特性,原始图像中有一些数据是人眼感知不到的,在图像压缩过程中可以去掉,在图像恢复后不会影响图像的主观质量,这部分数据就是视觉冗余。例如,人类视觉的一般分辨能力为2的6次方(64)灰度等级,而一般的图像的量化采用的是2的8次方(256)灰度等级,即存在视觉冗余。

了解更多人类视觉系统

知识冗余:规律性的结构可由先验知识和背景知识得到

有许多图像的理解与某些基础知识有相当大的相关性。 例如:人脸的图像有固定的结构,嘴的上方有鼻子。鼻子的上方有眼睛,鼻子位于正脸图像的中线上等等。这类规律 性的结构可由先验知识相背景知识得到,我们称此类冗余为知识冗余。

3.编解码实现原理PBI帧

视频中每帧代表一幅静止的图像,而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。简单地说,I帧是关键帧,属于帧内压缩。就是和AVI的压缩是一样的。 P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。

I帧

I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成,因为包含完整画面。

P帧

P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据。

B帧

B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。

如何定义智能编解码(编解码学习分享)(6)

码流层次结构

视频的二进制码流有一个固定的组织结构,从上到下层依次是:序列层、图像组层、图像层、条带层、宏块层、块层。

如何定义智能编解码(编解码学习分享)(7)

序列编码

如何定义智能编解码(编解码学习分享)(8)

序列:一段连续编码的并具有相同参数的视频图像。 序列起始码:专有的一段比特串,标识一个序列的压缩数据的开始MPEG-2的序列起始码为十六进制数000001(B3)。 序列头:记录序列信息档次(Profile),级别(Level),宽度,高度,是否是逐行序列,帧率等。 序列结束码:专有的一段比特串,标识该序列的压缩数据的结束,MPEG-2的序列结束码为十六进制数000001(B7)。

图像组编码

如何定义智能编解码(编解码学习分享)(9)

图像编码

图像分块编码

如何定义智能编解码(编解码学习分享)(10)

条带编码

如何定义智能编解码(编解码学习分享)(11)

宏块编码

如何定义智能编解码(编解码学习分享)(12)

块编码

视频编解码主要流程和关键技术

如何定义智能编解码(编解码学习分享)(13)

预测

通过时间预测、空间预测技术,去除视频中存在的时间冗余和空间冗余,达到压缩的目的。

空间预测

利用图像空间相邻像素的相关性来预测的方法,关键技术是帧内预测技术和Intra图像编码(I帧)

帧内预测:利用当前编码块周围已经重构出来的像素预测当前块

时间预测

利用时间上相邻图像的相关性来预测的方法,关键技术是帧间预测和Inter图像编码。

帧间预测:运动估计(Motion Estimation,ME),运动补偿(Motion Compensation,MC)

运动估计:

如何定义智能编解码(编解码学习分享)(14)

搜索算法:

运动补偿:

Inter图像编码:

前向预测编码图像(P帧)

双向预测编码图像(B帧)

如何定义智能编解码(编解码学习分享)(15)

变换

变换编码的目的

视频编码中常见的变换类型有:K-L变换、傅里叶变换、余弦变换、小波变换。

变换原理

我们以傅立叶变换为例子来讲述一下变换的实现原理。关于傅立叶变换,可以用果汁牛奶打一个比方:

如何定义智能编解码(编解码学习分享)(16)

所谓“变换”,就是换个领域看问题(A Change Of Perspective),将某种情况下不易分析处理的领域换成易分析处理的领域。

接下来用一张gif图来展示一下傅立叶变换的过程

如何定义智能编解码(编解码学习分享)(17)

从上图可以看出:

傅立叶变换只是分离信号方法中的一种(靠频率分离),由此可以想到傅立叶变换的一些应用有:

了解更多傅里叶变换

DCT变换

DCT(Discrete Cosine Transform),又叫离散余弦变换,是与傅里叶变换相关的一种变换,类似于离散傅里叶变换,但是只使用实数,经常用于信号和图像数据的压缩。经过DCT变换后的数据能量非常集中,一般只有左上角的数值是非零的,也就是能量都集中在离散余弦变换后的直流和低频部分。能量集中是DCT最显著的特征,如下图:

如何定义智能编解码(编解码学习分享)(18)

,