文件格式
操作系统中的文件名都有后缀,即扩展名,例如1.doc,2.jpg,3.avi等。设置扩展名的目的是让系统中的应用程序来识别并关联这些文件,让相应的文件由相应的应用程序打开。常见的文件格式如1.avi,2.mpg,3.mp4这些都叫做视频的文件格式,可由电脑上安装的视频播放器关联和打开(播放)。
封装格式
封装格式(Format),也称多媒体容器(Multimedia Container),是将已编码压缩好的视频轨道、音频轨道和元数据(视频基本信息如标题、字幕等)按照一定的格式规范,打包放到一个文件中,形成特定文件格式的视频文件。
封装格式主要分为两大类:面向存储的和面向流媒体的。
- 面向存储的,常见的有AVI、ASF(WMA/WMV)、MP4、MKV、RMVB(RM/RA)等;
- 面向流媒体的,常见的有FLV、TS(需要配合流媒体网络传输协议,如HLS、RTMP等),MP4也支持流媒体方式(配合HTTP等)。
下面以流媒体传输协议的视角重点介绍面向流媒体的封装格式:
- MP4:经典的视频封装格式,移动端(iOS、Android)、PC Web多终端都能良好支持。但MP4的视频文件头太大,结构复杂;如果视频较长(如数小时),则其文件头会过大,影响视频加载速度,故更适合短视频场景。
MP4由一个个的box(以前叫atom)组成,所有的Metadata(媒体描述元数据),包括定义媒体的排列和时间信息的数据都包含在这样的一些结构box中。Metadata 对媒体数据(比如视频帧)引用说明,而媒体数据在这些引用文件中的排列关系全部在第一个主文件中的metadata描述,这样就会导致视频时长越大文件头就会越大、加载越慢。
- HLS(HTTP Live Streaming):苹果公司推出的基于HTTP的流媒体网络传输协议,视频的默认封装格式是TS,除了多个TS分片文件,还定义了用来控制播放的m3u8索引文件(文本文件),可以规避普通MP4长时间缓冲头部数据的问题,比较适合点播场景。移动端(iOS、Android)支持较好,但PC端IE存在兼容性问题依赖播放器的二次开发(建议使用阿里云Web播放器)。
- FLV:Adobe公司推出的标准,在PC端有Flash的强力支持,但在移动终端只有App实现播放器才能支持(建议使用阿里云播放器),大部分手机端浏览器(特别是苹果的移动设备)均不支持。
- DASH(Dynamic Adaptive Streaming over HTTP):使用fragmented MP4(fMP4)格式,将MP4视频分割为多个分片,每个分片可以存在不同的编码形式(如分辨率、码率等);播放器端可自由选择需要播放的视频分片,实现自适应多码率、不同画质内容的无缝切换,提供更好的播放体验。其中MPD文件类似HLS的m3u8文件,国外视频网站如YouTube、Netflix等较多使用DASH。
- HLS+fMP4(HTTP Live Streaming with fragmented MP4):此处单列,但本质上还是HLS协议。苹果公司于WWDC 2016宣布新的HLS标准支持文件封装格式为fragmented MP4,使用方法与TS分片类似,意味着一次转码可同时打包成DASH和HLS。
HLS(包括HLS+fMP4)和DASH是最常用的自适应流媒体传输技术(Adaptive Video Streaming),推荐使用。
编码方式
视频编码方式(Codec)是指能够对数字视频进行压缩或解压缩(视频解码)的程序或者设备。通常这种压缩属于有损数据压缩。也可以指通过特定的压缩技术,将某个视频格式转换成另一种视频格式。常见的编码方式有:
- H.26X系列:由ITU(国际电信联盟)主导,包括H.261、H.262、H.263、H.264、H.265。
-
- H.261:主要在老的视频会议和视频电话产品中使用。
- H.263:主要用在视频会议、视频电话和网络视频上。
- H.264:H.264/MPEG-4第十部分,或称AVC(Advanced Video Coding,高级视频编码),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。
- H.265:高效率视频编码(High Efficiency Video Coding,简称HEVC)是一种视频压缩标准,H.264/MPEG-4 AVC的继任者。HEVC不仅提升图像质量,同时也能达到H.264/MPEG-4 AVC两倍的压缩率(等同于同样画面质量下码率减少50%),可支持4K分辨率甚至超高画质电视,最高分辨率可达8192×4320(8K分辨率),这是目前发展的趋势。
- MPEG系列:由ISO(国际标准组织机构)下属的MPEG(运动图象专家组)主导,视频编码方面主要有:
-
- MPEG-1第二部分:主要使用在VCD上,有些在线视频也使用这种格式,该编解码器的质量大致上和原有的VHS录像带相当。
- MPEG-2第二部分:等同于H.262,使用在DVD、SVCD和大多数数字视频广播系统和有线分布系统(Cable Distribution Systems)中。
- MPEG-4第二部分:可以使用在网络传输、广播和媒体存储上,比起MPEG-2和第一版的H.263,它的压缩性能有所提高。
- MPEG-4第十部分:技术上和ITU-TH.264是相同的标准,二者合作,诞生了H.264/AVC标准,ITU-T将其命名为H.264,而ISO/IEC称它为MPEG-4高级视频编码(Advanced Video Coding,AVC)。
- AVS(Audio Video coding Standard):我国自主知识产权的信源编码标准,是《信息技术先进音视频编码》系列标准的简称,目前已完成两代AVS标准的制定。
-
- 第一代AVS标准包括国家标准《信息技术先进音视频编码第2部分:视频》(简称AVS1)和《信息技术先进音视频编码第16部分:广播电视视频》(简称AVS+)。AVS+的压缩效率与国际同类标准H.264/AVC最高档次(High Profile)相当。
- 第二代AVS标准,简称AVS2,首要应用目标是超高清晰度视频,支持超高分辨率(4K以上)、高动态范围视频的高效压缩。AVS2的压缩效率比上一代标准AVS+和H.264/AVC提高了一倍,超过国际同类型标准HEVC/H.265。
- 其他系列,如,VP8、VP9(Google 主导),RealVideo(RealNetworks推出)等编码方式,在互联网视频使用较少,此处不再介绍。
选择编码方式要充分考虑播放终端(如移动端APP、Web浏览器等)的兼容性,尽量使用最常见和广泛支持的。阿里云视频点播支持视频编码格式:H.264/AVC(默认)、 H.265/HEVC,音频编码格式:MP3(默认)、AAC、VORBIS、FLAC。
转码
视频转码(Video Transcoding)是指将已经压缩编码的视频码流转换成另一个视频码流,以适应不同的网络带宽、不同的终端处理能力和不同的用户需求。转码本质上是一个先解码、再编码的过程,因此转换前后的码流可能遵循相同的视频编码标准,也可能不遵循相同的视频编码标准。
转封装
转封装指的是将视频或音频的封装格式进行转换,如将AVI的视频转换为MP4,其间并不会进行音视频的编码和解码工作,而是直接将视频和音频压缩码流从一种封装格式文件中获取出来然后打包成另一种封装格式的文件。相比转码,转封装有两大特点:
- 处理速度极快。音视频编解码过程十分复杂,占据了转码的绝大部分时间。转封装不需要进行编码和解码,节约了大量的处理时间。
- 音视频质量无损。没有解码(解压缩)和编码(压缩)过程,所以不会有音视频的压缩损伤。
转封装后的文件与原始文件的分辨率、码率等几乎一致,故播放时也称其为“原画”。
码率、码流
码率(Bitrate)是指视频文件在单位时间内使用的数据流量,也叫码流或码流率,是视频编码中画面质量控制最重要的部分。量度单位为“比特每秒”(bit/s或bps),常使用Kbps(每秒多少千个比特)或Mbps。一般来说同样分辨率下,视频文件的码率越大,压缩比就越小,画面质量就越高。码率越大,说明单位时间内取样率越大,数据流精度就越高,处理出来的文件就越接近原始文件,图像质量越好,画质越清晰,要求播放设备的解码能力也越高。
当然,码率越大,文件体积也越大,其计算公式是文件体积=时间×码率/8。例如,网络上常见的一部60分钟的码率为1Mbps的720P的视频文件,其体积就大概为3600秒×1Mb/8=450MB。
分辨率
分辨率(Resolution)用来描述视频对细节的分辨能力,通常表示为每一个方向上的像素数量,比如1280x720等。分辨率决定了视频画面细节的精细程度。通常情况下,视频的分辨率越高,所包含的像素就越多,画面就越清晰。
分辨率是决定码率的主要因素,不同的分辨率要采用不同的码率。总体而言,视频的分辨率越高,所要求的码率也越大,但并不总是如此,不同分辨率都有合理的码率选择范围。所谓“合理的范围”指的是,如果低于这个范围,视频画面质量会很差;如果高于这个范围,画面提升有限甚至几乎无提升,且浪费网络流量和存储空间。
帧率
帧率(Frame Rate)是单位时间内视频显示帧数的量度单位,也就是每秒钟刷新的图片的帧数,量度单位为“每秒显示帧数”(Frame Per Second,FPS)或“赫兹”。
高的帧率可以得到更流畅、更逼真的画面效果。一般来说25~30fps就可接受,提升至60fps则可以明显提升交互感和逼真感,但一般来说超过75fps就不容易察觉到有明显的流畅度提升了。如果帧率超过屏幕刷新率只会浪费图形处理的能力,因为显示设备不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。在分辨率不变的情况下,帧率越高,则对显卡的处理能力要求越高。
GOP(关键帧间隔)
GOP(Group of Pictures)是一组以 MPEG 编码的影片或视讯串流内部的连续图像,以 I 帧开头,到下一个 I 帧结束。一个 GOP 包含如下图像类型:
- I帧(Intra Coded Picture):又称帧内编码帧,为关键帧,是一种自带全部信息的独立帧,无需参考其他图像便可独立进行解码,可以简单理解为一张静态画面。视频序列中的第一个帧始终都是I帧,每个GOP由I帧开始。
- P帧(Predictive Coded Picture):又称帧间预测编码帧,需要参考前面的I帧才能进行编码。表示的是当前帧画面与前一帧(前一帧可能是I帧也可能是P帧)的差别。解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。与I帧相比,P帧通常占用更少的数据位,但不足是,由于P帧对前面的P和I参考帧有着复杂的依赖性,因此对传输错误非常敏感。
- B帧(Bidirectionally Predictive Coded Pictures):又称双向预测编码帧,也就是B帧记录的是本帧与前后帧的差别。也就是说要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是对解码性能要求较高。
GOP值表示关键帧的间隔(即两个关键帧之间的帧数),也就是两个IDR帧之间的距离,一个帧组的最大帧数。一般而言,每一秒视频至少需要使用1个关键帧。增加关键帧个数可改善视频质量,但会同时增加带宽和网络负载。GOP值(帧数)除以帧率即为时间间隔,如阿里云视频点播默认的GOP值为250帧,帧率为25fps,则时间间隔为10秒。
GOP值需要控制在合理范围,以平衡视频质量、文件大小(网络带宽)和seek效果(拖动、快进的响应速度)等:
- 加大GOP值有利于减小视频文件大小,但也不宜设置过大,太大则会导致GOP后部帧的画面失真,影响视频质量。
- GOP值也是影响视频seek响应速度的关键因素,seek时播放器需要定位到离指定位置最近的前一个关键帧,如果GOP太大意味着距离指定位置可能越远(需要解码的预测帧就越多)、seek响应的时间(缓冲时间)也越长。
- 由于P、B帧的复杂度大于I帧,GOP值过大,过多的P、B帧会影响编码效率,使编码效率降低。
- 但如果设置过小的GOP值,则需要提高视频的输出码率,以确保画面质量不会降低,故会增加网络带宽。
扫描模式
- 逐行扫描(progressive):在电子显示屏上通过扫描显示图像时,每一帧图像通过一场扫描来完成,由电子束顺序地一行接着一行连续扫描而成,一场扫描即能构成完整的画面。
- 隔行扫描(interlaced):在电子显示屏上通过扫描显示图像时,每一帧图像通过两场扫描来完成,通常第一场先只扫描奇数行,然后第二场只扫描偶数行,两场组合起来构成完整的画面。
IDR 帧对齐
IDR帧(Instantaneous Decoding Refresh Picture),即时解码刷新帧,是 I 帧的一种。与普通 I 帧的区别在于,一个 IDR 帧之后的所有帧都不能引用该 IDR 帧之前的帧的内容;相反,对于普通的 I 帧,其后的 P 帧和 B 帧可以引用该普通 I 帧之前的其他 I 帧。在编码和解码中为了方便,将首个I帧和其他I帧区别开,称为IDR,这样就方便控制编码和解码流程。
IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。而普通I帧不具有随机访问的能力,这个功能是由IDR承担。视频播放时,播放器一般都支持随机seek(拖动)到指定位置,而播放器直接选择到指定位置附近的 IDR 帧进行播放最为便捷,因为可以明确知道该 IDR 帧之后的所有帧都不会引用其之前的其他 I 帧,从而避免较为复杂的反向解析。
在对同一个视频进行多码率转码时,如果指定 IDR 帧对齐(IDR Frame Alignment),则意味着所有输出视频的 IDR 帧在时间点、帧内容方面都保持精确同步,此时播放器便可实现多码率视频平滑切换,从而不会出现较为明显的切换卡顿。
编码级别
编码档次(Profile)是针对特定应用场景的特定编码功能的集合。H.264 规定了三种主要级别:
- Baseline:支持 I/P 帧,只支持无交错(Progressive)和 CAVLC,一般用于低阶或需要额外容错的应用,比如视频通话、手机视频等即时通信领域;
- Main:提供 I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),同样提供对于 CAVLC 和 CABAC 的支持,用于主流消费类电子产品规格如低解码(相对而言)的 MP4、便携的视频播放器、PSP 和 iPod 等;
- High:在 Main 的基础上增加了 8x8 内部预测、自定义量化、无损视频编码和更多的 YUV 格式(如 4:4:4),用于广播及视频碟片存储(蓝光影片),高清电视的应用。
比特率
比特率(Bit rate)是指每秒传送的比特(bit)数,单位为bps(Bit Per Second),比特率越高,传送的数据越大。在视频领域,比特率等同于码率。比特率表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示,而比特就是二进制里面最小的单位,要么是0,要么是1。与码率类似,比特率与音、视频压缩的关系,简单的说就是比特率越高,音、视频的质量就越好,但编码后的文件就越大;如果比特率越低则文件越小。
码率控制方法
码率控制是指视频编码中决定输出码率的过程,常用的码率控制方法有:
- VBR(Variable Bitrate):动态比特率,也就是没有固定的比特率,音视频压缩软件在压缩时根据音视频数据的复杂程度即时确定使用什么比特率,这是以质量为前提兼顾文件大小的方式。
- CBR(Constant Bitrate):固定比特率,指文件从头到尾都是一种位速率。相对于VBR和ABR来讲,它压缩出来的文件体积很大,而且视频质量相对于VBR和ABR不会有明显的提高。
- ABR(Average Bitrate):平均比特率,是VBR的一种插值参数。LAME针对CBR不佳的文件体积比和VBR生成文件大小不定的特点创造了这种编码模式。ABR在指定的文件大小内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量,可以做为VBR和CBR的一种折衷选择。
ABR在一定的时间范围内达到设定的码率,但是局部码率峰值可以超过设定的码率,平均码率恒定。ABR是VBR的改良版,能确保输出平均码率在合理范围,且在这个范围内,还是动态根据复杂度编码,也是阿里云默认的编码控制方式。
编码格式
定义参考视频编码方式。主要包括无损编码和有损编码两种。根据采样定理,音频编码只能“无限接近”自然信号,故而所有的音频编码方式实质上都是有损的。在计算机领域中,通常约定能够达到最高保真水平的PCM编码为无损编码。互联网中常见的音频编码均为有损编码,常见的编码格式有MP3、AAC等。
采样率
采样率(Sample Rate),也称为采样速度或者采样频率,定义了每秒从连续信号中提取并组成离散信号的采样个数,单位为赫兹(HZ)。采样率是指将模拟信号转换成数字信号时的采样频率,也就是单位时间内采样多少点,采样频率越高声音的还原就越真实越自然。
码率
参考视频编码的“码率”介绍。
声道、声道数
声道(Sound Channel)是指声音在录制(或播放)时,在不同空间位置采集(或播放)的相互独立的音频信号。所谓声道数,也就是声音录制时的音源数量或播放时的扬声器数量。
UTC时间(ISO 8601标准时间格式)
UTC时间指的是协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。中国内地采用ISO 8601-1988的《数据元和交换格式信息交换日期和时间表示法》(GB/T 7408-1994)称之为国际协调时间。
如无特别指定,阿里云视频点播默认返回的时间字段或接口请求的时间参数都为UTC时间,时间格式按照ISO8601标准表示,格式为:YYYY-MM-DDThh:mm:ssZ。例如:2017-01-11T12:00:00Z 表示北京时间2017年1月11日20点0分0秒。注:北京时间与UTC的时差为+8,也就是UTC+8。