1.首先看下什么是视频
连续的静态图像就是视频,连续的图像变化每秒超过24帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的画面叫做视频。
2.为什么要进行视频编码
视频信号数字化的占用带宽和存储很高,按照一个像素(YUV/RGB表示法各占8bit),需要达到20MB/秒以上,采用压缩技术通常数据带宽降到1-10MB/秒,这样就可以将视频信号网络传输占用的带宽和保存在计算机中占用的存储大幅的降低。
刚才提到人眼系统(HVS),人眼系统HVS的特点:
- 对高频信息不敏感
- 对高对比度更敏感
- 对亮度信息比色度信息更敏感
- 对运动的信息更敏感
因此数字视频系统的设计就是考虑到HVS的特点: - 丢弃高频信息,只编码低频信息
- 提高边缘信息的主观质量
- 降低色度的解析度
- 对感兴趣区域(Region of Interesting,ROI)进行特殊处理
上面提到的具体信息就可以作为编解码压缩的依据,目的就是去除冗余信息,几种冗余信息
-空间冗余:图像相邻像素之间有较强的相关性
-时间冗余:视频序列的相邻图像之间内容相似
-编码冗余:不同像素值出现的概率不同
-视觉冗余:人的视觉系统对某些细节不敏感
-知识冗余:规律性的结构可由先验知识和背景知识得到
而编解码技术的原理流程就是依据去除这些冗余信息,流程如下
3.视频编码技术
所谓视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另一种视频格式文件的方式。
视频流传输中最为重要的编解码标准有国际电联的H.261、H.263、H.264,H265,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,当然还有Google公司的VP8,VP9系列,11年后公安1所推出的SVAC也是视频编码技术。
几大编解码技术体系
MPEG系列
(由ISO下属的MPEG[运动图象专家组]开发)
视频编码方面主要是Mpeg1(vcd用的就是它)、Mpeg2(DVD使用)、Mpeg4(的DVDRIP使用的都是它的变种,如:divx,xvid等)、Mpeg4 AVC
音频编码方面主要是MPEG Audio Layer 1/2、MPEG Audio Layer 3(大名鼎鼎的mp3)、MPEG-2 AAC 、MPEG-4、AAC等等。注意:DVD音频没有采用Mpeg的。
H.26X系列
(由ITU[国际电传视讯联盟]主导,侧重网络传输,注意:只是视频编码)
包括H.261、H.262、H.263、H.263+、H.263++、H.264(就是MPEG4 AVC-合作的结晶)
4.编解码与文件格式的区别
常见的文件格式有mp4,avi,常见的视频编解码有Mpeg4,H.264,H.265,由于很容易弄混他们之间的关系,这把里通过文件和编码数据比喻成一本书来讲解。
一本书有目录和索引(哪个章节在哪一页),每个章节里才是相应的作者表达的内容,目录和索引可以看成是文件,而章节内容可以看成是编码数据
我们在播放媒体文件时,可以来回拖动到任意位置,也是这个原理,就是因为文件格式中有了对于时间索引信息的表述,而直接使用编码数据中是没有的
5.常用的是视频术语
分辨率
大家通常所说的1080P,720P就是指的分辨率,它决定了位图图像细节的精细程度。 通常情况下,图像的分辨率越高,所包含的像素就越多,图像就越清晰。当然,它也会增加传输带宽和存储空间。
码率即比特率
也就是大家通常所说的带宽,是指每秒传送的比特(bit)数。单位为bps(Bit Per Second);比特率越高,传送数据量越大。
帧
组成视频图像的基本单位。视频文件是由多个连续的图片组成。
帧频 (frame rate)
是指每秒钟放映或显示的帧或图像的数量。帧频主要用于电影、电视或视频的同步音频和图像中。帧频是指每秒播放多少帧动画,最多每秒120帧。
上面提到过,由于人眼暂留原理,连续播放的单幅静态图像,人眼就会觉的是动态的画面。其实是一种视觉的欺骗。所以大家看到的视频都是一帧帧静态图像组成的。
I帧/P帧/B帧
I帧(I frame) 又称为内部画面 (intra picture),I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图像。它是帧间压缩编码里的重要帧;它是一个全帧压缩的编码帧;解码时仅用I帧的数据就可重构完整图像;I帧不需要参考其他画面而生成。
P帧
P帧法是根据本帧与相邻的前一帧(I帧或P帧)的不同点来压缩本帧数据。 采取P帧和I帧联合压缩的方法可达到更高的压缩且无明显的压缩痕迹。
P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差)
P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧。
P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧。
由于P帧是参考帧,它可能造成解码错误的扩散。
由于是差值传送,P帧的压缩比较高。
B帧
是双向预测的帧间压缩算法。当把一帧压缩成B帧时,它根据相邻的前一帧、本帧以及后一帧数据的不同点来压缩本帧,也即仅记录本帧与前后帧的差值。只有采用B帧压缩才能达到200:1的高压缩。虽然B帧压缩率最高,但是由于需要参考前后帧才能进行编码和解码,因此在编码侧和解码侧需要缓存一定时间的帧,才能进行解码,因此会导致播放延迟较大。在实时通讯和监控领域,一般不使用B帧。
很明显的,I帧压缩效率最低,P帧较高,B帧最高。
I帧间隔
顾名思义,两个I帧之间的时间间隔,一般以间隔多少帧来标识。比如帧频25f/s,I帧间隔50帧,两个I帧就是2S的间隔。I帧间隔设置大,一旦出现网络传输丢包,会导致画面无法刷新,长时间影响画面质量;而且在录像回放,拖动播放中,会出现不能随意拖动。但是设置过短则会导致压缩率变小,从而导致传输和存储的字节都过大。一般IPC中默认设置为50帧。
SPS和PPS关键帧
Sequence Parameter Sets (SPS) 和Picture Parameter Set (PPS),里面包括编码所用的profile,level,图像的宽和高,deblock滤波器等重要参数,就是说除了信令中协商携带的信息外,也可以依据码流的信息来进行适合图像Profile Level,分辨率,码率速率等信息。
SEI帧补充增强信息
Supplemental Enhancement Information,是码流范畴里面的概念,提供了向视频码流中加入信息的办法,是H.264/H.265 视频压缩标准的特性之一。SEI 有基本的特征: - 并不是解码过程的必须项;
- 可能对解码过程(容错、纠错)有帮助;
- 集成在视频码流中;由于协议中并没有规定SEI 中可以添加哪些信息,用户场景可以任意扩展
不过基于上述特征,在视频传输过程、解封装、解码环节,都可能因为某种原因丢弃SEI ,因此SEI帧信息经过视频处理后就会被丢弃的。