1、H264
H264 是 MPEG-4 标准所定义的最新编码格式,同时也是技术含量最高、代表最新技术水平的视频编码格式之一,标准写法应该是H.264
H264 视频格式是经过有损压缩的,但在技术上尽可能做的降低存储体积下获得较好图像质量和低带宽图像快速传输。
H264压缩技术主要采用了以下几种方法对视频数据进行压缩。包括:
- 帧内预测压缩,解决的是空域数据冗余问题。
- 帧间预测压缩(运动估计与补偿),解决的是时域数据冗余问题。
- 整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化。
经过压缩后的帧分为:I帧,P帧和B帧,除此之外,还有图像序列GOP。
GOP:两个I帧之间是一个图像序列,主要用作形容一个 I 帧 到下一个 I 帧之间的间隔了多少个帧,一个序列的第一个图像是 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。
增大GOP图片组能有效的减少编码后的视频体积,但是也会降低视频质量;
GOP 越长,B 帧所占比例更高,编码性能要求也越高。
帧:帧内编码帧 intra picture,关键帧,I 帧通常是每个 GOP的第一个帧,进行帧内预测压缩,作为P/B帧的参考帧。
I帧的特点如下:
它是一个全帧压缩编码帧。
它将全帧图像信息进行JPEG压缩编码及传输,解码时仅用I帧的数据就可重构完整图像;
I帧描述了图像背景和运动主体的详情;
I帧不需要参考其他画面而生成;
I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
I帧不需要考虑运动矢量;
I帧所占数据的信息量比较大。
P帧:前向预测编码帧 predictive-frame,主要进行帧间编码,参考前面的I/P帧,去除时间冗余信息,P帧没有完整画面数据,只有与前面I/P的画面差别的数据。解码时需要用之前缓存I/P帧叠加上本帧的差异数据,生成最终画面
P帧的特点如下:
P帧是I帧后面相隔1~2帧的编码帧;
P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);
解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;
P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;
P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;
由于P帧是参考帧,它可能造成解码错误的扩散;
由于是差值传送,P帧的压缩比较高。
B帧:双向预测帧 bi-directional interpolated prediction frame,考虑前面的I/P帧以及后面的P帧之间的时间冗余信息来压缩传输数据量的编码图像;要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU消耗多些。
B帧特点如下:
B帧是由前面的I或P帧和后面的P帧来进行预测的;
B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;
B帧是双向预测编码帧;
B帧压缩比最高,因为它只反映参考帧间运动主体的变化情况,预测比较准确;
B帧不是参考帧,不会造成解码错误的扩散。
可以参考的链接有:
音视频开发之旅(56) -H264/AVC基本结构
H264基本原理
2、M-JPEG
就压缩率来说,H.264远远优于M-JPEG,H.264的压缩比一般能达到1:50甚至1:100以上,而M-JPEG压缩比一般小于1:20;同时由于高压缩率,经H.264压缩出的图像数据量远远小于M-JPEG,更利于实时传输,占用网络带宽更少。
在图像质量方面:由于M-JPEG压缩率较小,所以能达到跟原图像接近的画质和清晰度。而H.264为了满足高压缩率,所以在图像质量上略有损失。
总结:两种压缩方式的选择最主要还是在于使用场景,合理选用。若实时性要求较高,则h.264更适合,因为数据量较小,便于传输;若对实时性要求不是很高,能接受大数据量的图像,且对图像质量要求更高的话,可考虑M-JPEG方式。
可以参考的链接有:
M-JPEG和H.264压缩性能比较(V4L2采集+编码压缩)
3、HEVC
H.265又称为HEVC(全称High Efficiency Video Coding,高效率视频编码,本文统称为H.265),是ITU-T H.264/MPEG-4 AVC标准的继任者。2004年开始由ISO/IEC Moving Picture Experts Group(MPEG)和ITU-T Video Coding Experts Group(VCEG)作为ISO/IEC 23008-2 MPEG-H Part 2或称作ITU-T H.265开始制定。第一版的HEVC/H.265视频压缩标准在2013年4月13日被接受为国际电信联盟(ITU-T)的正式标准。
理论上H.265比H.264效率提高30-50%(尤其是在更高的分辨率情形下),但真的这么简单吗?
H.265的改变:
H.265重新利用了H.264中定义的很多概念。两者都是基于块的视频编码技术,所以它们有着相同的根源,和相近的编码方式,包括:
1、以宏块来细分图片,并最终以块来细分。
2、使用帧内压缩技术减少空间冗余。
3、使用帧内压缩技术减少时间冗余(运动估计和补偿)。
4、使用转换和量化来进行残留数据压缩。
5、使用熵编码减少残留和运动矢量传输和信号发送中的最后冗余。
可以参考的链接有:
H.265(HEVC)深度解析