视频编解码及H264技术

【H.264/AVC视频编解码技术详解】一. 视频信息与压缩编码

2016年07月31日 21:30:02  阅读数 7460更多

分类专栏: 视频编解码 先进视频压缩编码(Advanced Video Coding, H.264/AVC)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/shaqoneal/article/details/52080975

《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看!

“纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会!

链接地址:H.264/AVC视频编解码技术详解

本节视频免费


一、人与世界的交互

从远古时代人类文明诞生之日起,人类就在人类就在不断为适应环境、改造环境而艰苦斗争。其中最为基础的前提就是利用感官对外界信息的获取。利用各种感官,人类可以与世界环境进行多种不同的信息交互,例如:

  • 嗅觉:识别各种气味,辨别环境变化和食物、饮水的质量等;
  • 听觉:识别同类的联络信息和天敌等危险信号等
  • 味觉:挑选最适宜的食物
  • 触觉:制作与使用工具时非常重要

另外,最重要的一种自然就是视觉。据统计,在人的各种感官中,视觉占据了超过7成的信息获取量。而且视觉可以使人对环境变化做出最直接的反映。

在文明的发展过程中,人们不满足于仅仅靠着口述记录所看到的影像,而是希望能用更加直观的形式将其记录下来。经过了多年的发展,经过多年的发展,视频已经成为记录和重现信息最为高效的方式,可以在相对很短的时间内传递大量的信息。

  • 视频通过其中每一帧的图像表达信息;
  • 视频包含的音频可提供大量信息;
  • 视频通过图像的运动、场景的变换提供信息;

综上我们可知,视频信息提供了最为接近人的直接体验的信息表示方式。


二、视频信号的表示方法:RGB与YUV

真实世界中的影像与早期的视频处理与传输系统所处理的都是模拟信号。然而为了能适应现代的计算机、网络传输与数字视频处理系统,模拟的视频信号必须转换成数字格式。

在数字格式的视频信号中,组成视频的基本结构是一帧帧连续而相关联的图像。组成每一帧图像的基本结构是成平面紧密排列的像素,每个像素代表图像中的一个彩色的点。为了使得像素以彩色表示,每一个像素由颜色的三基色取不同的分量构成:

  • R:Red——红色分量;
  • G:Green——绿色分量;
  • B:Blue——蓝色分量;

使用这种方式表示彩色图像的方式为RGB颜色空间。RGB颜色空间常用于显示器系统。通过这种形式表示的图像,每个像素的每一个颜色分量用1个字节表示,则可以表示256×256×256种不同的颜色。在常见的图像格式中,如位图(bmp)格式以RGB形式保存数据。

在实际的编解码等视频处理的过程中,YUV格式比RGB格式更为常用。在YUV格式中,一个像素由亮度分量和色度分量表示,每一个像素由一个亮度分量Y和两个色度分量U/V组成。亮度分量可以与色度分量一一对应,也可以对色度分量进行采样,即色度分量的总量少于亮度分量。

在YUV中之所以采用这样的方式,主要是因为人的感官对亮度信息的敏感度远高于对色度信息。因此相对于其他像素格式,YUV的最大优势是可以适当降低色度分量的采样率,并保证不对图像造成太大影响。而且,使用这种方式还可以兼容黑白和彩色显示设备。对于黑白显示设备,只需要去除色度分量,只显示亮度分量即可。

在YUV中常见的色度采样方式有4:4:4、4:2:2和4:2:0等,如下图所示:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


三、视频压缩编码

编码这一概念在通信与信息处理领域中广泛使用,其基本原理是将信息按照一定规则使用某种形式的码流表示与传输。常用的需要编码的信息主要有:文字、语音、视频和控制信息等。

1. 为什么需要对视频编码

