file type : PS
video stream type : AVC/H.264
resolution : 1920x1080
profile:level : Main:4.2
aspect ratio : 16x9(unspecified)
interlaced : no
frames count : 96
frame size max : 89 996
avg : 8 852
avg/max (I) : 89 996 / 89 996
avg/max (P) : 7 998 / 9 436
avg/max (B) : 0 / 0
min : 6 008
file size : 850 004
--------------------------------------------
framerate declared : 0.00
--------------------------------------------
real : 30.00
bitrate declared : 0
--------------------------------------------
real max : 2 538 722
real avg : 2 124 962
real min : 1 960 081
--------------------------------------------
file name : 264.mp4
解释:
交错扫瞄(隔行扫描,Interlaced)一个画面分成两次送出,先送奇数线的画面后,再送偶数线,显示时再将它们合成完整画面。
非交错扫瞄(逐行扫描Porgressive)是每次都送完整的画面,不需要奇偶画面重新组合。所以在非交错式显示的萤幕上观看时,交错画面要把它重组回来,这个动作叫做 “去交错” (Deinterlaced)。
mb count : 8 160
picture size (bits) : 58 587 [7 323]
transform coeff size (bits) : 49 687 [84.81%]
mv size (bits) : 879 [1.50%]
max mb size (bits) : 98 [4318]
max qp : 37 [1545]
min qp : 23 [7919]
max mv x : 2 [1923]
max mv y : 3 [6371]
min mv x : -13 [7832]
min mv y : -3 [5283]
此栏是每一帧的信息,包括宏块个数,图像大小。可以看到一帧的bit大小,变换系数大小以及占这一帧的比例,运动矢量的bit大小以及占这帧比例。
Elecard里面看到一帧图片里面宏块信息如下:
position : 103x1 (1648x16)
mb_addr : 223
size (in bits) : 1
mb_type : 5
pmode : 0
mb_type : Inter(P_Skip)
slice_number : 0
transform_8x8 : 0
field\frame : frame
cbp bits : 0 0000 0 00 0 00
: 0000 00 00
: 0000
: 0000
quant_param : 25
pmode : Part_16x16
mvL0 :
0, 0, 0| 0, 0, 0| 0, 0, 0| 0, 0, 0
0, 0, 0| 0, 0, 0| 0, 0, 0| 0, 0, 0
0, 0, 0| 0, 0, 0| 0, 0, 0| 0, 0, 0
0, 0, 0| 0, 0, 0| 0, 0, 0| 0, 0, 0
1.mb_type指明当前宏块的类型。 H.264规定,不同的片中允许出现的宏块类型也不同。下表指明在各种片类型中允许出现的宏块种类。
可以看到,I片中只允许出现I宏块,而P片中即可以出现P宏块也可以出现I宏块,也就是说,在帧间预测的图像中也可以包括帧内预测的图像。其它片也有类似情况。
在帧间预测模式下,宏块可以有七种运动矢量的划分方法。
在帧内预测模式下,可以是帧内16x16预测,这时可以宏块有四种预测方法,即四种类型;也可以是4x4预测,这时每个 4x4 块可以有九种预测方法,整个宏块共有144种类型。
CodedBlockPatternLuma:指定当前宏块色度分量的 CBP, CBP(Coded Block Pattern)是指子宏块残差的编码方案。
亮度 CBP:指定当前宏块亮度分量的 CBP,我们看到,帧内 16x16 宏块类型的 mb_type 语义原比其它宏块类型的复杂,这是因为当使用帧内 16x16 时,整个宏块是一个统一的整体,宏块中各子宏块、4x4小块的预测模式信息都是相同的,所以可以把这些信息放入 mb_type ,以减少码流。
mb_type表示宏块类型的数值,I slice共有26个数值
name表示宏块类型的名称,其中名称开头的I表示I宏块类型:
I_NxN表示的是I_8x8或者I_4x4
I_16x16_a_b_c中的I_16x16代表以intra_16x16为预测方式
I_16x16_a_b_c中的a代表intra_16x16当中的4种模式:0垂直,1水平,2DC,3plane
I_16x16_a_b_c中的b代表使用intra_16x16预测方式时的Chroma CBP
I_16x16_a_b_c中的c代表使用intra_16x16预测方式时的Luma CBP
transform_size_8x8_flag 1表示采用8x8的块进行熵编码,0表示采用4x4块进行熵编码,na的情况同0
pmode 如果当前宏块类型采用的预测方式为Intra_16x16,那么该字段有效,它用0~3表示了Intra_16x16中的四种模式。帧内预测过程中,有四种宏块类型:I_4x4,I_8x8,I16x16,I_PCM。他们都需要在相邻块做去块滤波之前进行帧内预测。
在帧内预测模式中,预测块P是基于已编码重建块和当前块形成的。对亮度像素而言,P块用于4×4子块或者 16×16 宏块的相关操作。 4×4亮度子块有9种可选预测模式,独立预测每一个 4×4亮度子块,适用于带有大量细节的图像编码;
16×16 亮度块有 4种预测模式,预测整个 16×16 亮度块,适用于平坦区域图像编码;色度块也有4种预测模式,类似于 16×16 亮度块预测模式。编码器通常选择使 P 块和编码块之间差异最小的预测模式。
mb_type 宏块类型的数值,P slice共有31个数值
name 宏块类型的名称,其中
• 开头的P表示P宏块类型 • 末尾的mxn代表宏块的分割方式
• P_L0_16x16表示宏块的分割方式为16x16,也就是不进行分割,那么它只有一个前向参考图像L0
• P_L0_L0_16x8表示宏块的的分割方式为16x8,也就是宏块被分成俩个16x8的块,每个16x8的块都有一个前向参考图像L0,即两个L0,按顺序写成P_L0_L0_16x8
• P_L0_L0_16x8表示宏块的的分割方式为8x16,也就是宏块被分成俩个8x16的块,每个8x16的块都有一个前向参考图像L0,即两个L0,按顺序写成P_L0_L0_8x16
• P_8x8表示宏块分成4个8x8的子宏块,对每个子宏块会采用sub_mb_type来表明该子宏块的类型,下面一节会进行分析
• P_8x8ref0表示同上,不过该宏块的4个子宏块采用的参考图像都是ref0,在sub_mb_pred(请参考h.264语法结构分析中的sub_mb_pred部分)语法结构中不会包含他们的refIdx
• P_Skip表示该宏块在码流中没有更多的数据了。请注意他的mb_type为inferred,不过它并不在mb_type中表示,而是在slice_data处就已经用skip_run或者skip_flag来表示,请参考h.264语法结构分析中的slice_data部分
Num Mb Part(mb_type) 宏块被分割成多少部分
MbPartPredMode(mb_type,0) 宏块分割后的第一部分的预测模式为前向预测,还是后向预测,还是双向预测,由于是P slice,这里只能是前向预测Pred_L0
MbPartPredMode(mb_type,1) 宏块分割后的第二部分的预测模式为前向预测,还是后向预测,还是双向预测,由于是P slice,这里只能是前向预测Pred_L0
MbPartWidth(mb_type) 分割后的块的宽度
MbPartHeight(mb_type) 分割后的块的高度
Coded_block_pattern,即CBP,指亮度和色度分量的各小块的残差的编码方案。
CBP详解
cbp一共6bit,高2bit表示cbpc(2:cb、cr中至少一个4x4块的AC系数不全为0;1:cb、cr中至少一个2x2的DC系数不全为0;0:所有色度系数全0)
低4bit分别表示4个8x8亮度块,其中从最低一位开始的4位分别对应00,10,01,11位置的88亮度块。如果某位为1,表示该对应88块的4个4*4块中至少有一个的系数不全为0。
ICBPTAB[0] = 0 (00 0000)表示既没有亮度系数,也没有色差系数
ICBPTAB[1] = 16 (01 0000)表示没有亮度系数,有色差直流系数(没有交流系数)
ICBPTAB[2] = 32 (10 0000)表示没有亮度系数,有色差交流系数(可能含有直流系数)
ICBPTAB[3] = 15 (00 1111)表示有亮度系数,没有色差系数
ICBPTAB[4] = 31 (01 1111)表示有亮度系数,有色差直流系数(没有交流系数)
ICBPTAB[5] = 47 (10 1111)表示有亮度系数,有色差交流系数(可能含有直流系数)
For AVC/H.264 streams
·Red circles – Intra (Name of mb_type = I_4x4, I_16x16_0_0_0, I_16x16_1_0_0, I_16x16_2_0_0, I_16x16_3_0_0, I_16x16_0_1_0, I_16x16_1_1_0, I_16x16_2_1_0, I_16x16_3_1_0, I_16x16_0_2_0, I_16x16_1_2_0, I_16x16_2_2_0, I_16x16_3_2_0, I_16x16_0_0_1, I_16x16_1_0_1, I_16x16_2_0_1, I_16x16_3_0_1, I_16x16_0_1_1, I_16x16_1_1_1, I_16x16_2_1_1, I_16x16_3_1_1, I_16x16_0_2_1, I_16x16_1_2_1, I_16x16_2_2_1, I_16x16_3_2_1).
·Blue circles – Inter (B or P) (Name of mb_type = P_L0_16x16, P_L0_L0_16x8, P_L0_L0_8x16, P_8x8, P_8x8ref0, B_L0_16x16, B_L1_16x16, B_Bi_16x16, B_L0_L0_16x8, B_L0_L0_8x16, B_L1_L1_16x8, B_L1_L1_8x16, B_L0_L1_16x8, B_L0_L1_8x16, B_L1_L0_16x8, B_L1_L0_8x16, B_L0_Bi_16x8, B_L0_Bi_8x16, B_L1_Bi_16x8, B_L1_Bi_8x16, B_Bi_L0_16x8, B_Bi_L0_8x16, B_Bi_L1_16x8, B_Bi_L1_8x16, B_Bi_Bi_16x8, B_Bi_Bi_8x16, B_8x8).
·Yellow circles – Inter Skip (B or P) (Name of mb_type = P_Skip, B_Skip).
·Green circles – Inter B Direct (Name of mb_type = B_Direct_16x16).
·Blue circles with green quarter – Inter B 8х8 with Direct (Name of mb_type = B_8x8 and Name of sub_mb_type[ mbPartIdx ] = B_Direct_8x8).
The MB size button visualizes macroblock sizes (in bits) in the video window: black– 0; white – max for the current frame.