h264码流结构解析

参考:超详细的h264码流结构解析!

一 GOP

通常一个H264码流中包含了多个GOP(图像组),每一个GOP里面包含多个视频编码帧,如下图所示。GOP(Group of Pictures)图像组的意思。H264码流对GOP的划分是两个邻近关键帧(IDR帧)之间的图像为一个GOP,包含前面的IDR帧,不包含后面的IDR帧,包含第一个IDR帧后面的所有P帧和B帧;如下图GOP图像包含了5个图像编码帧,一个IDR帧和两个P帧,两个B帧。GOP又分为开放(open)GOP和闭合(close)GOP;open GOP是指当前GOP中的P帧和B帧能将前一个GOP的图像作为参考帧,并且open gop中不存在IDR帧,会有I帧(下面会介绍),假设下图是open GOP的情况,序号为6的P帧能参考序号为0的IDR帧(此时应该叫I帧)或者序号为6的P帧参考序号为1和4的P帧。close GOP是指当前GOP中的P帧和B帧不能将前一个GOP的图像作为参考帧,若下图是close GOP的情况序号为6的P帧不能参考序号为0的IDR帧,也不能参考序号为1和4的P帧,他只能参考序号为5的IDR帧。
h264码流结构解析_第1张图片

一个GOP包含了一个IDR帧和多个P帧或B帧。这里在介绍下H264的编码帧类型:

IDR帧:Instantaneous Decoding Refresh,即时解码刷新帧;也叫关键帧 。同时IDR帧也是I帧(帧内编码帧);IDR帧编码上采用帧内编码技术,即IDR帧的编码和解码不需要参考其他视频帧,只对图像做空间上冗余的压缩编码;解码过程遇到IDR帧会重新解析计算解码参数,并清空之前的解码信息,可以防止前面GOP内的错误延续到当前GOP。
I帧:帧内(Intraframe)压缩编码帧;帧内压缩过程,主要是通过空间上邻近像素相似的特点来解决空间冗余(当前编码块/像素和周围块/像素存在相似或者相同就是空间冗余)的一个编码方法,比如常见的jpeg图像就是通过帧内编码压缩的图像。I帧不一定是IDR帧(关键帧),IDR帧一定是I帧/关键帧;I帧解码不会像P帧B帧那样需要依赖前面或者后面视频帧图像,所以I帧可以单独一帧来解码;I帧和IDR帧最大的区别在于解码过程是否会清空之前的解码信息(IDR帧会清空之前的解码信息,I帧则不会)。
P帧:前向参考编码帧,通常采用帧间和帧内混合的编码方式。通常当前视频图像和前一帧视频图像有着相似和差异的内容,去除相似的内容,保留差异的值进行编码,就可以消除图像时间上的冗余;解码需要依赖参考帧,等参考帧解码完成后才能解码P帧。
B帧:双向参考编码帧,就是需要参考前面一帧图像也需要参考后面的一帧的图像;和P帧类似,B帧通常也采用帧间和帧内混合的编码方式;不同的地方是P帧是和前一帧的差异做编码,B帧不仅仅和前一帧差异做编码,也和后面一帧的差异进行编码;B帧解码需要依赖前后的参考帧,等前后参考帧解码全部完成后才能解码B帧。

P帧和B帧在编码的过程也可以采用帧内编码的模式,B帧和P帧主要靠帧间编码来提示压缩率的。

你可能感兴趣的:(ffmpeg,绘图,音视频)