H264/AVC-编码方式:帧、场以及宏块帧场自适应(MBAFF)

本文详细解读H264的三种编码方式:帧编码、场编码和帧场自适应,以及不同码流策略的应用。重点介绍如何通过sps和sliceheader参数判断帧类型,并了解视频序列中的编码灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图像编码方式

H264支持三种图像编码方式:帧编码、场编码、帧场自适应编码。

  • 帧编码容易理解,表示将一帧图像划分为16x16大小宏块进行编码,这种方式编码图像中所有宏块都是帧宏块
  • 场编码,将一帧图像根据奇数行和偶数行划分为两部分,分别成为顶场和底场,如下图所示。这种方式编码的slice中所有宏块都是场宏块。
    在这里插入图片描述
  • 宏块级帧场自适应编码,这种方式以宏块对方式编码,它的自适应性体现在:宏块对可以是帧宏块对也可以是场宏块对。编码过程中先编码顶宏块再编码底宏块,编码完一个宏块对后再编码下一个宏块对。

码流编码方式

基于以上三种图像编码方式,一段H264码流(多帧图像)的编码方式有以下几种:

  1. 全部图像采用帧编码
  2. 全部图像采用场编码,每帧图像分为两场:
    1)I帧可编码为两个I场或一个I场和一个P场
    2)P帧可编码为两个P场或一个P场和一个B场;
    3)B帧可编码为两个B场
  3. 图像级帧场自适应(PAFF),视频序列中有些帧被编码为帧格式,有些帧被编码为场
  4. 有些图像编码为宏块级帧场自适应,有些图像被编码为场格式

如何区分图像到底使用哪种编码方式

每帧图像使用哪种编码方式再H264语法中已经定义,按照下面流程就可以解析得到编码方式。
在这里插入图片描述
判断过程需要用到如下三个参数:
sps中的frame_mbs_only_flag和mb_adaptive_frame_field_flag,以及slice header中的field_pic_flag。

frame_mbs_only_flag:1表示序列中只有帧宏块;
mb_adaptive_frame_field_flag:1表示视频序列中可能存在MBAFF;
field_pic_flag:表示该slice是场编码

  • frame_mbs_only_flag=1时,视频序列中所有图像都是帧格式;
  • frame_mbs_only_flag=0 && mb_adaptive_frame_field_flag=0时,视频序列可能是全部是场格式,也有可能是PAFF,需要根据每一帧的field_pic_flag判断;
  • mb_adaptive_frame_field_flag=1&& field_pic_flag=1时,表示该slice为场;
  • mb_adaptive_frame_field_flag=1&& field_pic_flag=0时,表示该帧为MBAFF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值