-
概要
我们日常生活中的视频文件 avi, rmvb, mp4, flv, mkv 等后缀,叫作 封装格式。
封装格式 是由 视频编码数据(H.264, MPEG2, VC-1) 和 音频编码数据(AAC, MP3, AC-3) 组成。
视频编码数据 是由 视频像素数据(YUV420P, RGB) 组成
音频编码数据 是由 音频采样数据(PCM) 组成
-
音频基础知识
-
声音介绍
声音是一种物理现象。物体振动时产生声波通过空气传到人们的耳膜经过大脑的反射被感知为声音。声音以波的形式振动传播。
声音的三要素:
频率 - 音阶(xxx Hz, xxx kHz)
振幅 - 响度
波形 - 音色
人耳的听力频率范围(20Hz ~ 20kHz),人耳对 3~4kHz 频率范围内的声音比较敏感
-
模拟信号
音频信号是典型的连续信号,在时间和幅度上都是连续的。在任何一个特定的时间点都一个对应的幅值。时间和幅度上都是连续的信号成为模拟信号。
-
-
数字信号
复杂的声波由许许多多具有不同振幅和频率的正弦波组成。代表声音的模拟信号是个连续的量,不能由计算机直接处理,必须将其数字化。
经过数字化处理之后的数字声音能够像文字和图形信息一样进行存储、检索、编辑和其他处理。
数字音频是指使用数字编码的方式也就是使用0和1来记录音频信息。
声音可以表达成一种随着时间的推移形成的一种波形,那么如何描述这种波形存储到计算机中呢?
每隔一定的时间间隔,存储波形图对应的位置(电平信号),然后将电平信号转化成二进制数据保存。
模拟音频数字化:
采样:对时间轴上的信号进行数字化。将时间轴上连续的信号每隔一定的时间间隔抽取出一个信号的幅度样本,把连续的模拟量用一个个离散的点表示出来,使其成为时间上离散的脉冲序列。采样定律(Nyquist定理):要想不产生低频失真,采样频率至少应为所要录制的音频的最高频率的2倍。
量化:在幅度轴上对信号进行数字化。将采样后离散信号的幅度用二进制数表示出来。每个采样点所能表示的二进制位数称为量化精度,或量化位数。量化精度反映了度量声音波形幅度的精度。
编码:按照一定的格式记录采样和量化后的数字数据,比如顺序存储和压缩存储。采样和量化后的信号还不是数字信号,需要将它转化为数字编码脉冲,这一过程称为编码。
音频编码的格式有很多种,而通常所说的音频裸数据指的是脉冲编码调制(PCM)数据。
-
音频编码
一分钟量化格式 16比特(2字节),采样率 44100, 声道数 2(CD音质)的数据采样需要的存储空间约为10.1MB,从存储的角度或者实时传播的角度,这个数据量都太大了,所以需要对音频数据进行压缩编码。
- 压缩编码原理:压缩掉冗余信号,冗余信号是指不能被人耳感知的信号,包含人耳听觉范围之外的音频信号以及被掩蔽掉的信号
人耳掩蔽效应:当一个强音信号与一个弱音信号同时存在时,弱音信号将被强音信号所掩蔽而听不见,这样弱音信号就可以视为冗余信号而不用传送。
掩蔽 = 时域掩蔽 + 频域掩蔽
编码格式:WAV,AAC,MP3,Ogg
一般情况下音频的数据量要远小于视频的数据量,因而音频编码的数据流对于视音频的总数据量不会产生太大的影响。
-
视频基础知识
-
光和颜色
光是一种肉眼可以看见的电磁波(可见光谱)。
颜色是视觉系统对可见光的感知结果。
自然界中的任何一种颜色都可以由 R,G, B 这三种颜色值之和来确定,以这三种颜色为基色构成一个 RGB 颜色空间。
-
RGB
用途:主要用来在 LCD、CRT 显示器上用
RGB 色彩模式是工业界的一种颜色标准,通过对 红(R)、绿(G)、蓝(B)三个颜色通道的变化以及对它们相互之间的叠加来得到各式各样的颜色。
-
YUV
用途:主要用于视频信号的压缩、传输和存储,和向后相容老式黑白电视。
人类视网膜杆细胞要多于视网膜锥细胞,视网膜杆细胞的作用就是识别亮度,而视网膜锥细胞的作用就是识别色度。所以,人眼对亮度分辨率的敏感度要高于对色彩分辨率的敏感度。
YUV 色彩模型就是利用这个原理,把亮度与色度分离,根据人对亮度更敏感些,增加亮度的信号,减少颜色的信号,以这样“欺骗”人的眼睛的手段来节省空间,从而适合于图像处理领域。
描述影像的色彩及饱和度,用于指定像素的颜色
- Y 表示 亮度,也称为灰阶值(即黑白)
- U、V 表示的 色度
亮度 是透过 RGB 输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。
色度 则定义了颜色的两个方面 — 色调与饱和度,分别用 Cr 和 Cb 来表示。Cr 反映了 RGB 输入信号红色部分与 RGB 信号亮度值之间的差异,Cb 反映的是 RGB 输入信号蓝色部分与RGB信号亮度之间的差异
优点: 彩色图像转黑白图像(兼容老式黑白电视);数据尺寸小于 RGB 格式。
RGB 和 YUV 可以通过一定的数学关系相互转换。
-
视频编码
视频编码的主要作用是将视频像素数据(RGB、YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的。高效率的视频编码在同等的码率下,可以获得更高的视频质量。
一个好的编码方式不但可以让视频体积更小,更是为同等数据量下更加清晰的播放提供可能。
那么视频编码需要压缩一些什么数据呢?
视频冗余:
- 空间冗余:视频的背景和整体颜色相近并且平稳变化,可以利用帧内编码进行压缩(无损)
- 时间冗余:两个视频帧之间具有强相关性,利用运动估计和运动补偿进行帧间压缩(无损)
- 结构冗余:图像内部存在相似性,通过这种关系可以进行分形编码
- 编码冗余:出现概率大的颜色编码长度短,概率小的颜色编码长度长(可变长度编码)
- 视觉冗余:利用人眼对亮度和色度的敏感度不同,在编码时进行数据压缩(有损压缩)
常见编码格式:H.265、H.264、MPEG4、VP9、VP8等
-
视频解码
因为编码过的内容无法直接使用,使用(观看)时必须解压缩,还原为原始的信号。
-
-
视频封装
一个完整的视频文件是由音频和视频组成的,而音视频又是由封装格式和编码格式构成。
封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中。
如下 MKV 格式的封装:
部分技术先进的容器还可以同时封装多个视频、音频编码文件,甚至同时封进字幕。
-
播放网络视频文件
步骤:解协议 -> 解封装 -> 解码音视频 -> 音视频同步
如果播放本地文件,则不需要解协议
-
相关术语
-
视频:连续的图像变化每秒超过24帧画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面,看上去是平滑连续的视觉效果,这样连续的画面叫作视频。
帧:影像中常用的最小单位,一帧就是一幅静止的画面,连续的帧就形成了视频
分辨率:一帧视频的大小,表示长宽像素个数(720x576,1280x720,1920x1080)
帧率:每秒钟所传输的视频帧数,通常用 FPS 标识,帧数越高,画面也就越流畅。
-
码率(比特率):单位时间内传送的比特数,一般单位为 kbps
- 音频中: 音频文件或者音频流中1秒中的数据量,如 1.44Mbps,就是1秒钟内的数据量1.44Mbits。码率越高,传送的数据越大,音质越好
- 视频中:原理与声音中的相同,都是指由模拟信号转换为数字信号后,单位时间内的二进制数据量,即每秒显示的图片进行压缩后的数据流。
刷新率:屏幕刷新的速度。 刷新频率越低,图像闪烁、停顿和抖动的就越厉害。
-