视频初步学习

Video Learning

Posted by Elliot on November 18, 2017

版权声明:本文皆摘抄自网络,仅用于学习参考;如有侵权,请随时联系。

视频格式

我们平常笼统说的「视频格式」其实包含三个部分:视频编码、音频编码、容器格式(封装格式)。其中「编码」这个概念其实又包含两个方面:编码和解码。「视频编码」作为动词指的是将动态的图像信息转化为二进制数据的过程;其逆过程称为「视频解码」。

我们常见的视频文件扩展名包括 .avi, .rmvb, .mp4, .mkv 等。其实扩展名都是指的某种容器格式。这些容器里面存放的数据可能采用了多种不同的编码方式。例如,常见的 avi 文件里面存放的通常是 xvid 或 divx 编码的视频和 mp3 编码的音频。rmvb 文件里面存放的通常是 RV40 编码的视频和 cook 编码的音频。mp4 文件里面通常存放的是 H.264 编码的视频和 AAC 编码的音频。mkv 文件里面存放的则可能包含前面各种。

编码格式

一、MPEG视频编码

MPEG的英文全称为Moving Picture Expert Group,即运动图像专家组格式,家里常看的VCD、SVCD、DVD就是这种格式。MPEG文件格式是运动图像压缩算法的国际标准,它采用了有损压缩方法从而减少运动图像中的冗余信息。MPEG的压缩方法说的更加深入一点就是保留相邻两幅画面绝大多数相同的部分,而把后续图像中和前面图像有冗余的部分去除,从而达到压缩的目的。目前MPEG格式有三个压缩标准,分别是MPEG-1、MPEG-2、和MPEG-4,但真正能达到高清标准的只有MPEG-2和MPEG-4。

1、MPEG-2简介 1)MPEG-2编码的DVD MPEG-2制定于1994年,设计目标是高级工业标准的图象质量以及更高的传输率。MPEG-2所能提供的传输率在3-10Mbits/sec间,其在 NTSC制式下的分辨率可达720X486,MPEG-2也可提供并能够提供广播级的视像和CD级的音质。MPEG-2的音频编码可提供左右中及两个环绕 声道,以及一个加重低音声道,和多达7个伴音声道(这就是DVD可有8种语言配音的原因)。 由于MPEG-2的出色性能表现,已能适用于高清视频,使得原打算为高清视频设计的MPEG-3,还没出世就被抛弃了。MPEG-3要求传输速率在20Mbits/sev-40Mbits/sec间,但这将使画面有轻度扭曲。 2)MPEG-2 TS编码的高清视频 MPEG-2高清视频采用的编码是MPEG-2 TS格式,其英文全称是(MPEG-2 Transport Stream),这是一种视频流格式,主要用于实时传送节目,目前已经成为数字电视领域中普遍应用的系统层编码标准。 MPEG-2 TS格式的高清视频文件一般采用mpg、tp、ts为后缀。采用MPEG-2 TS格式压缩后的高清视频文件通常都相当大,以一部90分钟的电影为例,文件大小通常都在8GB以上,有的甚至超过15GB。在播放以tp和ts为后缀的高清视频文件时也比较麻烦,因为文件中分别包含有AC’3音频信息和MPEG-2视频信息,需要使用专门的软件来进行播放。

2、MPEG-4简介 MPEG-4制定于1998年,MPEG-4是为了播放流式媒体的高质量视频而专门设计的,它可利用很窄的带度,通过帧重建技术,压缩和传输数据,以求使用最少的数据获得最佳的图像质量。这种编码方式多用于HDTV-Rip上,它把原有的高清视频文件按照比例缩小到一定的尺寸,以减少文件的大小,同时画面效果不差于DVD效果,以此来寻求一个画面效果和文件尺寸的平衡。相对于高清视频来说,MPEG-4格式 还显得有点不够用,因此它也不是主流的高清视频信号来源。这种视频格式的文件扩展名包括.asf、.mov和DivX 、AVI等。

二、H.264视频编码(MPEG-4 Part 10)

