音视频基础概念

音视频之所以叫音视频是因为他由音频和视频构成,我们平时看的视频其实就是音视频。本文将记录笔者在学习音视频遇到的概念,如果你和笔者一样对音视频并没有接触太多,那么下面的笔记将会帮你认识音视频。

音频

声波

  • 频率:频率代表音阶的高低
    • 频率(Hz)越高,波长越短
    • 频率越低,波长越长
    • 波长越长,声音更容易绕过障碍物,传得越远
  • 振幅:振幅代表响度,响度就是能量大小的反应
    • 分贝(dB)是描述响度大小(声音强度)的单位
    • 分贝是无量纲,指两个相同的物理量A1(被量度量)和A0(基准量或参考量)之比取以10为底的对数并乘以10(或20),即N=10*lg(A1/A0)
  • 波形:波形代表音色
    • 音色不同的情况下,在同样的音调(频率)和响度(振幅)下声音也是不同
  • 声压:声波通过媒质时,由振动所产生的压强改变量
    • 声压的衡量单位是帕斯卡(Pa)
  • 声压级:指以对数尺衡量有效声压相对于一个基准值的大小
    • 分贝(dB)描述声压值与基准值的关系,变化范围大,可以达到六个数量级以上
    • 在声压级较低时,听觉的频率特性会很不均匀
    • 在声压级较高时,听觉的频率特性会变得较为均匀

人耳

  • 能听到的频率范围:20Hz ~ 20kHz
  • 较敏感频率范围:3 ~ 4kHz
  • 频率较宽的音乐声压:80 ~ 90dB 为最佳,超过 90dB 将会损害人耳
  • 人耳极限:105dB
  • 两种声音传到我们耳朵的时差小于80ms,我们就无法区分两种声音

数字音频

为了将音频信号数字化,需要进行采样量化编码三个步骤。

  • 采样:采样是在时间轴上对信号进行数字化。根据奈奎斯特定理(也称采样定理),按比声音最高频率2倍以上的频率对声音进行采样(也称为AD转换)
    • 采样频率(采样率):表示一秒中采样的次数,采样率一般为44.1kHz
  • 量化:量化是指在幅度轴上对信号进行数字化,比如用 16 比特的二进制信号来表示声音的一个采集,而16 比特(一个short)所表示的范围是[-32768, 32767],共有 65536 个可能取值,因此最终的音频信号在幅度上也分为 65535 层
  • 编码:按照一定的格式记录采样和量化的数字数据

