H.264编码及AAC编码基础 1

简介: H.264编码及AAC编码基础

前言

本节重点讲解了 H.264 编码以及 AAC 编码,在对其进行讲解前先介绍了视频编码的实现原理。


一、视频编码的实现原理

1、视频编码技术的基本原理

编码就是为了压缩。要实现压缩,就要设计各种算法,将视频数据中的冗余信息去除。

种类 内容 压缩方法
空间冗余 像素间的相关性 变换编码,预测编码
时间冗余 时间方向上的相关性 帧间预测,运动补偿
图像构造冗余 图像本身的构造 轮廓编码,区域分割
知识冗余 收发两端对人物的共有认识 基于知识的编码
视觉冗余 人的视觉特性 非线性量化,位分配
其他 不确定因素


视频编码技术优先消除的目标,就是空间冗余时间冗余

2、视频编码技术的实现方法

视频是由不同的帧画面连续播放形成的。这些帧,主要分为三类,分别是:

  • I 帧
  • 自带全部信息的独立帧,是最完整的画面(占用的空间最大),无需参考其它图像便可独立进行解码。视频序列中的第一个帧,始终都是 I 帧。

B 帧

  • “双向预测编码帧”,以前帧后帧作为参考帧。不仅参考前面,还参考后面的帧,所以,它的压缩率最高,可以达到 200:1。不过,因为依赖后面的帧,所以不适合实时传输(例如视频会议)。

P 帧

  • 帧间预测编码帧”,需要参考前面的 I 帧和/或 P 帧的不同部分,才能进行编码。P 帧对前面的 P 和 I 参考帧有依赖性。但是,P 帧压缩率比较高,占用的空间较小。
  • 通过对帧的分类处理,可以大幅压缩视频的大小。

毕竟,要处理的对象,大幅减少了(从整个图像,变成图像中的一个区域)。

3、运动估计和补偿

①、块(Block)与宏块(MicroBlock)

如果总是按照像素来算,数据量会比较大,所以,一般都是把图像切割为不同的“块(Block)”或“宏块(MacroBlock)”,对它们进行计算。

一个宏块一般为 16 像素×16 像素。

②、I 帧、P 帧、B 帧的小结

  • 对 I 帧的处理,是采用帧内编码方式,只利用本帧图像内的空间相关性。
  • 对 P 帧的处理,采用帧间编码(前向运动估计) ,同时利用空间和时间上的相关性。

简单来说,采用运动补偿(motion compensation)算法来去掉冗余信息。

③、I 帧(帧内编码)

需要特别注意,I 帧(帧内编码),虽然只有空间相关性,但整个编码过程也不简单。

如上图所示,整个帧内编码,还要经过 DCT(离散余弦变换)、量化、编码等多个过程。

  • RGB 转 YUV:固定公式
  • 图片宏块切割:宏块 16x16
  • DCT:离散余弦变换
  • 量化:取样
  • ZigZag 扫描:
  • DPCM:差值脉冲编码调制
  • RLE:游程编码
  • 算数编码:

④、如何衡量和评价编解码的效果

一般来说,分为客观评价和主观评价。客观评价,就是拿数字来说话。例如计算“信噪比/峰值信噪比”

一般来说,分为客观评价和主观评价。

  • 客观评价,就是拿数字来说话。例如计算“信噪比/峰值信噪比”。
  • 主观评价,就是用人的主观感知直接测量。

二、H.264 编码基础

1、H.264 快速入门

①、视频编码标准化组织

从事视频编码算法的标准化组织主要有两个,ITU-T 和 ISO。

  • ITU-T,国际电信联盟——电信标准分局,主要制定了 H.261/H263/H263+/H263++ 等标准
  • ISO,国际标准化组织,主要制定了 MPEG-1/MPEG-4 等

比如 MPEG-2、 H.264/AVC 和 H.265/HEVC 等。不同标准组织制定的视频编码标准的发展如下图所示:

②、视频压缩编码的基本技术

视频信息之所以存在大量可以被压缩的空间, 是因为其中本身就存在大量的数据冗余。

其主要类型有:

  • 时间冗余:视频相邻的两帧之间内容相似,存在运动关系
  • 空间冗余:视频的某一帧内部的相邻像素存在相似性
  • 编码冗余:视频中不同数据出现的概率不同
  • 视觉冗余: 观众的视觉系统对视频中不同的部分敏感度不同

针对这些不同类型的冗余信息,在各种视频编码的标准算法中都有不同的技术专门应对,以通过不同的角度提高压缩的比率。

<1>、预测编码

预测编码可以用于处理视频中的时间和空间域的冗余。

视频处理中的预测编码主要分为两大类:帧内预测和帧间预测

  • 帧内预测:预测值与实际值位于同一帧内,用于消除图像的空间冗余;帧内预测的特点是压缩率相对较低,然而可以独立解码,不依赖其他帧的数据;通常视频中的关键帧都采用帧内预测。
  • 帧间预测:帧间预测的实际值位于当前帧,预测值位于参考帧,用于消除图像的时间冗余;帧间预测的压缩率高于帧内预测,然而不能独立解码,必须在获取参考帧数据之后才能重建当前帧。

通常在视频码流中,I 帧全部使用帧内编码,P 帧/B 帧中的数据可能使用帧内或者帧间编码。

<2>、变换编码

所谓变换编码是指,将给定的图象变换到另一个数据域如频域上,使得大量的信息能用较少的数据来表示,从而达到压缩的目的。

目前主流的视频编码算法均属于有损编码,通过对视频造成有限而可以容忍的损失,获取相对更高的编码效率。

而造成信息损失的部分即在于变换量化这一部分。

