3. H264知识点总结一

介绍

本文介绍下h264的基本知识,宏块,宏块查找,帧内压缩,帧间压缩,GOP ,I帧,B帧,P帧等,这些知识点对于做音视频开发的同学是非常重要的,其中有一些地方我直接给出了结论,因为不知道如何推导,还是从网上的资料复制结论下来,有些觉得记住结论就好了。



一、H264介绍

什么是H264

H.264是一种先进的视频压缩标准,它通过高效的压缩算法和先进的编码技术,实现了高压缩率和高质量视频的同时,满足了各种应用场景中对视频传输和存储的需求(这是百度到的一句话)

H264压缩比

结论:H264的压缩比为1%
举例:在格式为YUV420的情况下,分辨率为640x480,帧率为15,每秒传输640x480x15x1.5x8 = 55296000 bit = 55.296 Mbps,因此至少需要55Mb/s。但是H264的建议码流为500kpbs,因此可见H264的压缩率为1%

这边给出一个链接,是建议码流的参考地址,该数值不是通过严谨的公式推导,而是各大厂经验值的总结
建议码流参考地址


GOP

GOP是视频编码中的一个重要概念,代表着"Group of Pictures",即一组连续的视频帧。GOP是按照相关性进行分组,这里放一张慕课网上找到的图表示下这个意思:如下图在这里插入图片描述
其中小火人拿着望远镜的一组图片就是一个GOP,敲电脑的就是另一个GOP。也可以打出一个结论GOP一组图片中,帧与帧的区别不大。

I帧,B帧,P帧

在GOP中,存在3种帧,下面介绍这3种帧:

  1. I帧(intraframe frame)
    关键帧,采用帧内压缩技术。IDR帧属于I帧。视频中最关键的一些帧,这些帧缺失了,视频将无法播放。GOP中的第一帧一般是IDR帧。但是I帧并不一定是IDR帧。

  2. P帧(forward Predicted frame)
    向前参考帧。压缩时,只参考前面已经处理的帧,采用帧间压缩技术。它占I帧的一半大小

  3. B帧(Bidirectionally predicted frame)
    双向参考帧。压缩时,既参考前面已经处理的帧,也参考后面的帧,帧间压缩技术。它占I帧1/4 大小。

这里有几个总结的点也希望大家记住:

  1. P帧通常确实占据了I帧的一半数量左右。这是因为P帧只存储了与参考帧的差异信息,而不是完整的图像信息,因此它们通常可以更有效地压缩视频数据
  2. B帧约占I帧的1/4,b帧占用cpu是非常高的
  3. B帧与B帧是不参考的,这个很忘记。
    4)在大部分的实时通讯(在线教育,音视频会议)中只使用了I帧P帧,不使用B帧,因为B帧非常消耗CPU,而实时通讯需要快速的播放。

I帧与IDR帧的区别

  1. IDR(Instantaneous Decoder Refresh) 解码器立即刷新。这个帧来了以后,缓冲区的数据清空,因为该帧为关键帧,不需要依赖其他的帧。
  2. 每当遇到IDR帧时,解码器就会清空解码器参考buffer中的内容,这样做的好处就是防止错误往下进行传播了。因为很可能缓冲区的数据出现了错误,这个时候来了个IDR,前面的数据都会丢掉。
  3. 每个GOP中的第一帧就是IDR帧
  4. IDR帧是一种特殊的I帧

参考下图可以帮助理解下帧与分组的关系
在这里插入图片描述

SPS与PPS

SPS(Sequence Parameter Set)和PPS(Picture Parameter Set)是H.264/AVC视频编码标准中用于描述编码参数的一种数据结构。

SPS(Sequence Parameter Set):序列参数集,作用于一串连续的视频图像。 如seq_ parameter_ set_ id、帧数及POC(picture order count)的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等。

PPS(Picture Parameter Set) :图像参数集,作用于视频序列中的图像。如pic_ parameter_ set_ id、 熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等。SPS和PPS是在IDR帧之前成对出现的。

重要概念:

  1. 在每个IDR帧前面都有一个SPS与PPS,这里抛出个问题也是我没找到答案的一个问题就是SPS与PPS属不属于I帧的一部分,两个答案我都看到过有人回答。希望有懂得大佬能解释下这两种说法,谢谢…
  2. SPS是对GOP得参数设置,它修饰的是一组数据,PPS是对GOP中每一幅图的参数,修饰的是每一帧图。

压缩技术

H264压缩技术分为以下四大类,其中前两个是有损压缩,后两个是无损压缩

  1. 帧内压缩,解决的是空域数据冗余问题
  2. 帧间压缩,解决的是时域数据冗余问题
  3. 整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化
  4. CABAC压缩

宏块

