音视频基础

音视频,音频和视频并不是在一起处理的,而是分开处理至最后合成的音视频

开源脚本 media-source-extract 可以无差别提取网页显示的所有media

media下载后为音频视频双文件

配合 mkvtoolnix 混流器可合成为原视频,感兴趣可以尝试一下

录制原理

img

播放原理

解封装(分离音视频) → 解码(H.264/AAC → RGB/PCM) → 同步(DTS/PTS 控制播放顺序) → 渲染

img

位深(单位 | bit)

举个例子:

CSS的颜色通常基于每通道8bit的RGBA模型 👉 rgba(255,255,255,0.5),整体颜色深度为32位

img

帧率(单位 | fps)

帧率即 FPS 每秒有多少帧画面

  • 帧率↑ 流畅↑ 性能需求↑

人眼对图像的暂留时间为 1/24 秒,因此 24fps 被认为是连续的

电影帧率一般是 24fps

电视剧一般是 25fps

监控行业常用 25fps

音视频通话常用 15fps

码率(单位 | Mbps)

视频文件在 单位时间内使用的数据流量 。比如1Mbps。

码率 = 分辨率 × 帧率 × 比特深度 × 压缩率

  • 码率↑ 分辨率↑ 清晰↑ (大多数情况)

但模糊的视频文件大小(码率)也可以很大,分辨率小的视频文件可能也比分辨率大的视频文件清晰。

对于同一个原始图像源的时候,同样的编码算法,则码率越高,图像的失真就会越小,视频画面就会越清晰

  • 高分辨率低码率:画质模糊(如 4K 5Mbps)。
  • 低分辨率高码率:画质锐利但文件大(如 720p 20Mbps)。

视频基础

颜色渲染

RGB & BGR

该颜色编码的原理是控制 三色的明暗组合形成 肉眼可见的所有颜色

RGB / BGR 区别在于颜色排列,看首字母即可(Red | Green | Blue)

img

YUV

不同于之前的三色系统,YUV采用 亮度(Y)+色度(UV) 组合形成完整的彩色图像

img

我们仍然要将每一种参量(Y / UV)拆解成类似像素块的形式

但很多情况下,亮度块(Y) 与 色度块(UV) 并不是 1:1 的关系

数量:亮度参量(Y) ≥ 色度参量(UV)

> ps:下图中 黑点表示亮度(Y) 空心圆表示色度(UV)

img

444(专业视频编辑)

内部的数据存储是这样的,Y(紫) U(橙) V(绿)

Y0 + U0 + V0 = 屏幕上的第一个彩色像素点

img

422(摄像机输出)

4:2:2 代表 2×Y 共用 1×U 1×V

所以 Y0 + Y4 + U0 + V0 = 屏幕上的第一个彩色像素点

img

420(最常见 | 网络传输)

Y0 + Y1 + Y4 + Y5 + U0 + V0 = 屏幕上的第一个彩色像素点

注意 Y 的选取是 2x2 区域,并不是 1x4 | 4x1

img

420 NV12

和上面的区别在于 UV 的排列方式不同

img

420 数据格式参考

排列组合的六种数据格式

  • 记忆方式:第一列从上至下
    • YUV:I420
    • YVU:YV12
    • YUU:NV12
    • YVV:NV21

img

RGB / YUV 转换

通常情况下RGB和YUV直接的相互转换都是调用接口实现,比如 Ffmpeg 的 swscale 或老 libyuv 等库

主要转换标准是 BT601BT709

  • 8bit位深的情况下
    • TV range是 16-235(Y)、16-240(U/V),也叫Limited Range
    • PC range是 0-255(Y)、0-255(U/V),也叫Full Range
    • RGB没有range之分,全是0-255

BT601 TV Range转换公式

  • YUV(256 级别)可以从8位 RGB 直接计算:
    • Y = 0.299R + 0.587G + 0.114*B:
    • U = -0.169R - 0.331G + 0.5*B;
    • V = 0.5R - 0.419G - 0.081*B;
  • 反过来,RGB 也可以直接从YUV(256级别)计算
    • R=Y+ 1.402(Y-128)
    • G=Y-0.34414(U-128)-0.71414(U-128)
    • B=Y+ 1.772(V-128)

⚠ 注意:从YUV 转到 RGB 如果值小于0要取0,如果大于255要取255

I帧 | 关键帧 (Intra coded frame)

类似于截图,独立解码

  • 不需要参考其他画面 而生成,解码时仅靠自己就重构完整图像
  • 作为P帧和B帧的参考帧(其质量直接影响到同组中以后各的质量)
  • 作为帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
  • 图像采用 帧内编码 方式
  • 图像是 周期性出现 在图像序列中的,出现频率可由编码器选择
  • 所占数据的信息量比较大
  • I帧不需要考虑运动矢量

P帧 | 前向预测帧 (Predicted frame)

类似视频,依靠上一帧的数据,连续解码

  • 利用空间和时间上的相关性解码
  • 需要参考前面最靠近它的 I帧 || P帧 来解码

B帧 | 双向预测帧 (Bi-directional predicted frame)

依靠前后帧解码

  • 采用双向时间预测,大大提高压缩倍数

解码顺序(IPB)

先解出I帧,再解出P帧,进而解出B帧

显示顺序(IBP)

先显示I帧,再显示B帧,进而显示P帧

img

压缩

视频压缩编码标准
H.264(AVC)

手机拍的1080p视频很可能是H.264编码

  • 兼容性最好(几乎所有设备/平台都支持),生态成熟
  • 付费,压缩效率较低,也就是文件体积大,且不支持≥4K的分辨率
H.265(HEVC)