H.264是一种高性能的视频编解码技术。目前国际上制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准有H.261、H.263、H.263+等,另一个是“国际标准化组织(ISO)”它制定的标准有MPEG-1、MPEG-2、MPEG-4等。而H.264则是由两个组织联合组建的联合视频组(JVT)共同制定的新数字视频编码标准,所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高级视频编码(Advanced Video Coding,AVC),而且它将成为MPEG-4标准的第10部分。因此,不论是MPEG-4 AVC、MPEG-4 Part 10,还是ISO/IEC 14496-10,都是指H.264。 H.264最具价值的部分是更高的数据压缩比,在同等的图像质量,H.264的数据压缩比能比DVD系统中使用的 MPEG-2高2~3倍,比MPEG-4高1.5~2倍。举个例子,原始文件的大小如果为100GB,采用MPEG-2压缩标准压缩后变成4GB,压缩比为25∶1,而采用H.264压缩标准压缩后变为1GB,从100GB到1GB,H.264的压缩比达到惊人的100∶1。尤其值得一提的是,H.264在具有高压缩比的同时还拥有高质量流畅的图像。 正因为如此,经过H.264压缩的视频数据,在网络传输过程中所需要的带宽更少,也更加经济。在MPEG-2需要6Mbps的传输速率匹配时,H.264只需要1Mbps~2Mbps的传输速率。 H.264格式的文件一般采用mkv后缀,mkv是一种新兴的多媒体封装格式,可以将各类视频编码、16条或以上不同格式的音频和语言不同的字幕封装在一个文件内,它具有开放源代码、音视频编码丰富等优势,已经得到众多视频压制组和玩家的支持,正逐渐成为高清视频的主流格式。

H.265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频。它与H.264有着相类似的算法架构,并同时对一些相关技术加以改进而大幅提高视频质量。举例来说,H.264编码器可以以1Mbps码率实现标清数字视频压缩;而H.265编码器则可以利用相同的码率编码720P甚至更高的分辨率的高清视频。这也意味着,在现有的家庭网络情况下,我们的智能手机、平板机等移动设备将能够直接在线播放1080p的全高清视频。同时,H.265标准也同时支持4K和8K超高清视频。

三、WMV-HD/VC-1视频编码

WMV-HD是由软件业的巨头微软公司所创立的一种视频压缩格式。其压缩率远高于MPEG-2标准,同样是2小时的HDTV节目,如果使用MPEG-2最多只能压缩至30GB,而使用WMV-HD这样的高压缩率编码器,在画质丝毫不降的前提下都可压缩到15GB以下。虽然WMV-HD是微软的独有标准,在开放性和兼容性上没有其他几种格式好,但由于目前大家都在使用微软的操作系统,因此推出之后仍然迅速普及。

除了WMV-HD以外,微软WMV第九版(WMV9)编码技术叫做VC-1,2003年正式提出,于2006年正式成为国际标准,是微软开发的视频压缩技术系列中的最新版本。VC-1结合几种编码格式的优点于一身,在压缩比率上介于H.264与MPEG-2之间,画质表现方面与H.264接近,且在编码算法的复杂度上只为H.264的一半,处于一个中间的平衡点位置,对硬件要求较低、高压缩率、高画质、低耗时等特点使得VC-1成为一种比较理想的编码方式,发展前景较为可观。 WMV-HD及VC-1编码的视频文件一般采用wmv为后缀,wmv文件通常包括了WMV格式编码的视频和WMA编码的音频。

四、RMVB视频编码

当前在网络上见的最多的,肯定是RMVB视频,RMVB之所以这么流行,主要是RMVB在图像质量与文件大小之间取得了最好的平衡。一部720P的电影如果采用H.264编码,一般会有4G的大小,但如果改成RMVB格式,1G大小就可以了。目前国内的家庭宽带一般只有2M~4M,假如4M带宽,下载1G文件大概需要1个小时,下载4G文件最少在4个小时以上,因此很多人都会选择下载RMVB文件。虽然RMVB文件的清晰度比不上H.264,但是基本上可以满足大部分人的要求了。

RMVB之所以可以图像质量与文件大小之间取得最好的平衡,主要是使用了可变比特率的编码。RMVB中的VB指VBR,Variable Bit Rate(可改变之比特率),RMVB打破了原先RM格式那种平均压缩采样的方式,在保证平均压缩比的基础上,采用浮动比特率编码的方式,将较高的比特率用于复杂的动态画面(如歌舞、飞车、战争等),而在静态画面中则灵活地转为较低的采样率,从而合理地利用了比特率资源,使RMVB最大限度地压缩了影片的大小,最终拥有了近乎完美的接近于H.264品质的视听效果。 虽然RMVB表现出色,可以达到720P以上的分别率,但在大屏幕的电视上观看,会有比较明显的色块,始终算不上是高清视频。但它最大的优点是文件体积较小,在国内的互联网带宽没有大幅度提升之前,估计还会流行很长的一度时间。

五、总结

总的来说,MPEG2由于压缩比例较小,视频所占空间太大,目前已经基本处于了被淘汰的边缘。目前比较流行的高清编码是H.264与微软的VC-1。但就压缩的比率来看H.264>VC-1>MPEG-2;对于低分辨率的视频文件,MPEG-2的画质表现还是不错的,但基于720P以上的则明显略低于H.264和VC-1的效果;而VC-1与H.264相比,由于无明显编码优势,而且限于Windows平台使用、标准推出较晚,因此给微软VC-1编码的应用前景带来了较大的不确定性,能否跟H.264一较高下,尚需实践检验。另外不得不提的是RMVB视频,由于目前国内家庭宽带的速度不高,很多人都不愿意下载大容量H.264的视频,从而给了RMVB很大的发展空间,目前国内互联网上的视频仍然是RMVB占的比例最高。