在进行量化之前,首先需要将图像信息从空间域通过变换编码变换至频域,并计算其变换系数供后续的编码。

在视频编码算法中通常使用正交变换进行变换编码,常用的正交变换方法有:离散余弦变换(DCT)、 离散正弦变换(DST)、K-L 变换等。

<3>、熵编码

视频编码中的熵编码方法主要用于消除视频信息中的统计冗余。

由于信源中每一个符号出现的概率并不一致,这就导致使用同样长度的码字表示所有的符号会造成浪费。

通过熵编码,针对不同的语法元素分配不同长度的码元,可以有效消除视频信息中由于符号概率导致的冗余。

在视频编码算法中常用的熵编码方法有变长编码和算术编码等,具体来说主要有:

  • UVLC(Universal Variable Length Coding):主要采用指数哥伦布编码
  • CAVLC(Context Adaptive Variable Length Coding):上下文自适应的变长编码
  • CABAC(Context Adaptive Binary Arithmetic Coding):上下文自适应的二进制算数编码

根据不同的语法元素类型指定不同的编码方式。 通过这两种熵编码方式达到一种编码效率与

运算复杂度之间的平衡。

③、VCL NAL

视频编码中采用的如预测编码、变化量化、熵编码等编码工具主要工作在 slice 层或以下,这一层通常被称为“视频编码层”(Video Coding Layer, VCL)。

相对的,在 slice 以上所进行的数据和算法通常称之为“网络抽象层”(Network Abstraction Layer, NAL)。

设计定义 NAL 层的主要意义在于提升 H.264 格式的视频对网络传输和数据存储的亲和性

④、档次与级别

为了适应不同的应用场景,H.264 也定义了三种不同的档次:

  • 基准档次(Baseline Profile):主要用于视频会议、可视电话等低延时实时通信领域;支持 I 条带和 P 条带,熵编码支持 CAVLC 算法。
  • 主要档次(Main Profile):主要用于数字电视广播、数字视频数据存储等;支持视频场编码、B 条带双向预测和加权预测,熵编码支持 CAVLC 和 CABAC 算法。
  • 扩展档次(Extended Profile):主要用于网络视频直播与点播等;支持基准档次的所有特性,并支持 SI 和 SP 条带,支持数据分割以改进误码性能,支持 B 条带和加权预测,但不支持 CABAC 和场编码。

CAVLC 支持所有的 H.264 profiles,CABAC 则不支援 Baseline 以及 Extended profiles。

⑤、常见编码器

H.264 是一种视频压缩标准, 其只规定了符合标准的码流的格式, 以及码流中各个语法元素的解析方法。H.264 标准并未规定编码器的实现或流程,这给了不同的厂商或组织在编码实现方面极大的自由度, 并产生了一些比较著名的开源 H.264 编解码器工程。


其中 H.264 编码器中最著名的两个当属 JM 和 X264, 这二者都属于 H.264 编码标准的一种实现形式。


JM encoder 实在太慢了,x264则相当快.

目录
相关文章
|
7月前
|
存储 编解码 缓存
H.264编码
H.264编码
77 0
|
存储 编解码 算法
H.264编码及AAC编码基础 3
H.264编码及AAC编码基础
274 0
|
1月前
|
编解码 监控 网络协议
如何使用FFmpeg实现RTSP推送H.264和H.265(HEVC)编码视频
本文详细介绍了如何使用FFmpeg实现RTSP推送H.264和H.265(HEVC)编码视频。内容涵盖环境搭建、编码配置、服务器端与客户端实现等方面,适合视频监控系统和直播平台等应用场景。通过具体命令和示例代码,帮助读者快速上手并实现目标。
270 6
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
编码和解码的未来之路
编码和解码的未来之路
|
存储 编解码 算法
H.264编码及AAC编码基础 2
H.264编码及AAC编码基础
118 0
|
机器学习/深度学习 存储 编解码
Opus从入门到精通(八)Opus编码基础之压缩编码
莫尔斯码就是大家熟悉的电报码,它的发明为人类做出了巨大的贡献.该码采用"."和"-"来表示26个英文字母,这实质上还是二进制码(点为"0",而杠为"1"),但是它没有采用固定字长的编码方式,而是采用了常用字母用短码表示(如E用"."表示,T用"-"表示),不常用字母用长码表示(如Z用"--.."表示,j用"-..-"表示)的变长编码方式.通过对英文单词进行大量统计,找出各字母的概率,最后确定有12个字母出现概率最低,用4bit数字表示,有8个字母出现概率较低,用3bit数字表示;有4个字母出现概率较高,用2bit数字表示;有两个字母出现概率最高,用1bit表示,共26个字母.
628 0
|
编解码 算法
白话H.265/HEVC和H.264/AVC编码结构
写在前面 在信息化时代,视频技术和应用的发展,特别是高清(HD)、超高清(UHD)、多视点(MultiView)视频、VR/AR技术的兴起,海量的视频信息已如潮涌般深入到我们工作和生活的方方面面。随着5G通信技术逐渐铺开落地,移动端设备的传输数据量会进一步增加。
2826 0
|
内存技术
ffmpeg4音频pcm转aac编码
本文是基于ffmpeg4开发的音频编码器开源,并对其中出现的一些bug与各界同行探讨。
407 0
AAC音频格式分析与解码
一直在做一个语音项目,到了测试阶段,近来不是很忙,想把之前做的内容整理一下。   关于AAC音频格式基本情况,可参考维基百科http://en.wikipedia.org/wiki/Advanced_Audio_Coding   AAC音频格式分析 AAC音频格式有ADIF和ADTS: ADIF:Audio Data Interchange Format 音频数据交换格式。
2435 0