对于视频数据而言,视频编码的最主要目的是数据压缩。这是因为动态图像的像素形式表示数据量极为巨大,存储空间和传输带宽完全无法满足保存和传输的需求。例如,图像的每个像素的三个颜色分量RGB各需要一个字节表示,那么每一个像素至少需要3字节,分辨率1280×720的图像的大小为2.76M字节。

如果对于同样分辨率的视频,如果帧率为25帧/秒,那么传输所需的码率将达到553Mb/s!如果对于更高清的视频,如1080P、4k、8k视频,其传输码率更是惊人。这样的数据量,无论是存储还是传输都无法承受。因此,对视频数据进行压缩称为了必然之选。

2. 视频信息为什么可以被压缩

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

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

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

3. 视频编码标准化组织

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

ITU-T,全称International Telecommunications Union - Telecommunication Standardization Sector,即国际电信联盟——电信标准分局。该组织下设的VECG(Video Coding Experts Group)主要负责面向实时通信领域的标准制定,主要制定了H.261/H263/H263+/H263++等标准。

ISO,全称International Standards Organization,即国际标准化组织。该组织下属的MPEG(Motion Picture Experts Group),即移动图像专家组主要负责面向视频存储、广播电视、网络传输的视频标准,主要制定了MPEG-1/MPEG-4等。

实际上,真正在业界产生较强影响力的标准均是由两个组织合作产生的。比如MPEG-2、H.264/AVC和H.265/HEVC等。

不同标准组织制定的视频编码标准的发展如下图所示:


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

为了专门处理视频信息中的多种冗余,视频压缩编码采用了多种技术来提高视频的压缩比率。其中常见的有预测编码、变换编码和熵编码等。

1. 预测编码

预测编码可以用于处理视频中的时间和空间域的冗余。视频处理中的预测编码主要分为两大类:帧内预测和帧间预测。

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

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

2. 变换编码

目前主流的视频编码算法均属于有损编码,通过对视频造成有限而可以容忍的损失,获取相对更高的编码效率。而造成信息损失的部分即在于变换量化这一部分。在进行量化之前,首先需要将图像信息从空间域通过变换编码变换至频域,并计算其变换系数供后续的编码。

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

3. 熵编码

视频编码中的熵编码方法主要用于消除视频信息中的统计冗余。由于信源中每一个符号出现的概率并不一致,这就导致使用同样长度的码字表示所有的符号会造成浪费。通过熵编码,针对不同的语法元素分配不同长度的码元,可以有效消除视频信息中由于符号概率导致的冗余。

在视频编码算法中常用的熵编码方法有变长编码和算术编码等,具体来说主要有上下文自适应的变长编码(CAVLC)上下文自适应的二进制算术编码(CABAC)

 

【H.264/AVC视频编解码技术详解】三. H.264简介

2016年07月31日 21:36:23  阅读数 7526 文章标签: h.264视频压缩标准 更多

分类专栏: 视频编解码 先进视频压缩编码(Advanced Video Coding, H.264/AVC)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/shaqoneal/article/details/52081021

《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看!

“纸上得来终觉浅,绝知此事要躬行”,只有自己按照标准文档以代码的形式操作一遍,才能对视频压缩编码标准的思想和方法有足够深刻的理解和体会!

链接地址:H.264/AVC视频编解码技术详解

本节视频免费


一. H.264视频编码标准

H.264视频编码标准是ITU-T与MPEG合作产生的又一巨大成果,自颁布之日起就在业界产生了巨大影响。严格地讲,H.264标准是属于MPEG-4家族的一部分,即MPEG-4系列文档ISO-14496的第10部分,因此又称作MPEG-4/AVC。同MPEG-4重点考虑的灵活性和交互性不同,H.264着重强调更高的编码压缩率和传输可靠性,在数字电视广播、实时视频通信、网络流媒体等领域具有广泛的应用。


二. H.264视频编码方法简介

在整体的编码框架方面,H.264依然采用了与前期标准类似的结构,即块结构的混合编码框架。其主要结构图如下图所示:
在这里插入图片描述

