h264编码算法由浅入深(一)

h264压缩的主要过程。

宏块划分-》帧内/帧间运动检测-》dct变换,量化-》环路滤波-》熵编码-》封装数据写slice


h264数据帧

编码器每次输出一个slice,一帧数据可能分为多个slice,也可能一个。大多数情况是一个slice。


slice类型即nalu类型的定义如下:

    0:未规定
    1:非IDR图像中不采用数据划分的片段
    2:非IDR图像中A类数据划分片段
    3:非IDR图像中B类数据划分片段
    4:非IDR图像中C类数据划分片段
    5:IDR图像的片段
    6:补充增强信息 (SEI)
    7:序列参数集
    8:图像参数集
    9:分割符
    10:序列结束符
    11:流结束符
    12:填充数据
    13 – 23:保留
    24 – 31:未规定

1 h264数据帧中,只有I帧是关键帧,是被参考的帧。其它如P帧和B帧都是参照其它帧。(参考关系主要体现在宏块运动向量和残差数据计算)

P帧永远参考前面的帧,可能会参考很多帧,这个由预设值lookahead决定,B帧可能会前后参考。I帧只会有帧内宏块间的参考。


2 有的视频没有B帧,因为profile类型是baseline,一般硬件编码都是实现的这种profile类型,如海思芯片,一些手机硬件编码等等。profile类型在sps slice中,位于nalu类型子节后面一个字节。


3 编码中又个关键指标步长是什么?

视频数据信号经过宏块运动估计,得到残茶数据之后,进行DCT变换,得到连续的余弦函数信号,通过一定的采样频率进行采样,

这个采样周期就是步长的幅度差值。


4 宏块运动估计算法是怎样的?

 宏块初始化后悔被分为16x16 ,16x8,8x16 8x8 的宏块,并且是将亮度y和色差信号uv分开的。帧内运动估计,主要是左,右,右上,左上四个方向预测。


5 什么是半像素内插

 宏块左运动估计的时候,会有只运动了半个像素的情况,这种情况下,通过在像素之间插入估计的像素值来计算宏块运动向量更精确。


6 sad和satd

 sad是把整个宏块像素拿来计算残差,satd是先把宏块分为4x4的小块,进行哈德曼变幻,然后把变幻后的亚像素涌来计算残差和运动向量。


以上介绍了h264压缩的基本流程和一些常见的疑问。

备注:h264压缩的大部分耗时都是在宏块左运动估计的时候,模式选择和运动向量计算上。









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值