描述概念

  • 量化格式(sampleFormat):也叫位深度,是音频采样一次所需要的容量
    • 单位:bit、byte
    • 1byte = 8bit
  • 采样率(sampleRate):
    • 单位:Hz、kHz
    • 1kHz = 1000Hz
  • 声道数(channel)
  • 比特率(码率)(bit rate):1秒时间内的比特数目,用于衡量音频数据单位时间内的容量大小。比特率越高,存储越大,声音细节越精确
    • 单位:bps、kbps
    • 比特率(bps) = 采样率(Hz) * 位深度(bit) * 声道数
    • 1kbps = 1024bps
    • 低码率(low \leq48 Kbps
    • 中码率(48 Kbps < mid < 128 Kbps
    • 高码率(high \geq128 Kbps
音质 量化格式(位深) 采样率 声道数 比特率 存储空间(1分钟)
CD 音质 16比特(2 字节) 44100Hz 2 1378.125kbps 10.09MB

音频编码

PCM 即音频裸数据量大,存在本地稍微可以接受,但是要在网络中实时在线传播的话就太大了,因此就有了音频压缩编码的存在。压缩编码实际上就是压缩冗余信号,冗余信号指的是人耳听不到的音频信号(20Hz ~ 20kHz范围以外)。

常见概念

  • 压缩比:通常小于1
  • 无损压缩:解压后数据可以完全复原
  • 有损压缩:解压后数据不能完全复原,压缩比越小,丢失信息越多,信号还原后的失真就会越大

PCM 编码

PCM(Pulse Code Modulation,脉冲编码调制)是无损编码,也是音频裸数据,能够达到最大程度的高保真。
优点:音源信息保存完整,音质好
缺点:信息量大,体积大,冗余度过大
适用场合:广泛用于素材保存及音乐欣赏

WAV 编码

WAV(Waveform Audio File Format)是一种不会进行压缩操作的编码,他在 PCM 数据格式的前面加上了44字节,分别用来描述 PCM 的采样率、声道数、数据格式等信息。
优点:音质非常好,大量软件都支持
缺点:信息量大,体积大,冗余度过大
适用场合:多媒体开发的中间文件、保存音乐和音效素材

MP3 编码

MP3 具有不错的压缩比,使用 LAME 编码的中高码率的 MP3 文件,听感上非常接近 WAV 文件。
优点:音质在 128 Kbps 以上表现还不错,压缩比比较高,兼容性高
缺点:在 128 Kbps 及以下时,会出现明显的高频丢失
适用场合:高比特率下对兼容性有要求的音乐欣赏

AAC 编码

AAC 是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS、SBR等),衍生出了 LC-AAC、HE-AAC、HE-AAC v2 三种主要的编码格式:

  • LC-AAC:主要应用于中高码率场景的编码(\geq80 Kbps
  • HE-AAC:(相当于AAC+SBR)主要应用于中低码率场景的编码(\leq80 Kbps)
  • HE-AAC v2:(相当于AAC+SBR+PS)主要应用于低码率场景的编码(\leq48 Kbps)
    • 事实上大部分编码器都设置\leq48 Kbps自动启动 PS 技术,而>48Kbps则不加 PS ,相当于普通的 HE-AAC

优点:在小于 128 Kbps 的码率下表现优异,支持多种音频声道组合,提供优质的音质
适用场合:128 Kbps 以下的音频编码,多用于视频中的音频轨的编码

SBR:一种音频编码增强算法,可在中低码率下增加音频的带宽或改善编码效率,但是在高码率中没什么作用。

Ogg 编码

Ogg 在各种码率下大豆油比较优秀的表现,尤其在中低码率场景下。可以用更小的码率达到更好的音质,128 Kbps 的 Ogg 比 192 Kbps 甚至更高码率的 MP3 还要出色。但是它的兼容性不是很好,因此和 MP3 无法相提并论。
优点:可用比 MP3 个更小的码率实现比 MP3 更好的音质,高低中码率下均有良好的表现
缺点:软件硬件的兼容性不好
使用场合:语音聊天的音频消息场景

图像

一幅幅图像是由一个个像素点组成的,每个像素点都由3个子像素点组成。

分辨率

像素点的数量就是分辨率,比如一个屏幕的分辨率是1280 x 720,那么说明水平方向有 720 个像素点,垂直方向有 1280 个像素点,因此整个屏幕就有1280 x 720个像素点(注:这是不算子像素点的说法)。

位图(Bitmap)

  • 位图,又称栅格图(Raster graphics)或点阵图,是使用像素阵列(Pixel-array/Dot-matrix点阵)来表示的图像。
  • 位图也可指一种数据结构,代表了有限域中的稠集(dense set),每一个元素至少出现一次,没有其他的数据和元素相关联。

位图的像素都分配有特定的位置和颜色值。每个像素的颜色信息由 RGB 组合或者灰度值表示。根据位深度,可将位图分为1、4、8、16、24及32位图像等。每个像素使用的信息位数越多,可用的颜色就越多,颜色表现就越逼真,相应的数据量越大。

位深度:表示一个位图所使用的二进制数目,即32 位图像能表示 2^8 种颜色的彩色图,1 位图像就能表示 2 种颜色的黑白图。

RGB 表示方式

一个图像可以由 RGB 组成,这些子像素点的常用表示方式如下:

  • 浮点表示:取值范围为 0.0 ~ 1.0,比如 OpenGL ES 中的子像素表示。
  • 整数表示:取值范围为 0 ~ 255 或者 00 ~ FF,8 bits表示一个子像素,32 bits 即 4 bytes 就表示一个像素。
    • RGBA_8888:R、G、B、A 各用 8 bits,一共 32 bits。
    • RGB_565:R 用 6 bits,G 用 6 bits,B 用 5 bits,一共 16 bits 即 2 bytes

那么一张1280 x 720RGBA_8888图像的大小就是:
1280 * 720 * 4 = 3.156 MB

YUV 表示方式

YUV 主要应用于优化彩色视频信号的传输,使其向后兼容老实黑白电视。与 RGB 视频型号传输相比,最大的优点是占用极少的频宽

  • Y亮度信号表示明亮度(Luminance 或 Luma),也称灰阶值
  • U、V色度信号表示色度(Chrominance 或 Chroma),作用是描述影像的色彩及饱和度,用于指定像素的颜色(YUV也叫YCbCr)
    • 色调:用Cr表示,反映了 RGB 输入信号红色部分与 RGB 信号亮度值之间的差异
    • 饱和度:用Cb表示,反映了 RGB 输入信号蓝色部分与 RGB 信号亮度值之间的差异

表示方式:YUV 的每个分量都使用一个字节(8位)来表示,所以取值范围是 0 ~ 255。
存储格式

  • planar 平面格式:指先连续存储所有像素点的 Y 分量,然后存储 U 分量,最后是 V 分量。
  • packed 打包模式:指每个像素点的 Y、U、V 分量是连续交替存储的。

采样范式:YUV 图像的主流采样方式有如下三种:

YUV 4:4:4 采样

YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bits,也就是一个字节。
如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):


YUV444

例子:
图像像素:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
采样的码流:Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3
映射出的像素点: [Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]

这种采样方式的图像和 RGB 颜色模型的图像大小是一样,并没有达到节省带宽的目的,当将 RGB 图像转换为 YUV 图像时,也是先转换为 YUV 4:4:4 采样的图像。

YUV 4:2:2 采样

YUV 4:2:2 采样,意味着 UV 分量是 Y 分量采样的一半,Y 分量和 UV 分量按照 2 : 1 的比例采样。每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一个采集一个。如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):


YUV422

例子:
图像像素:[Y0 U0 V0]、[Y1 U1 V1]、[Y2 U2 V2]、[Y3 U3 V3]
采样的码流:Y0 U0 Y1 V1 Y2 U2 Y3 V3
映射出的像素点: [Y0 U0 V1]、[Y1 U0 V1]、[Y2 U2 V3]、[Y3 U2 V3]

两个图像共用一个 U、V 分量,因此YUV 4:2:2 采样的图像比 RGB 模型图像节省了三分之一的存储空间,在传输时占用的带宽也会随之减少。

YUV 4:2:0 采样

YUV 4:2:0 采样,并不是指只采样 U 分量而不采样 V 分量。而是指,在每一行扫描时,只扫描一种色度分量(U 或者 V),和 Y 分量按照 2:1 的方式采样。每采样过一个像素点,都会采样其 Y 分量,而 U、V 分量就会间隔一行按照 2 : 1 进行采样。对于每个色度分量来说,它的水平方向和竖直方向的采样和 Y 分量相比都是 2:1 。如下图所示(Y 分量用叉表示,UV 分量用圆圈表示):


YUV420

图像像素:
[Y0 U0 V0]、[Y1 U1 V1]、 [Y2 U2 V2]、 [Y3 U3 V3]
[Y5 U5 V5]、[Y6 U6 V6]、 [Y7 U7 V7] 、[Y8 U8 V8]
采样的码流:Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8
映射出的像素点:
[Y0 U0 V5]、[Y1 U0 V5]、[Y2 U2 V7]、[Y3 U2 V7]
[Y5 U0 V5]、[Y6 U0 V6]、[Y7 U2 V7]、[Y8 U2 V8]

四个图像共用一个 U、V 分量,因此YUV 4:2:0 采样的图像比 RGB 模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。

RGB 和 YUV 的转化

RGB 到 YUV 的转换,就是将图像所有像素点的 R、G、B 分量转换到 Y、U、V 分量。对于显示器来说,它是通过 RGB 模型来显示图像的,而在传输图像数据时又是使用 YUV 模型(可节省带宽),因此就有:

  • 采集图像时:将 RGB 模型转换到 YUV 模型
  • 显示图像时:将 YUV 模型转换为 RGB 模型

标清电视使用标准 BT.601:

$$ \begin{bmatrix}Y \\U \\V\end{bmatrix} = \begin{bmatrix} 0.299 & 0.587 & 0.114 \\ -0.14713 & -0.28886 & 0.436 \\ 0.615 & -0.51499 & -0.10001 \end{bmatrix} \begin{bmatrix}R \\G \\B\end{bmatrix} $$ $$ \begin{bmatrix}R \\G \\B\end{bmatrix} = \begin{bmatrix} 1 & 0 & 1.13983 \\ 1 & -0.39465 & -0.58060 \\ 1 & 2.03211 & 0 \end{bmatrix} \begin{bmatrix}Y \\U \\V\end{bmatrix} $$

高清电视使用标准 BT.709:

$$ \begin{bmatrix}Y \\U \\V\end{bmatrix} = \begin{bmatrix} 0.2126 & 0.7152 & 0.0722 \\ -0.09991& -0.33609 & 0.436 \\ 0.615 & -0.55861 & -0.05639 \end{bmatrix} \begin{bmatrix}R \\G \\B\end{bmatrix} $$ $$ \begin{bmatrix}R \\G \\B\end{bmatrix} = \begin{bmatrix} 1 & 0 & 1.28033 \\ 1 & -0.21482 & -0.38059 \\ 1 & 2.12798 & 0 \end{bmatrix} \begin{bmatrix}Y \\U \\V\end{bmatrix} $$

图片压缩格式

  • JPEG:JPEG(Joint Photographic Experts Group) 是一种有损压缩格式,在提供良好的压缩性能的同时,具有较好的重建质量。一般提供压缩比的选项,压缩比越小,图片体积就越小,质量越也差,编码时间也越短,但解码时间并没有很大的差距。
  • PNG:PNG(Portable Network Graphics) 是无损压缩格式,其并不能提供压缩比的选项,其压缩比是有上限的。
  • BPG:BPG(Better Portable Graphics) 是一个优秀的有损压缩格式,它能在相同质量下比 JPEG 减少 50% 的体积。

视频

视频中的每帧都代表着一幅静止的图像

视频编码

相较于音频数据,视屏数据有极强的相关性,也就是说有大量的冗余信息,包括空间上的冗余信息和时间上的冗余信息。

帧间编码技术 -> 去除时间上的冗余信息

  • 运动补偿:运动补偿是通过先前的局部图像来预测、补偿当前的局部图像,他是减少帧序列冗余的有效方法。
  • 运动表示:不同区域的图像需要使用不同的运动矢量来描述运动信息。
  • 运动估计:运动估计是从视频序列中抽取运动信息的一整套技术。

帧内编码技术 -> 去除空间上的冗余信息

MPEG

MPEG 算法是适用于动态视频的压缩算法,它除了对单幅图像进行编码外,还利用图像序列中的相关原则去除冗余,大大提高了视频的压缩比。

版本:Mpeg1(⽤于 VCD)、Mpeg2(⽤于 DVD)、Mpeg4 AVC(流媒体使⽤最多)

H.264

ITU-T 制定的 H.261、H.262、H.263、H.264⼀系列视频编码标准是⼀套单独的体系。其中,H.264 集中了以往标准的所有优点,并吸取了以往标准的经验,采⽤的是简洁设计,这使得它⽐ Mpeg4 更容易推⼴。现在使⽤最多的就是 H.264 标准,H.264 创造了多参考帧多块类型整数变换帧内预测等新的压缩技术,使⽤了更精细的分像素运动⽮量(1/4、1/8)和新⼀代的环路滤波器,这使得压缩性能得到⼤⼤提⾼,系统也变得更加完善。

编码概念

IPB 帧

  • I帧:帧内编码帧(intra picture),直接表示完整图像的一帧。通常为每个GOP(MPEG所使用的一种视频压缩技术)的第一个帧。
    • 编码:通过视频压缩算法保存的完整一帧
    • 解码:通过视频压缩算法解压成完整的画面
    • 用途:作为随机访问的参考点
    • 意义:去除空间冗余信息
  • P帧:前向预测编码帧(predictive-frame),即预测帧,通过前面的图像编码特征来确定当前的图像帧。
    • 编码:通过将图像序列中前面已编码帧的时间冗余信息充分去除来压缩传输数据量的编码图像。
    • 解码:需要参考其前面的一个I帧或者P帧来解码成一张完整的视频画面
    • 意义:去除时间冗余信息
  • B帧:双向预测内插编码帧(bi-directional interpolated prediction frame),即双向预测帧,需要通过前后的图像编码来确定当前帧。
    • 编码:既考虑源图像序列前面的已编码帧,又顾及源图像序列后面的已编码帧之间的时间冗余信息,来压缩传输数据量的编码图像
    • 解码:需要参考其前一个I帧或者P帧及其后面的一个P帧来生成一张完整的视频画面
    • 意义:去除时间冗余信息

IDR帧:(instantaneous decoding refresh picture)是一个特殊的I帧,这一帧之后的所有参考帧都只会参考到这个IDR帧,而不会再参考前面的帧。

GOP

GOP(Group Of Picture),表示一组图片,两个I帧之间就形成的一组图片。通常在为编码器设置参数的时候,必须要设置gop_size的值,其代表的是两个I帧之间的帧数目。

PS:提高视频质量技巧:

  • gop_size越大,整个画面的质量就会越好
  • 多使用B帧(I的压缩率是7,P是20,B可以达到50)可节省更多的空间保存I帧。这样就能在相同的码率下提供更好的画质。

PTS 与 DTS

  • DTS:(Decoding Time Stamp)决定解码的顺序,主要用于视频的解码
  • PTS:(Presentation Time Stamp)决定图像什么时候显示给用户,主要用于在解码阶段进行视频的同步和输出
GOP&PTS&DTS

PS:在没有B帧的情况下,DTS 和 PTS 的输出顺序是一样的。因为B帧打乱了解码和显示的顺序,所以一旦存在B帧,PTS与DTS势必就会不同。因此需要 DTS 和 PTS 两种不同的时间戳。

参考与更多

《音视频开发进阶指南》
一文读懂 YUV 的采样与格式
移动端图片格式调研

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 前言 早在之前就对音视频开发这块儿比较感兴趣,但是一直没有下定决心学习,一个是觉得这块儿很难,二是感觉自己没有时间...
    CoderP1阅读 1,294评论 2 12
  • Android开发工作两年,真的是感觉Android应用层开发没什么前景了,于是打算在网络安全,智能硬件,音视频这...
    MzDavid阅读 1,551评论 0 3
  • 由于H.264等压缩算法都是在YUV的颜色空间上进行的,所有在进行压缩前,首先要进行颜色空间的转换。如果摄像头采集...
    眷卿三世阅读 13,454评论 2 6
  • RGB和YUV 多媒体编程 一、概念 1.什么是RGB? 对一种颜色进行编码的方法统称为“颜色空间”或“色域”。用...
    流年易逝_李阅读 14,517评论 0 6
  • 以前,我不太喜欢英语阅读。开学将近一个月,我却发现我的英语阅读水平突然之间突飞猛进,我觉得我的心情非常的高兴,也开...
    liuxuande阅读 347评论 0 0