零基础,史上最通俗视频编码技术入门( 四 )


是的,所谓编码算法,就是寻找规律,构建模型 。谁能找到更精准的规律,建立更高效的模型,谁就是厉害的算法 。
通常来说,视频里面的冗余信息包括:

零基础,史上最通俗视频编码技术入门

文章插图
 

零基础,史上最通俗视频编码技术入门

文章插图
 
视频编码技术优先消除的目标,就是空间冗余和时间冗余 。
接下来,就和大家介绍一下,究竟是采用什么样的办法,才能干掉它们 。以下内容稍微有点高能,不过我相信大家耐心一些还是可以看懂的 。
5.2 视频编码技术的实现方法
视频是由不同的帧画面连续播放形成的 。
这些帧,主要分为三类,分别是:
1)I帧;
2)B帧;
3)P帧 。
I帧:是自带全部信息的独立帧,是最完整的画面(占用的空间最大),无需参考其它图像便可独立进行解码 。视频序列中的第一个帧,始终都是I帧 。
P帧:“帧间预测编码帧”,需要参考前面的I帧和/或P帧的不同部分,才能进行编码 。P帧对前面的P和I参考帧有依赖性 。但是,P帧压缩率比较高,占用的空间较小 。
零基础,史上最通俗视频编码技术入门

文章插图
 
▲ P帧
B帧:“双向预测编码帧”,以前帧后帧作为参考帧 。不仅参考前面,还参考后面的帧,所以,它的压缩率最高,可以达到200:1 。不过,因为依赖后面的帧,所以不适合实时传输(例如视频会议) 。
零基础,史上最通俗视频编码技术入门

文章插图
 
▲ B帧
通过对帧的分类处理,可以大幅压缩视频的大小 。毕竟,要处理的对象,大幅减少了(从整个图像,变成图像中的一个区域) 。
零基础,史上最通俗视频编码技术入门

文章插图
 
如果从视频码流中抓一个包,也可以看到I帧的信息,如下:
零基础,史上最通俗视频编码技术入门

文章插图
 
我们来通过一个例子看一下 。
这有两个帧:
零基础,史上最通俗视频编码技术入门

文章插图
 
好像是一样的?
不对,我做个GIF动图,就能看出来,是不一样的:
零基础,史上最通俗视频编码技术入门

文章插图
 
人在动,背景是没有在动的 。
第一帧是I帧,第二帧是P帧 。两个帧之间的差值,就是如下:
零基础,史上最通俗视频编码技术入门

文章插图
 
也就是说,图中的部分像素,进行了移动 。移动轨迹如下:
零基础,史上最通俗视频编码技术入门

文章插图
 
这个,就是运动估计和补偿 。
零基础,史上最通俗视频编码技术入门

文章插图
 
当然了,如果总是按照像素来算,数据量会比较大,所以,一般都是把图像切割为不同的“块(Block)”或“宏块(macroBlock)”,对它们进行计算 。一个宏块一般为16像素×16像素 。
零基础,史上最通俗视频编码技术入门

文章插图
 
▲ 将图片切割为宏块
好了,我来梳理一下 。
对I帧的处理,是采用帧内编码方式,只利用本帧图像内的空间相关性 。对P帧的处理,采用帧间编码(前向运动估计),同时利用空间和时间上的相关性 。简单来说,采用运动补偿(motion compensation)算法来去掉冗余信息 。
零基础,史上最通俗视频编码技术入门

文章插图
 
需要特别注意,I帧(帧内编码),虽然只有空间相关性,但整个编码过程也不简单 。
零基础,史上最通俗视频编码技术入门

文章插图
 
如上图所示,整个帧内编码,还要经过DCT(离散余弦变换)、量化、编码等多个过程 。限于篇幅,加之较为复杂,今天就放弃解释了 。
那么,视频经过编码解码之后,如何衡量和评价编解码的效果呢?
一般来说,分为客观评价和主观评价 。客观评价,就是拿数字来说话 。例如计算“信噪比/峰值信噪比” 。
零基础,史上最通俗视频编码技术入门

文章插图
 
信噪比的计算,我就不介绍了,丢个公式,有空可以自己慢慢研究...


推荐阅读