宏块是视频压缩操作的基本单位,无论是帧内压缩还是帧间压缩,它们都是以宏块为基本单位的。也就是说H264进行编解码的时候是以宏块为基本单位的。
在这里插入图片描述
观察上图,先看左图,比如我们左上角切出一个宏块,这个宏块是按照像素来的,8*8的像素。右边的图是宏块的具体表现,最开始的时候每个宏块的每个像素都有一定的值,后面我们会按照宏块进行压缩。


如下图所示,我们把下面这种图按照宏块进行划分之后就得到了上面的这张图,看起来整体的图像差不多但是色彩,平滑度都不如下面的这张图好。
在这里插入图片描述

子块划分

在这里插入图片描述
如上图所示:左边是H264子块的划分,整个大的块是1616的,宏块的大与小对于我们编解码有至关重要的关系,如果宏块划分的非常小,我们进行压缩的时候控制力就非常强。但是反例就是一个蓝色的背景图,这个时候宏块就要划分的非常大,我们的处理速度就能非常的快。而对于很多细节,纹理特别强的图,就划分为小的宏块,这样处理起来压缩比会更高。右边这图MPEG2,就是将1616划分为4等份,每个8*8。这样进行处理之后每一块数据都很多,H264对宏块的划分做了非常大的灵活性,将宏块划分小之后原来的数据量非常多,经过重新划分之后再去压缩数据量就非常小了。

如下图宏块划分的表示方法
在这里插入图片描述

帧内压缩理论

对于帧内压缩来说,他的相邻像素差别不大所以可以进行宏块预测(下面在介绍),而且人们对于亮度的敏感度超过色度,YUV也很容易将亮度与色度数据分开,最后一点帧内压缩的帧类型是I帧与IDR帧

对于宏块的帧内预测来说,H264提供了9种帧内预测的方式
在这里插入图片描述
这里在贴上一副图表示下在不同预测模式下,宏块的最终值。
在这里插入图片描述

在这9种模式使用的时候,实际会从某一个宏块出发,以这个宏块为基础,在这个宏块的下边,右边的宏块应该是什么样子的,至于选择哪一种模式,在H264中有一种算法可以快速定位到使用哪一种模式,他的九种模式中哪一种最接近原来的宏块,最后预测完之后会标记上数字表示哪一种预测方式,如下右图所示
在这里插入图片描述

帧内预测残差值

帧内预测残差值是一种用于压缩视频帧的技术。它涉及到对视频帧内部的像素进行预测,并通过比较预测值和实际像素值之间的差异来表示图像的残差。
残差值就相当于一个偏置项一样,对图像的预测结果进一步纠正,这个残差是通过原始图像和预测图像对比计算出来的。因此在存储时,要存储预测模式+残差,保证了图像不失真,降低了图像粗处空间。知道有这么东西存在就好了。

如下图的前方灰色的图像
在这里插入图片描述


最后拿到这两部分数据之后就可以对帧内预测模式信息与残差值进行压缩了。

帧间压缩理论

帧间压缩技术主要针对以下几点

  1. GOP,帧间压缩也就是对于GOP的压缩。
  2. 参考帧,后面的帧参考前面的帧
  3. 运动估计:宏块匹配 + 运动矢量,通过宏块匹配的方式,找到运动矢量,运动矢量就是记录了一个宏块从一个地方运动到另一个地方而且是有方向的。
    所谓的运动估计就是通过宏块匹配的方法,最终实现找到运动矢量。
  4. 运动补偿:找到残差值,最后解码的时候把残差值补上。

这里解释下宏块查找
在这里插入图片描述
如上图,所谓的宏块查找,就是将一张图划分成很多的小块,在一个GOP中有很多相似的帧,这些帧都是绿底的,有一个台球从一个角落到另一个角落,在这一组帧中,我们抽取出两个相邻的帧,比如上图的右图是第一帧,左图是第二帧,最简单的方法就是逐行扫描,找到相似度高达95%以上的我们就认为是同一个宏块,当我们扫描到第三行的时候发现宏块在这边,找到这个宏块之后我们就记录下,对比原始的坐标,从起始点到扫描点,这个举例跟方向就是运动矢量,每一个宏块都需要经过这样的查找。上图因为底色都是绿色的,压缩率会非常的高。

宏块的查找算法:

  1. 三步搜索
  2. 二维对数搜索
  3. 四步搜索
  4. 钻石搜索

这里最后也会有一个帧间压缩的残差值,残差值就是一个微调的数值。

总结

上面介绍了下I帧,P帧,B帧,SPS,PPS, GOP, 以及宏块 ,还有两种有损压缩,以及他的一些理论知识。下一篇再来介绍下两种无损压缩,以及H264码流的一些概念,希望我的总结能帮助到大家,有错误的地方也请指正。

  • 31
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值