在H.264进行编码的过程中,每一帧的H图像被分为一个或多个条带(slice)进行编码。每一个条带包含多个宏块(MB,Macroblock)。宏块是H.264标准中基本的编码单元,其基本结构包含一个包含16×16个亮度像素块和两个8×8色度像素块,以及其他一些宏块头信息。在对一个宏块进行编码时,每一个宏块会分割成多种不同大小的子块进行预测。帧内预测采用的块大小可能为16×16或者4×4,帧间预测/运动补偿采用的块可能有7种不同的形状:16×16、16×8、8×16、8×8、8×4、4×8和4×4。相比于早期标准只能按照宏块或者半个宏块进行运动补偿,H.264所采用的这种更加细分的宏块分割方法提供了更高的预测精度和编码效率。在变换编码方面,针对预测残差数据进行的变换块大小为4×4或8×8(仅在FRExt版本支持)。相比于仅支持8×8大小的变换块的早期版本,H.264避免了变换逆变换中经常出现的失配问题。

H.264标准中采用的熵编码方法主要有上下文自适应的变长编码CAVLC和上下文自适应的二进制算数编码CABAC,根据不同的语法元素类型指定不同的编码方式。通过这两种熵编码方式达到一种编码效率与运算复杂度之间的平衡。

同前期标准类似,H.264的条带也具有不同的类型,其中最常用的有I条带、P条带和B条带等。另外,为了支持码流切换,在扩展档次中还定义了SI和SP片。

  • I条带:帧内编码条带,只包含I宏块;
  • P条带:单向帧间编码条带,可能包含P宏块和I宏块;
  • B条带:双向帧间编码条带,可能包含B宏块和I宏块;

视频编码中采用的如预测编码、变化量化、熵编码等编码工具主要工作在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和场编码。

三. H.264标准采用的编码工具

在H.264中使用的编码技术主要有以下类型:

帧内预测

H.264中采用了基于像素块的帧内预测技术。主要可分为以下不同类型:

  • 16×16大小的亮度块:4种预测模式
  • 4×4大小的亮度块:9种预测模式
  • 色度块:4种预测模式,同16×16的亮度块

16×16亮度块和色度块的4种预测模式如下图:
在这里插入图片描述

4×4亮度块的9种预测模式如下图表示:
在这里插入图片描述

帧间预测

H.264中的帧间预测方法采用了基于块的运动估计和补偿方法,其主要特点有:

  • 多个候选参考帧;
  • B帧作为参考帧;
  • 任意参考帧排序;
  • 多种运动补偿像素块形状,包括16×16、16×8、8×16、8×8、8×4、4×8和4×4像素;
  • 1/4像素(亮度)的亚像素插值;
  • 对交错视频的基于帧或场的运动估计;

进行帧间预测的宏块进行子宏块分割的方式如图所示:
在这里插入图片描述

亚像素插值的表示如下图。其中红色点表示图像中的整像素点的位置,绿色点表示两个正像素之间的1/2像素插值的位置,紫色点表示1/4像素插值的位置。
在这里插入图片描述

交错视频编码

针对隔行扫描的视频,H.264专门定义了用于处理此类交错视频的算法。

  • PicAFF:Picture Adaptive Frame Field——图像层的帧场自适应;
  • MBAFF:MacroBlock Adaptive Frame Field——宏块层的帧场自适应;

变换和量化编码

H.264的变换编码创新性地采用了类DCT的整数变换,有效降低了运算复杂度。对于基础版H.264,变换矩阵为4×4;在FRExt扩展中,还支持8×8的变换矩阵。

H.264的量化算法仍然采用标量量化方法。

无损熵编码算法

H.264标准针对不同的语法元素指定了不同的熵编码算法,主要有:

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

其他技术

除了上述的核心算法之外,H.264还定义了包括去块环路滤波器、SI/SP帧、码率控制等多种技术。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值