4K蓝光、高端电视、苹果设备(iPhone默认拍摄4K视频用HEVC)

  • 压缩效率比H.264约50%(相同画质下文件体积小一半),支持4K/8K
  • 专利费更高,硬件要求高(需支持HEVC的解码器),部分设备不支持
VP9

YouTube的4K,但如果设备不支持硬件解码VP9,可能会卡顿

  • 免费,压缩效率接近H.265,较低
  • 硬件解码支持较弱,依赖CPU计算,编码速度慢
AV1

未来几年的流媒体编码趋势

  • 免费压缩效率比H.265/VP9更高(节省30%带宽)
  • 硬件支持尚未普及(NVIDIA RTX 40系、AMD RX 7000系),编码速度极慢

音频基础

声频

声音的频率是周期的倒数,它表示的是声音在1秒钟内的周期数,单位是赫兹(Hz)、干赫(kHz)

1000Hz,表示每秒振动1000次

声音按频率可作如下划分:

次声 0~20Hz
人耳 20Hz~20KHz
超声 20KHz~1GHz
特超声 1GHz~10THZ

数字音频

img

采样频率

概念:每秒钟采样的点的个数

要从采样中完全恢复原始信号波形采样频率必须至少是信号中最高频率的两倍(Nyguist采样定律)

假设你有一个音频信号,其最高频率为20kHz(人类听觉范围内的上限)

根据奈奎斯特采样定律,为了准确地捕捉这个信号而不失真,则需要至少以40kHz的频率对该信号进行采样

这样经过数字化处理之后,人耳听到的声音质量不会被降低

常用的采样频率有

22000(22kHz) 无线广播
44100(44.1kHz) CD音质
48000(48kHz) 数字电视,DVD
96000(96kHz) 蓝光,高清DVD
192000(192kHz) 蓝光,高清DVD

采样量化

采样是在离散的时间点上进行的,而采样值本身在计算机中也是离散的

采样值的精度取决于它用多少位来表示,这就是量化

例如8位量化可以表示256个不同值,而CD质量的16位量化可以表示65536个值,范围为 [-32768,32767]

下图是一个3位量化的示意图

img

可以看出3位量化只能表示8个值:

1
0.75`,`0.5`,`0.25`,`0`,`-0.25`,`-0.5`,`-0.75`,`-1

量化位数越少,波形就越难辨认,还原后的声音质量也就越差(可能除了一片嗡嗡声之外什么都没有)

采样精度

也叫采样深度:指每个 ‘样本点’ 的大小

  • 常用大小:8bit,16bit,24bit
  • 通道数:单声道,双声道,四声道,5.1声道
  • 比特率:每秒传输的bit数,单位 bps (Bit PerSecond) 间接衡量声音质量的一个标准
    • 没有压缩的音频数据的比特率 = 采样频率 × 采样精度 × 通道数

img

码率

码率 = 音频文件大小 / 时长

码率↑ 音质↑ 压缩后数据量↑ 压缩效率↓

压缩后的音频数据的比特率常见的码率

96kbps FM质量
128-160kbps 一般质量音频
192kbps CD质量
256-320Kbps 高质量音频

类似于视频的帧,代表每次编码的采样单元数

比如MP3通常是1152个采样点作为一个编码单元,AAC通常是1024个采样点作为一个编码单元。

帧长

  • 可以指每帧播放持续的时间
    • 帧长(秒) = 每帧采样点数 / 采样频率(HZ)
      • 比如:MP3 48k,1152个采样点,每帧则为 24毫秒(1152/48000=0.024秒=24毫秒)
  • 也可以指压缩后每帧的数据长度

存储

交错模式

以连续帧的方式存放,即首先记录帧1的左声道样本和右声道样本,再开始帧2的记录

img

非交错模式

首先记录的是一个周期内所有帧的左声道样本,再记录所有右声道样本

img

压缩

压缩原理

数字音频信号如果不加压缩地直接进行传送,将会占用极大的带宽

例如,一套双声道数字音频若取样频率为44.1KHz,每样值按16bit量化

则其码率为:2·44.1kHz*·*16bit=1.411Mbit/s

- 阿里云服务器带宽大于5M后,每M价格是100元/月) -

数字音频压缩编码采取去除声音信号中冗余信号的方法来实现

冗余信号:包含人耳听觉范围外的音频信号、被掩蔽掉的音频信号、当一个强音信号与个弱音信号同时存在时,弱音信号被强音信号所掩蔽就可以视为冗余信号而不用传送(这也是 MP3/AAC 压缩的核心原理)

音视频

音视频同步

概念

DTS (Decoding Time Stamp)

  • 解码时间戳,告诉播放器该在什么时候解码这一帧的数据

PTS (Presentation Time Stamp)

  • 显示时间戳,告诉播放器该在什么时候显示这一帧的数据

B 帧的解码顺序与显示顺序不同(需先解码 I/P/B,但显示顺序为 I/B/P)

方式

Audio Master:以音频为基准调整视频播放速度(适合直播/会议)

Video Master:以视频为基准调整音频播放速度

External Clock Master:以外部时钟为基准调整音视频播放速度

一般情况下 Audio Master > External Clock Master > Video Master

常见视频封装格式

AVI、MKV、MPE、MPG、MPEG、MP4WMV、MOV、3GP、M2V、M1V、M4V、OGM、RM、RMS、RMM、RMVB、IFO、SWF、FLVF4V、ASF、PMF、XMB、DIVX、PART、DAT、VOB、M2TS、TS、PS

H264(压缩) + AAC(音频压缩) 封装为 FLVMP4 是当下最为流行的模式

另外

MP3 是一种音频容器格式,同时也是一种音频压缩标准

MP4 是一种音视频容器格式,但不作为某种压缩标准

二者具有一定差别