H.264码流分析

SPS与PPS中的信息

1. SPS

   SPS(序列参数集):包含的是针对一连续编码视频序列的参数,如标识符seq_parameter_set_id、帧数及POC的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等。

  •     编码等级(profile_idc):100 High (FRExt)

   

 

  •    每帧最大支持码流范围(level_idc):31 3.1 (Supports 720p HD format. Enables Interlace support. **27648000 samples/sec**)

   

 

  • 分辨率:SPS中并没有直接给出分辨率的数值,但是当前视频的分辨率可以由SPS中给出的参数计算出来
    • pic_width_in_mbs_minus1:以宏块大小为度量表示图像宽度。
    • pic_height_in_mbs_minus1:以宏块大小为度量表示图像高度
    • 分辨率的计算:在H.264中,每一个宏块大小都是16*16像素,实例中给出图像宽度为39+1=40个宏块大小,图像高度为22+1=23个宏块大小,由此可以计算出其分辨率为640x368

 

2. PPS

   PPS(图像参数集):对应的是一个序列中某一副图像或者某几幅图像,参数如标识符pic_parameter_set_id、可选的seq_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等。

  • pic_parameter_set_id:用以指定参数集的序号,即当前PPS的ID,该序号在各片的片头被引用
  • entropy_coding_mode_flag:指明熵编码的选择,取值为0时,表示熵编码使用 CAVLC,取值为1时表示熵编码使用 CABAC
  • num_slice_groups_minus1:加1后指明图像中slice group的个数。取值为0时(即只有一个片组),表示不使用片组模式。
  •  weighted_pred_flag :指明是否允许P帧使用加权预测,取值为 1 时表示允许
  •  weighted_bipred_flag: 指明是否允许 B 帧使用加权预测。取值为 0 时表示使用默认加权预测模式,取值为 1 时表示使用显式加权预测模式,取值为 2 时表示使用隐式加权预测模式
  •  pic_init_qp_minus26: 加 26 后用以指明亮度分量的量化参数的初始值。
  • constrained_intra_pred_flag: 在 P 帧和 B 帧中,帧内编码的宏块的邻近宏块可能是采用的帧间编码。当此处取值为 1 时,表示帧内编码的宏块不能用帧间编码的宏块的像素作为自己的预测,即帧内编码的宏块只能用邻近帧内编码的宏块的像素作为自己的预测;而此处取值为0时,表示不存在这种限制。

 

基于GOP的分析

GOP结构

  • 上图中红色的为I帧,蓝色的为P帧,绿色的为B帧,可以看出其GOP格式为IPBBPBB……

  • 左侧的纵坐标表示编码比特数,可以看到编码比特数往往是I>P>B

  • 在下方的Frame Info窗口,可以看到当前选中的I帧为第1组GOP,而它在整个视频帧序列中的序号为250,因此可以推断出当前分析的视频GOP长度为250frame/group  

图像帧的编码比特数、QP值

在码流分析软件中将视频帧各类的信息保存成CSV文件

 得到的图像帧信息:

1.  以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图

2.  每帧所用QP

  • 量化参数QP是量化步长Qstep的序号
    • 对于Luma编码,Qstep的取值范围为0-51
    • 对于Chroma编码,Qstep的取值范围为0-39
    • QP取值越小时,量化越精细

可以查看每帧使用的最大与最小QP

 

  • 分析一组GOP的QP取值:发现对于I帧,QP取值偏小,而对于B帧,QP取值偏大,而P帧取值位于二者之间。由此可以知道对于I帧往往采取更加精细的量化,而对于B帧则采取较为粗糙的量化,P帧则介于两者之间。

    本意是想要画出以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图,但发现并不能一次性导出所有图像的QP取值,所以选取了一组GOP的QP值进行绘制。(由于初次选取视频GOP长度过大,对每一帧的QP进行人工读取工作量过大,而读取的帧数不足分析意义不大,因此此处更换了分析的视频序列,新序列的GOP长度为30)

 

 

  • 这里查看的是宏块量化参数的偏移值,其取值范围为-26到+25,指示的是前后两个宏块的量化参数的偏移

    • 片中第一个宏块的QP = 26 + pic_init_qp_minus26 + slice_qp_delta

    • 后续宏块的QP = (QPprev + mb_qp_delta + 52) % 52

                

第一个I帧的分析

从左边的summary框中可以看出类型(0)I_NxN的宏块占比最多(这其中包括I_4x4和I_8x8编码类型的宏块),从显示的宏块图中也能得到此结论

对于选中的宏块(以箭头指示出),可以从右边的MB Info框中看出其类型为(0)I_4x4型  

第一个P帧的分析

 从左边的Summary中可以看到当前P帧中存在着I-MB,即帧内编码宏块(右边图中以紫红色给出),占比最多的还是P-MB中的P_L0_L0_16x8宏块类型

 上图中选中的宏块类型为I_8x8,其采用的时帧内编码模式

 上图中选中的宏块类型为I_8x8,采用的时前向预测编码模式,参考为前一个I帧中对应的宏块

B帧的分析

 

左边的summary框给出了B帧中有的宏块类型及其统计,可以看到在这个B帧当中B_L1_16x16类型的宏块占比最多,同时存在许多B_Skip类型的宏块

 

上图中选中的宏块,其类型为B_L0_16x16

 

 上图中选中的宏块,其类型为B_Skip,说明当前宏块的像素取值与前一帧中的对应宏块的像素取值十分相似,所以能够Skip,之间使用上一帧对应宏块像素值代替即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值