重点:视频编码H264

H.264: H.264/AVC项目的目的是为了创建一个比以前的视频压缩标准,在更低的比特率的情况下依然能够提供良好视频质量的标准(如,一半或者更少于MPEG-2,H.263,或者MPEG-4 Part2 )。同时,还要不会太大的增加设计的复杂性。 优势: 1)网络亲和性,即可适用于各种传输网络 2)高的视频压缩比,当初提出的指标是比 H.263,MPEG-4,约为它们的 2 倍,现在都已基本实现;

编码流程:

那么 H.264 其编解码流程是怎么样的呢?其实可以主要分为 5 部分: 帧间和帧内预测(Estimation)、变换(Transform)和反变换、量化(Quantization)和反量化、环路滤波(Loop Filter)、熵编码(Entropy Coding)。

原理简介

H.264 原始码流(又称为裸流),是有一个接一个的 NALU 组成的,而它的功能分为两层:视频编码层(VCL, Video Coding Layer)和网络提取层(NAL, Network Abstraction Layer)。 VCL 数据即编码处理的输出,它表示被压缩编码后的视频数据 序列。在 VCL 数据传输或存储之前,这些编码的 VCL 数据,先被映射或封装进 NAL 单元(以下简称 NALU,Nal Unit) 中。每个 NALU 包括一个原始字节序列负荷(RBSP, Raw Byte Sequence Payload)、一组 对应于视频编码的 NALU 头部信息。RBSP 的基本结构是:在原始编码数据的后面填加了结尾 比特。一个 bit“1”若干比特“0”,以便字节对齐。

NAL 单元排列

上图中的 NALU头 + RBSP 就相当与一个 NALU (Nal Unit), 每个单元都按独立的 NALU 传送。 其实说白了,H.264 中的结构全部都是以 NALU 为主的,理解了 NALU,就理解 H.264 的结构了。

其中每个NALU之间通过startcode(起始码)进行分隔,起始码分成两种:0x000001(3Byte)或者0x00000001(4Byte)。如果NALU对应的Slice为一帧的开始就用0x00000001,否则就用0x000001。 H.264码流解析的步骤就是首先从码流中搜索0x000001和0x00000001,分离出NALU;然后再分析NALU的各个字段。

什么是切片(slice)?

片的主要作用是用作宏块(Macroblock)的载体(ps:下面会介绍到宏块的概念)。片之所以被创造出来,主要目的是为限制误码的扩散和传输。 如何限制误码的扩散和传输? 每个片(slice)都应该是互相独立被传输的,某片的预测(片(slice)内预测和片(slice)间预测)不能以其它片中的宏块(Macroblock)为参考图像。

我们可以理解为一 张/帧 图片可以包含一个或多个分片(Slice),而每一个分片(Slice)包含整数个宏块(Macroblock),即每片(slice)至少一个 宏块(Macroblock),最多时每片包 整个图像的宏块。

什么是宏块?

宏块是视频信息的主要承载者,因为它包含着每一个像素的亮度和色度信息。视频解码最主要的工作则是提供高效的方式从码流中获得宏块中的像素阵列。 组成部分:一个宏块由一个16×16亮度像素和附加的一个8×8 Cb和一个 8×8 Cr 彩色像素块组成。每个图象中,若干宏块被排列成片的形式。

切片(slice)类型跟宏块类型的关系

I片:只包 I宏块,I 宏块利用从当前片中已解码的像素作为参考进行帧内预测(不能取其它片中的已解码像素作为参考进行帧内预测)。

P片:可包 P和I宏块,P 宏块利用前面已编码图象作为参考图象进行帧内预测,一个帧内编码的宏块可进一步作宏块的分割:即 16×16、16×8、8×16 或 8×8 亮度像素块(以及附带的彩色像素);如果选了 8×8 的子宏块,则可再分成各种子宏块的分割,其尺寸为 8×8、8×4、4×8 或 4×4 亮度像素块(以及附带的彩色像素)。

B片:可包 B和I宏块,B 宏块则利用双向的参考图象(当前和 来的已编码图象帧)进行帧内预测。

SP片(切换P):用于不同编码流之间的切换,包含 P 和/或 I 宏块

SI片:扩展档次中必须具有的切换,它包 了一种特殊类型的编码宏块,叫做 SI 宏块,SI 也是扩展档次中的必备功能。

视频播放过程

解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。