H264几个参数说明
注:文章来源为我的笔记
sps、pps计算宽高:
// 宽高计算公式
width = (sps->pic_width_in_mbs_minus1+1) * 16;
height = (2 - sps->frame_mbs_only_flag)* (sps->pic_height_in_map_units_minus1 +1) * 16);
// 是否需要进行图像剪切
if(sps->frame_cropping_flag)
{unsigned int crop_unit_x;unsigned int crop_unit_y;if (0 == sps->chroma_format_idc) // monochrome{crop_unit_x = 1;crop_unit_y = 2 - sps->frame_mbs_only_flag;}else if (1 == sps->chroma_format_idc) // 4:2:0{crop_unit_x = 2;crop_unit_y = 2 * (2 - sps->frame_mbs_only_flag);}else if (2 == sps->chroma_format_idc) // 4:2:2{crop_unit_x = 2;crop_unit_y = 2 - sps->frame_mbs_only_flag;}else // 3 == sps.chroma_format_idc // 4:4:4{crop_unit_x = 1;crop_unit_y = 2 - sps->frame_mbs_only_flag;}width -= crop_unit_x * (sps->frame_crop_left_offset + sps->frame_crop_right_offset);height -= crop_unit_y * (sps->frame_crop_top_offset + sps->frame_crop_bottom_offset);
}
level级别计算:
比如分辨率:1920x1080, 参考帧率:60 的 h264 码流是哪个 level 呢?
H.264 的宏块大小为 16×16,每帧宏块的个数为分辨率除以 16
- max-fs = ceil( width / 16.0 ) * ceil( height / 16.0 )
计算得:8100
每秒宏块数量为每帧宏块数乘以帧率.
- max-mbps =max-fs * 参考帧率 (60)
计算得:486000
质量参数控制:
1.QP(Quantization Parameter)量化参数,支持设置最大值和最小值范围,取值(0 ~ 51),QP 值越小,量化误差越小,视频质量越高,码率也会越大;QP 值越大,量化误差越大,视频质量越低,但码率越小。
2.CQP(Constant Quantization Parameter)恒定量化参数,设置后每一帧都使用相同的 QP 值。使用CQP模式时,设置的最大最小QP值范围无效。
3.CRF(Constant Rate Factor)恒定质量因子(x264编码器提供),通常取值18 ~ 28之间(和QP一样),CRF 模式会根据帧的内容复杂度动态调整 QP 值。例如,对于运动较多的帧,QP 值会增加;对于静止或运动较少的帧,QP 值会减小,从而保持整个视频的主观质量恒定,而不是每帧的质量恒定。使用CRF模式时,设置的最大最小QP值范围仍然有效,并可以更精细的控制QP值调整范围。
4.preset参数(x264编码器提供)
取值(速度由快到慢):ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow and placebo。编码越快,输出图像质量越差。