在前两期的文件格式系列科普中,IT之家已经以JPG为典型,为大家讲解了图片格式,又以MP3为典型,为大家讲解了音频格式,今天,IT之家将为大家讲解视频的编码原理。
视觉暂留现象
人的眼睛是一个非常巧妙的成像系统,来自自然界的光经由晶状体,投射到感光细胞上,感光细胞将光转化为神经电流,通过视神经传到大脑,引起人体视觉。受制于视觉神经的反应速度,当光停止作用后,在一段时间内,图像仍将短暂地停留,称为“后像“,这便是视觉暂留现象。
正因为人的视觉系统有着这样的特性,当我们将一组动作连续的静态图片放在眼前快速切换时,人眼会感觉它“动起来了“。事实上,我们看到的视频,就是由一张又一张的静态图像组成的。
有损图像压缩
前面我们已经提到,视频是由一张又一张的静态图片组成的,要压缩视频,首先就要压缩这些组成视频的静态图像,在关于JPEG图片格式的科普中,我们已经讲解了JPEG的压缩原理,事实上,视频中的静态图片,它的压缩原理和JPEG颇为相似。
首先,就是将色彩空间由RGB转化为YCbCr,和RGB色彩空间通过红绿蓝三种颜色来组成大千世界不同,YCbCr将画面分解成明度(亮度信息)和色度(色彩信息),在YCbCr的色彩空间下,把Cb(蓝)和Cr(红)去掉,只留Y(亮度),那么图像依然可以正常显示,只是此时显示的图像是黑白的,把亮度信息和色彩信息分离所带来的好处,就是解决了彩色显示器和黑白显示器的兼容问题。
色彩空间转换完成后,就要对图像进行离散余弦变换(DCT)了,在DCT时,图像将被分割成一个个8*8的像素块,每个8*8的像素块都将通过复杂的公式转换为数字编码,随后,这些数字编码将通过一系列的处理进一步丢掉对人眼来讲并不重要的数据(人眼对高频区的辨识能力较差,这部分的数据可以酌情丢掉),经过这番折腾,原始的8*8像素块将被转化为结尾有很多连续的0的一串数字编码。这串编码经过冗余数据精简后,再进行一些处理,将生成一张经过压缩的图片。这张图片就是视频中的I帧。
运动预测
I帧,又称帧内编码帧,这是个独立帧,自带全部信息;P帧,又称帧间预测编码帧,它里面包含的是当前帧与前一帧之间的差别,在解码时,需要以之前的画面为基础,叠加上两幅画面之间的差异部分,才能生成最终的画面。B帧,又称双向预测编码帧,它不仅记录了当前帧与前一帧之间的差别,还记录了当前帧与下一帧之间的差别,B帧的压缩率通常更高,不过对解码性能的要求也更高。
P帧的生成过程,实际上就是运动预测的过程,在这个过程中,图像将被分割成一个个16*16的像素块,然后,我们将计算当前帧的这个16*16像素块的信息与下一帧中哪个16*16像素块中的信息最为相似,然后记录下它们之间的位置差别(运动预测矢量),简单地说,运动预测的过程,就是使用当前帧位于不同起始位置的16*16像素块,拼凑出下一帧的图像来。B帧的生成原理和P帧大致相同,只不过B帧是同时结合前后两帧来实现运动预测的。
图像组和视频文件
所谓的图像组,就是由I帧打头,后面跟了一系列的P帧或者B帧的图像的编组,看起来差不多是这个样子的:I,P,P,P,P,P,P,P,P,P,P,如果有B帧,则是这个样子的:I,P,B,B,P,B,B,P,B,B,P。
视频文件是由一个接着一个的图像组构成的。在播放视频时,每个图像组的第一帧必须是I帧,若第一帧不是I帧,后面的P帧或者B帧将无法被还原成正常的图像,视频也就无法正常播放了。
如果一个P帧是由某帧通过运动预测来生成的,那么这里的“某帧”就是该P帧的参考帧,关于参考帧的选择,也是有讲究的。
这里有一个图像组,I1,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,我们参考I1生成了P1,又参考了P1生成了P2,紧接着参考P2生成了P3,以此类推,最后生成了P10,由于运动预测本身就是有误差的,如果我们每一帧都参考前一帧进行运动预测,那么从P1到P10,误差会越来越大,最后生成的P10可能就面目全非了。为了避免这个问题,在选择参考帧时,我们可以这样做,P1~P10,全部参考I1来生成,或者P1~P5参考I1来生成,然后P6~P10参考P5来生成,步子迈得小一点,扯到蛋的风险自然就会降低。
到这里,视频编码基本原理的介绍就告一段落了,不同的编码标准,它具体的编码方式也不尽相同,这个需要具体标准具体分析。常见的视频编码标准有MPEG-1、MPEG-2、MPEG-3、MPEG-4、H.264等。
视频容器
如果说视频是个图书馆,那么一帧一帧的图像就是书的一页一页,一个一个的图像组,就是一本又一本的书,我们还缺少什么东西啊?书架。图书馆里没有书架怎么行?
所谓视频容器,就是将图像组,声音以及视频的附属信息(比如字幕、分辨率、作者、加密信息等)封装在一起的标准,这就正是我们要找的书架。
视频容器,又叫封装格式,提到封装格式(对应相应的文件扩展名),相信大家一定非常眼熟,举几个例子,大家感受一下:avi、rmvb、mp4、flv、mkv……
封装格式对视频质量的影响不大,决定视频质量的还是它的编码数据,就像前面举的图书馆的例子,书架不管是豪华还是简陋,只要它上面摆放的书是好书,那这个图书馆就是个好图书馆。
IT之家的用户是多层次的,这篇文章的受众是零基础的读者,本着浅显易懂的原则,在一些方面我们并没有深入讨论和展开讨论。如果你是相关行业的工作者,或者你是相关专业的高校学生,那么这篇文章可能不适合你。
好的,今天关于视频压缩原理的文章就到这里,文件格式系列科普至此完结,想了解更多的常识科普和实用教程,请关注IT之家学院。
广告声明:文内含有的对外跳转链接(包括不限于超链接、二维码、口令等形式),用于传递更多信息,节省甄选时间,结果仅供参考,IT之家所有文章均包含本声明。