H.264视频压缩标准
H.264 这部分一直在讲,但是却没有系统的来说。接下来要详细。
参看:H.264视频压缩标准
一、简介
H.264是最新的视频压缩标准,它也称为MPEG-4 Part 10或AVC(高级视频编码)。据预测,在未来几年内H.264将成为行业首选的视频标准。
H.264是一个需要许可证才能使用的开放标准,可支持最当今市场上最高效的视频压缩技术。在不影响图像质量的情况下,与采用M-JPEG和MPEG-4 Part 2标准相比,H.264编码器可使数字视频文件的大小分别减少80%和50%以上。这意味着视频文件所需的网络带宽和存储空间将大大降低。或者从另一个角度来说,在某一特定比特率下,视频图像质量将得到显著提高。
H.264由电信和IT行业的标准化组织联合制定,与先前标准相比,H.264有望得到更广泛的应用。H.264已经应用于手机和数字视频播放器等新一代电子产品中,并且迅速获得广大最终用户的青睐。在线视频存储公司和电信公司等服务提供商也开始采用H.264标准。
在视频监控行业,H.264将很可能以最快速度应用于那些需要高帧速和高分辨率的监控场所,例如高速公路、机场和娱乐场所等。对于这些监控场所而言,使用30/25 fps(NTSC/PAL)的帧速已经成为一种通行的标准。然而,由于H.264能够减少带宽和存储需求,具有显著的经济性,因此可以帮助企业最大限度节省成本。
此外,由于H.264这种极其高效的压缩技术能够在不影响图像质量的前提下,对大文件进行大比例压缩并降低比特率,因此有望提高百万像素摄像机的普及速度。然而,事物都有其两面性。虽然H.264能够节省网络带宽和存储成本,然而它却对网络摄像机和显示终端提出了更高的性能要求。
二、H.264的发展
H.264是ITU-T的视频编码专家组(VCEG)和ISO/IEC运动图像专家组(MPEG)联合制定的新一代视频压缩标准。ITU-T是一个代表国际电信联盟协调制定电信标准的部门。ISO是指国际标准化组织。IEC是指国际电工委员会,负责制定所有电子、电气和相关技术的标准。H.264是ITU-T所使用的名称,而ISO/IEC将其命名为MPEG-4 Part 10/AVC,因为它代表的是MPEG-4系列标准中的一个新标准。MPEG-4系列标准包括了MPEG-4 Part 2等标准,MPEG-4 Part 2是一个应用于基于IP的视频编码器和网络摄像机的标准。
为了解决先前视频压缩标准中存在的不足,H.264的目标是支持:
> 高效压缩,在某一特定的视频质量下,与采用任何其它视频标准相比,可以使比特率平均降低50%。
> 更强大的容错能力,能够纠正各种网络的传输错误
> 低时延功能,并能够在更高时延的情况下提供更高质量的图像
> 通过简单的句法规范简化实施
> 精确匹配解码,严格规定了编码器和解码器如何进行数值计算,以避免错误累积
此外,H.264还能够灵活地支持有着不同比特率要求的各种监控应用。例如,在娱乐视频应用(包括广播、卫星电视、有线电视和DVD)中,H.264能够以高时延实现1-10Mbit/秒的性能。而对于电信服务来说,H.264能够以低时延实现低于1Mbit/秒的比特率。
三、视频压缩的工作原理
视频压缩通过减少和去除冗余视频数据的方式,达到有效发送和存储数字视频文件的目的。在压缩过程中,需要应用压缩算法对源视频进行压缩以创建压缩文件,以便进行传输和存储。要想播放压缩文件,则需要应用相反的解压缩算法对视频进行还原,还原后的视频内容与原始的源视频内容几乎完全相同。压缩、发送、解压缩和显示文件所需的时间称为延时。在相同处理能力下,压缩算法越高级,延时就越长。
视频编解码器(编码器/解码器)是指两个协同运行的压缩-解压算法。使用不同标准的视频编解码器通常彼此之间互不兼容;也就是说,使用一种标准进行压缩的视频内容无法使用另外一种标准进行解压缩。例如,MPEG-4 Part 2解码器就不能与H.264编码器协同运行。这是因为一种算法无法正确地对另外一个算法的输出信号进行解码,然而我们可以在同一软件或硬件中使用多种不同的算法,以支持对多种格式的文件进行压缩。由于不同的视频压缩标准会使用不同的方法来减少数据量,因此压缩结果在比特率、质量和延时方面也各不相同。
此外,由于编码器的设计者可能会选择使用某个标准所定义的不同工具集,因此,即使是使用相同压缩标准的编码器之间,其压缩结果也可能会存在差异。不过,只要编码器的输出信号符合标准的格式以及解码器的要求,就可以采用不同的实施方式。这是非常有利的,因为不同的实施方式可实现不同的目标,满足不同的预算要求。对用于管理光介质存储的非实时专业软件编码器来说,应该能够比用于视频会议的集成在手持设备中的实时硬件编码器提供质量更高的编码视频。因此,即使是某个指定的标准也无法保证提供指定的比特率或质量。而且,如果不事先确定实施方式,一个标准就无法与其它标准进行正确的性能对比,甚至也无法与同一标准的其它实施方式进行正确的性能对比。与编码器不同,解码器必须实施某个标准的所有必需部分,才能对符合标准的比特流进行解码。这是因为标准中明确规定了解压缩算法应如何对压缩视频的每个比特进行还原。
下图是在相同图像质量水平下,采用下列视频标准的比特率对比:M-JPEG,MPEG-4 Part 2(无运动补偿)、MPEG-4 Part 2(有运动补偿)和H.264(基准类)。
上图,对于视频序列样本来说,使用H.264编码器能够比使用有运动补偿的MPEG-4编码器降低50%的比特率(bps)。在没有运动补偿的情况下,H.264编码器的效率至少比MPEG-4编码器高3倍,比M-JPEG编码器高6倍。
四、H.264类别和等级
参与制定H.264标准的联合组织致力于创建一个简单明了的解决方案,最大限度地限制选项和特性的数量。和其它视频标准一样,H.264标准的一个重要方面是通过类别(算法特性集)和等级(性能等级)中提供的功能,以最佳的方式支持常见应用和通用格式。
H.264有7个类别,每个类别都针对某一类特定的应用。此外,每个类别都定义了编码器能够使用哪些特性集,并限制了解码器在实施方面的复杂性。
网络摄像机和视频编码器最有可能使用的是基准类别,此类别主要针对计算资源有限的应用。对于嵌入在网络视频产品中的实时编码器来说,在特定的可用性能下,基准类别最为适用。此类别能够实现低延时,这对监控视频来说是一个很重要的要求,而且对于支持PTZ网络摄像机实现实时的平移/倾斜/缩放(PTZ)控制来说尤为重要。
H.264分为11个功能等级,对性能、带宽和内存需求进行了限制。每个等级都规定了从QCIF到HDTV等各种分辨率所对应的比特率和编码速率(每秒宏块数)。分辨率越高,要求的等级就越高。
五、帧的基本知识
这部分之前有讲过的,参看:图像和流媒体 -- I 帧,B帧,P帧,IDR帧的区别
根据H.264的不同类别,编码器会使用不同类型的帧,例如I帧、P帧和B帧。
I帧(帧内编码帧)是一种自带全部信息的独立帧,无需参考其它图像便可独立进行解码。视频序列中的第一个帧始终都是I帧。如果所传输的比特流遭到破坏,则需要将I帧用作新查看器的起始点或重新同步点。I帧可以用来实现快进、快退以及其它随机访问功能。如果新的客户端将参与查看视频流,编码器将以相同的时间间隔或者根据要求自动插入I帧。I帧的缺点在于它们会占用更多的数据位,但从另一方面看,I帧不会产生可觉察的模糊现象。
P帧(帧间预测编码帧)需要参考前面的I帧和/或P帧的不同部分才能进行编码。与I帧相比,P帧通常占用更少的数据位,但其缺点是,由于P帧对前面的P和I参考帧有着复杂的依赖性,因此对传输错误非常敏感。
B帧(双向预测编码帧)需要同时以前面的帧和后面的帧作为参考帧。
上图,带有I帧、B帧和P帧的典型视频序列。P帧只需要参考前面的I帧或P帧,而B帧则需要同时参考前面和后面的I帧或P帧。
当视频解码器逐个帧地对比特流进行解码以便重构视频时,必须始终从I帧开始解码。如果使用了P帧和B帧,则必须与参考帧一起解码。
在H.264基准类中,仅使用I帧和P帧。由于基准类没有使用B帧,所以可以实现低延时,因此是网络摄像机和视频编码器的理想选择。
然后,参看:FFmpeg再学习 -- 视音频基础知识
还可以通过视频编码数据工具 Elecard Stream Eye,查看H.264码流分析信息。
六、减少数据量的基本方法
可以通过各种方法在一个图像帧内或者在一系列帧之间减少视频数据量。
在某个图像帧内,只需要删除不必要的信息就可以减少数据量,但这样做会导致图像的分辨率下降。
在一系列的帧内,可以通过差分编码这样的方法来减少视频数据量,包括H.264在内的大多数视频压缩标准都采用这种方法。在差分编码中,会将一个帧与参考帧(即前面的I帧或P帧)进行对比,然后只对那些相对于参考帧来说发生了变化的像素进行编码。通过这种方法,可以降低需要进行编码和发送的像素值。
上图,对M-JPEG格式来说,上述序列中的三个图像分别作为独立的图像(I帧)进行编码和发送,彼此之间互不依赖。
上图,对差分编码(包括H.264在内的大多数视频压缩标准都采用这种方法)来说,只有第一个图像(I帧)是将全帧图像信息进行编码。在后面的两个图像(P帧)中,其静态部分(即房子)将参考第一个图像,而仅对运动部分(即正在跑步的人)使用运动矢量进行编码,从而减少发送和存储的信息量。
如果是根据像素块(宏块)而不是单个的像素来检测差别并进行差分编码,还可以进一步减少需要编码的信息量;因此,可以对更大的区域进行对比,而只需对那些存在重大差别的块进行编码。此外,对发生更改的区域位置进行标记的相关开销也将大大降低。
然而,如果视频中存在大量物体运动的话,差分编码将无法显著减少数据量。这时,可以采用基于块的运动补偿技术。基于块的运动补偿考虑到视频序列中构成新帧的大量信息都可以在前面的帧中找到,但可能会在不同的位置上。所以,这种技术将一个帧分为一系列的宏块。然后,通过在参考帧中查找匹配块的方式,逐块地构建或者“预测”一个新帧(例如P帧)。如果发现匹配的块,编码器只需要对参考帧中发现匹配块的位置进行编码。与对块的实际内容进行编码相比,只对运动矢量进行编码可以减少所占用的数据位。
上图,对M-JPEG格式来说,上述序列中的三个图像分别作为独立的图像(I帧)进行编码和发送,彼此之间互不依赖。
七、H.264的效率
H.264将视频压缩技术提升到一个新的高度。在H.264中,将通过新的高级帧内预测方法对I帧进行编码。这种方法通过对帧中每个宏块内较小的像素块进行连续预测,可以大大减少I帧所占的数据位并保持较高的质量。这一点可通过在与进行帧内编码的新4×4像素块相邻接的前几个编码像素中,寻找匹配的像素来实现。通过重复利用已编码的像素值,可以极大地减少需要编码的位数。新的帧内预测功能是H.264技术的关键部分,实验证明,这种方法非常有效。与只使用I帧的M-JPEG视频流相比,只使用I帧的H.264视频流的文件大小要小得多。
上图,在由16个像素块构成的宏块中,对其中1个像素块内的4×4像素进行编码时,帧内预测所采用的几种模式的图示。在宏块的16个像素块中,每个像素块都可以使用不同的模式进行编码。
上图,以上是H.264帧内预测方法的效率图示。通过这种方法,帧内预测图像将“免费”发送。只需对残留图像和帧内预测模式进行编码,就可以生成输出图像。
对P帧和B帧进行编码时所采用的基于块的运动补偿,在H.264中也得到了改进。H.264编码器可以在一个或多个参考帧的少数或众多区域内,以低至子像素的精度搜索匹配的块。为了提高匹配率,可以对块的大小和形状进行调整。在参考帧中,对于找不到匹配块的区域,将会使用帧内编码的宏块。H.264基于块的运动补偿具有高度的灵活性,非常适合人群比较拥挤的监控场所,因为它能够保证较高的质量,以满足严格的应用要求。运动补偿是视频编码器要求最严格的一个方面,H.264编码器实施运动补偿的不同方式以及其实施程度,将会影响视频压缩的效率。
对于H.264,通过使用环内去块效应滤波器,可以减少在使用M-JPEG和MPEG标准(而不是H.264标准)的高度压缩视频中通常出现的图像模糊现象。此过滤器能够通过自适应强度使块边缘变得平滑,从而确保输出几乎完美无缺的解压缩视频。
上图,从右边的图中我们可以看到,在应用了去块效应滤波器之后,左图中高度压缩图像的块状效应已经大大降低。
八、总结
H.264代表着视频压缩技术的一个重大飞跃。由于该技术具有更精确的预测能力和更高的容错能力,因此可实现更高的压缩效率。它将有可能推动视频编码器进一步向前发展,从而能够在同样的比特率下提供更高质量的视频流、更高的帧速以及更高的分辨率(与先前的标准相比);或者反过来说,能够在同样的视频质量下降低比特率。
H.264是ITU、ISO和IEC首次在视频压缩方面联合制定的一个通用国际标准。由于其具有高度的灵活性,H.264已广泛应用于各种领域中,例如:高清DVD(例如蓝光)、数字视频广播(包括高清TV)、在线视频存储(例如YouTube)、3G移动电话、软件(例如QuickTime、Flash和苹果计算机公司的MacOS X操作系统等),以及家用电视游戏机(例如PlayStation 3等)。在众多行业的支持下,以及在为满足个人消费者和专业用户需求的应用的推动下,H.264有望取代当今市场中使用的其它压缩标准和方法。
随着H.264格式更加广泛地应用于网络摄像机、视频编码器和视频管理软件,系统设计商和集成商将需要确保他们所选择的产品和厂商能够支持这一全新的开放标准。就目前来说,能够同时支持H.264和M-JPEG的网络视频产品具有最高的灵活性和集成能力,因此是用户的理想选择。
H.264视频压缩标准的更多相关文章
- 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...
- H.264 / MPEG-4 Part 10 White Paper-翻译
1. Introduction Broadcast(广播) television and home entertainment(娱乐) have been revolutionised(彻底改变) b ...
- H.264 SVC 与H.264 AVC
分级视频编码技术实现一次性编码产生具有不同帧率.分辨率的视频压缩码流,然后根据不同网络带宽.不同的显示屏幕和终端解码能力选择需要传输的视频信息量,以此实现视频质量的自适应调整 AVC 实际上是 H.2 ...
- H.264开源解码器评测
转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...
- 【一】H.264/MPEG-4 Part 10 White Paper 翻译之 Overview of H.264
翻译版权所有,转载请注明出处~ xzrch@2018.09.14 ------------------------------------------------------------------- ...
- 【图像处理】H.264开源解码器评测
转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...
- H.264/H265码流解析
H.264/H265码流解析 一.H.264码流解析 一个原始的H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成 一个原始的 ...
- H.264的优势和主要特点
H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压 ...
- h.264 Mode Decision
Mode Decision(模式选择)决定一个宏块以何种类型进行分割.宏块的分割类型有以下几种: //P_Skip and B_Skip means that nothing need to be e ...
随机推荐
- 与图论的邂逅06:dfs找环
当我在准备做基环树的题时,经常有了正解的思路确发现不会找环,,,,,,因为我实在太蒻了. 所以我准备梳理一下找环的方法: 有向图 先维护一个栈,把遍历到的节点一个个地入栈.当我们从一个节点x回溯时无非 ...
- 1.8V升3V芯片,1.8V升3.3V升压芯片方案
两节干电池由于耗电量电压会降低,无法长期稳定的输出3V或者3.3V供电,直接两节干电池会供电电压不稳,影响后面电路稳定.两节干电池的供电电压在1.8V-3.2V左右 1.8V升3V升压芯片方案, 如P ...
- STL_deque容器
一.deque简介 deque是"double-ended queue"的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的. deque在接口 ...
- 配接Cisco设备
- Vue之创建组件之配置路由!
Vue之创建组件之配置路由!== 第一步: 当然就是在我们的试图文件夹[views]新建一个文件夹比如home 在home文件夹下面新建一个文件index.vue 第二步:在router目录下做如下事 ...
- h3c交换机配置ssh密码验证登录方式
一.背景: 1.由于PC机串口不支持热插拔,请不要在交换机带电的情况下,将串口插入或者拔出PC机.当连接PC和交换机时,请先安装配置电缆的DB-9端到PC机,再连接RJ-45到交换机:在拆下时,先拔出 ...
- python 10函数式编程
函数式编程 函数是Python内建支持的一种封装, ...
- 手把手教你定位常见Java性能问题
概述 性能优化一向是后端服务优化的重点,但是线上性能故障问题不是经常出现,或者受限于业务产品,根本就没办法出现性能问题,包括笔者自己遇到的性能问题也不多,所以为了提前储备知识,当出现问题的时候不会手忙 ...
- CF570B
题意转化: 一条长为n的路,路上有一点m,问你在什么地方再设一点a可以使路上任意一点到点a的概率大于到点m的概率 所谓概率更大,也就是说从离点m更远的一端到点a的长度小于到点m的长度 (因为此长度内所 ...
- Go语言学习笔记(4)——并发编程
Golang在语言级别支持了协程,由runtime进行管理. 在Golang中并发执行某个函数非常简单: func Add(x, y int) { fmt.Println(x + y) } func ...