音视频编解码原理(二) H.264帧内编码原理

13 篇文章 2 订阅
9 篇文章 1 订阅

上一节简单介绍了什么是封装格式以及音视频编码的几种方式,从本节开始,着重介绍H.264的编解码原理。

说到H.264,首先不得不提到作为奠基鼻祖的H.261,其主要的贡献有:

1.帧内编码

第一次根据帧内的像素趋于统一而采用帧内预测编码技术

2.帧间编码(运动补偿)

使用以宏块为基础的运动补偿预测编码技术,从当前宏块参考帧中产生最佳匹配宏块

3.环路滤波器

实际上是一个数字低筒滤波器,滤除不必要的高频信息

4.块结构的混合编码

第一种采用“块结构的混合编码”方案的编码标准

本节主要介绍帧内编码原理。

H.264数据的来源

上一节讲到,摄像头等中采集的视频数据必须通过编码后才能保存,那么从摄像头采集的数据是如何变成编码成H.264数据的呢?

以摄像头为例,如下图,摄像头采集的一帧画面需经过视频信源编码器、视频复合编码器和传输缓冲器后,再经过传输编码器进行编码,就得到H.264码流数据,本章主要围绕这张图来展开说明。

而解码H.264则刚好与编码相反:

 

下面一一解释这几个编码器都做了什么?

一、信源编码器:

        视频帧首先会经过信源编码器,信源编码器会将帧数据切割为一个一个的小块,称为宏块,H.264默认采用16*16大小的区域作为一个宏块,也可以划分为8*8,这是基于帧的空间冗余度而根据其内部算法决定的。

空间冗余度:

        以下图为例,摄像头中采集的蓝色天空颜色大致是相同的,因此所造成的冗余比例成为空间冗余度。所以没有必要将每一个像素都保留下来

如下图,假如其中一个区域被划分为了8*8的宏块(NAL)

        在这个宏块中,只需要保留上侧8个像素、左侧7个像素和帧内预测数据,就可以预测整个宏块的数据,大大缩小数据量

        帧内预测有如下图8个方向和一个取平均,分别为:垂直、DC(平均值)、水平、下左对角线、下右对角线、右垂直、下水平、左垂直、上水平

       为了获得更高的压缩率,还可以在宏块的基础上继续划分出更多的子块,以16*16宏块为例,子块的大小可以是8*16、16*8、8*8、4*8、8*4、4*4,非常的灵活

注:

1. 一个宏块的预测方向只有一个

2. 所有H.264编码的视频的宽高一定是最大宏块的倍数(16的倍数)

3. 越大的宏块越多,压缩比越高

这里可以推算一下第3个结论:

        如果16*16的宏块越多,拿单个宏块来说,原数据像素数:16*16=256,宏块记录的像素:上侧:16,左侧:15,一共只需要31个像素,节省了256-31=225个像素

        如果4*4的宏块越多,拿单个宏块来说,原数据像素数:4*4=16,宏块记录的像素:上侧:4,左侧:3,共7个像素,节省了16-7=9个像素

由此可以印证第3个结论

二、视频复合编码器:

经信源编码器划分的宏块会交给视频复合编码器,视频复合编码器会将宏块上侧、左侧的像素数据和预测方向数据记录下来,交给传输缓冲器。

三、传输缓冲器:

传输缓冲器主要将前面步骤产生的B帧暂时缓冲在传输缓冲器中,直到获取到I帧或者P帧时,一起输出到传输编码器中生成H.264码流。

注:

这里重新将上图放下来作为解释:

当第一帧I帧从传输缓冲器输出后,随后的B帧会暂时缓存在传输缓冲器中,直到编码出I帧或者P帧到达传输缓冲器,缓冲其中的B帧会依次经编码控制重新经过视频编码器->视频复合器->跟在P帧后从传输缓冲器中输出。这也是后面要讨论的解码顺序和播放顺序不同的根源所在。

本节主要介绍了H.264的帧内编码原理,以及在生成H.264过程中各编码器起到的作用,下一节介绍H.264的帧间编码原理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值