操作系统中的文件名都有后缀,即扩展名,例如1.doc,2.jpg,3.avi等。设置扩展名的目的是让系统中的应用程序来识别并关联这些文件,让相应的文件由相应的应用程序打开。常见的文件格式如1.avi,2.mpg,3.mp4这些都叫做视频的文件格式,可由电脑上安装的视频播放器关联和打开(播放)。
封装格式(Format),也称多媒体容器(Multimedia Container),是将已编码压缩好的视频轨道、音频轨道和元数据(视频基本信息如标题、字幕等)按照一定的格式规范,打包放到一个文件中,形成特定文件格式的视频文件。
封装格式主要分为两大类:面向存储的和面向流媒体的。
下面以流媒体传输协议的视角重点介绍面向流媒体的封装格式:
MP4由一个个的box(以前叫atom)组成,所有的Metadata(媒体描述元数据),包括定义媒体的排列和时间信息的数据都包含在这样的一些结构box中。Metadata 对媒体数据(比如视频帧)引用说明,而媒体数据在这些引用文件中的排列关系全部在第一个主文件中的metadata描述,这样就会导致视频时长越大文件头就会越大、加载越慢。
HLS(包括HLS+fMP4)和DASH是最常用的自适应流媒体传输技术(Adaptive Video Streaming),推荐使用。
视频编码方式(Codec)是指能够对数字视频进行压缩或解压缩(视频解码)的程序或者设备。通常这种压缩属于有损数据压缩。也可以指通过特定的压缩技术,将某个视频格式转换成另一种视频格式。常见的编码方式有:
选择编码方式要充分考虑播放终端(如移动端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(Group of Pictures)是一组以 MPEG 编码的影片或视讯串流内部的连续图像,以 I 帧开头,到下一个 I 帧结束。一个 GOP 包含如下图像类型:
GOP值表示关键帧的间隔(即两个关键帧之间的帧数),也就是两个IDR帧之间的距离,一个帧组的最大帧数。一般而言,每一秒视频至少需要使用1个关键帧。增加关键帧个数可改善视频质量,但会同时增加带宽和网络负载。GOP值(帧数)除以帧率即为时间间隔,如阿里云视频点播默认的GOP值为250帧,帧率为25fps,则时间间隔为10秒。
GOP值需要控制在合理范围,以平衡视频质量、文件大小(网络带宽)和seek效果(拖动、快进的响应速度)等:
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 规定了三种主要级别:
比特率(Bit rate)是指每秒传送的比特(bit)数,单位为bps(Bit Per Second),比特率越高,传送的数据越大。在视频领域,比特率等同于码率。比特率表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示,而比特就是二进制里面最小的单位,要么是0,要么是1。与码率类似,比特率与音、视频压缩的关系,简单的说就是比特率越高,音、视频的质量就越好,但编码后的文件就越大;如果比特率越低则文件越小。
码率控制是指视频编码中决定输出码率的过程,常用的码率控制方法有:
ABR在一定的时间范围内达到设定的码率,但是局部码率峰值可以超过设定的码率,平均码率恒定。ABR是VBR的改良版,能确保输出平均码率在合理范围,且在这个范围内,还是动态根据复杂度编码,也是阿里云默认的编码控制方式。
定义参考视频编码方式。主要包括无损编码和有损编码两种。根据采样定理,音频编码只能“无限接近”自然信号,故而所有的音频编码方式实质上都是有损的。在计算机领域中,通常约定能够达到最高保真水平的PCM编码为无损编码。互联网中常见的音频编码均为有损编码,常见的编码格式有MP3、AAC等。
采样率(Sample Rate),也称为采样速度或者采样频率,定义了每秒从连续信号中提取并组成离散信号的采样个数,单位为赫兹(HZ)。采样率是指将模拟信号转换成数字信号时的采样频率,也就是单位时间内采样多少点,采样频率越高声音的还原就越真实越自然。
参考视频编码的“码率”介绍。
声道(Sound Channel)是指声音在录制(或播放)时,在不同空间位置采集(或播放)的相互独立的音频信号。所谓声道数,也就是声音录制时的音源数量或播放时的扬声器数量。
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。