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码流分析信息。

红色的帧: I帧;蓝色的帧: P帧;绿色的帧: B帧。

六、减少数据量的基本方法

可以通过各种方法在一个图像帧内或者在一系列帧之间减少视频数据量。
在某个图像帧内,只需要删除不必要的信息就可以减少数据量,但这样做会导致图像的分辨率下降。
在一系列的帧内,可以通过差分编码这样的方法来减少视频数据量,包括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视频压缩标准的更多相关文章

  1. 视频基础知识:浅谈视频会议中H.264编码标准的技术发展

    浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...

  2. H.264 / MPEG-4 Part 10 White Paper-翻译

    1. Introduction Broadcast(广播) television and home entertainment(娱乐) have been revolutionised(彻底改变) b ...

  3. H.264 SVC 与H.264 AVC

    分级视频编码技术实现一次性编码产生具有不同帧率.分辨率的视频压缩码流,然后根据不同网络带宽.不同的显示屏幕和终端解码能力选择需要传输的视频信息量,以此实现视频质量的自适应调整 AVC 实际上是 H.2 ...

  4. H.264开源解码器评测

    转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...

  5. 【一】H.264/MPEG-4 Part 10 White Paper 翻译之 Overview of H.264

    翻译版权所有,转载请注明出处~ xzrch@2018.09.14 ------------------------------------------------------------------- ...

  6. 【图像处理】H.264开源解码器评测

    转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...

  7. H.264/H265码流解析

    H.264/H265码流解析 一.H.264码流解析 一个原始的H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成 一个原始的 ...

  8. H.264的优势和主要特点

    H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压 ...

  9. h.264 Mode Decision

    Mode Decision(模式选择)决定一个宏块以何种类型进行分割.宏块的分割类型有以下几种: //P_Skip and B_Skip means that nothing need to be e ...

随机推荐

  1. let关键字:加强版的var关键字

    本文首发于个人网站:let关键字:加强版的var关键字 你好,今天大叔想和你唠扯唠扯 ES6 新增的关键字 -- let.再说 let 的具体用法之前,大叔想先和你说说大叔自己对 let 的感受 -- ...

  2. DOCKER 安装步骤-最靠谱的笔记

    一.系统环境规划 服务器名 项目名称 docker 操作系统 CentOS Linux release 7.1.1503 (Core) Docker 版本 17.03.2-ce   二.Docker ...

  3. 解决MyBatis-Plus 3.3.1中自动生成代码tinyint(1)无法自动转换为Boolean 的办法

    解决方法 1.在测试类中新建一个类MySqlTypeConvertCustom,继承MySqlTypeConvert并实现ITypeConvert后覆盖processTypeConvert方法. 2. ...

  4. java基础-01代理类

    简单的代理类实现案例主实现类:ProxyTestimport java.lang.reflect.InvocationHandler;import java.lang.reflect.Proxy;im ...

  5. https://tools.ietf.org/html/rfc8017

    PKCS #1: RSA Cryptography Specifications Version 2.2

  6. 防sql注入之参数绑定 SQL Injection Attacks and Defense 预处理语句与存储过程

    http://php.net/manual/zh/pdo.prepared-statements.php 预处理语句与存储过程 很多更成熟的数据库都支持预处理语句的概念.什么是预处理语句?可以把它看作 ...

  7. loj10006数列分段

    题目描述 对于给定的一个长度为 N 的正整数数列 A,现要将其分成连续的若干段,并且每段和不超过 M(可以等于 M),问最少能将其分成多少段使得满足要求. 输入格式 第一行包含两个正整数 N,M表示了 ...

  8. Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息

    Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息 一.通过redis_exporter监控redis 1.1 下载镜像 1.2 运行服务 ...

  9. 使用Docker Registry管理Docker镜像

    文章目录 使用Docker Registry管理Docker镜像 1.使用Docker Hub管理镜像 1.1注册与登录 1.2创建仓库 1.3推送镜像 2. 使用私有仓库管理镜像 2.1 搭建私有仓 ...

  10. Asp.net core通过自定义特性实现双端数据验证的一些想法

    asp.net core集成了非常方便的数据绑定和数据校验机制,配合操作各种easy的vs,效率直接高到飞起. 通过自定义验证特性(Custom Validation Attribute)可以实现对于 ...