x264 参数解析

b_aud 参数 表示是否插入 aud 分隔符,大部分播放器没有aud 可正常播放,类flash 播放去需要每次需要一个完整的帧数据,那么把2个AUD之间的数据按照格式打包给播放器就可以了。

libx264 实现:

b_repeat_headers 表示是否在每个关键帧前面附带sps/pps 信息

我们来看下sps pps 结构:

我们关注比较多 如pic_width_in_mbs_minus1 表示以宏块为单位的 宽度

那么 我们可以算出 改视频宽度为 (79+1)* 16 = 1280

算高度需要考虑 frame_mbs_only_flag 为1 表示 宏块为单位的一的高度,为 0 表示宏块为单位的一的高度 。

场编码 简单理解为图像隔行扫描,分为顶场和底场 ,理解完之后,可以算出 该视频高度  为(44+1)*16 = 720

b_annexb 表示 流开始前缀 h264 分为2中格式,一直是前4字节为长度 的avc1 一种是4字节0x 00000001 startcode 这种

分析下码率控制参数: 

i_rc_method: 参数  X264_RC_CQP  X264_RC_CRF X264_RC_ABR

关于3中码率控制的文章很多,这里大概带一下,cqp 恒定qp 也就是恒定质量,一般可以做算法测试,实际运用crf 和abr 比较多,crf 相比abr 就是在以某一个qp 为基础的情况,尽量将码率往abr 上去靠近 实际是通过降低部分less important 帧qp 实现。

我们来看下cqp 模式做了啥事情:

i_qp_constant 实际是 p 帧的 qp参数,通过f_ip_factor 和f_pb_factor 算出 i,b 帧的qp ,然后计算出 i_qp_min 和i_qp_max 

对于abr  和crf 模式我们大概看下怎么 进行bitrate 控制的:

每编码一帧,算一下 编码之后字节数 ,然后反向算  下一帧的qp 

猜你喜欢

转载自blog.csdn.net/sky88866/article/details/82499397
今日推荐