音视频技术初级课程:探索音视频的基本概念

发表时间: 2022-01-23 12:15

1. 前言

本文是音视频工程师系列的第一篇文章。

学习音视频的过程中发现,网络上高质量的音视频技术博客不是很多。具有代表性的是

  • 雷神的 雷霄骅的CSDN博客(https://blog.csdn.net/leixiaohua1020)

因为笔者是一名普通的软件开发人员,一向不喜欢高高在上或者晦涩难懂的理论,我们向来喜欢通俗易懂的东西。我认为知识的本身也应该是通俗易懂的东西。知识用晦涩难懂的东西描述出来,是对人类进步的阻碍,是知识垄断。

音视频的很多标准都是国外制定的,而且很多音视频开发基础库也是国外的,国内外技术差距是存在的。

笔者希望此系列教程能够以工程实现为出发点和落脚点,简化理论知识,化繁为简地解析音视频技术,为音视频技术的发展,为各位读者成为音视频工程师贡献一点微不足道的力量。

2. 音视频数据内容信息分类

音视频数据内容从本质上讲,分为两种:

  1. 音视频数据:存储音视频本身想要传达的信息,即声音和图像。
  2. 音视频参数:存储音视频的控制参数。例如采样率,帧率等信息,是处理音视频数据时必不可少的信息。

3. 格式

封装格式(容器)

音视频内容包含了音视频数据和音视频参数两种信息,这两种信息打包放在一个文件中采用的格式,就叫做封装格式,也叫容器。个人觉得叫封装格式更容易理解。

目前,人们已经发明了很多种视频文件格式。当然发明这些格式并不是一拍大腿想起来的,而是在特定的使用场景下,对应的视频格式,可以更高效地存储和处理音视频数据。

由于封装格式在开发中基本上都是由库来处理,不需要我们自己封装和解析,所以可以先不做细致了解。在初学阶段的首要任务是把握音视频的整体工作框架,某些技术细节可以先放一放,后面再研究。这也是笔者建议的学习方法:学习精力分配要遵循二八定律,大部分领域中,只有大约20%的知识最重要,在这20%上面我们要花80%的时间,剩下80%不是那么重要的,只需要花20%的时间即可。

编码格式(压缩)

不经过压缩的音视频数据是很大的。例如:

1920x1080的RGB24图像,1秒25帧,不压缩,1小时的视频总大小约为 1920 * 1080 * 3 * 25 * 60 * 60 = 521G。 这种情况下,500G的电脑硬盘,最多只能存1个小时的电影;刷小视频会变得很卡;百度网盘128KB/s的速度下载一部电影需要一两个月.....

所以,音视频 「必须被压缩后存储或者传输」

采用某种编码格式(即压缩格式)对音视频数据进行压缩,压缩后的音视频数据和音视频参数一起按照某种封装格式,被打包放入到音视频文件中,这样就生成了视频文件。

4. 音视频数据基本单位

4.1 采样/抽样

首先要明白采样/抽样的概念。 视频采样是指:以某一速度对物体连续拍照,不断记录物体在某一瞬间的画面。 音频采样是指:以某一速度连续记录声音在某一瞬间的震动幅度。 采样是对原事物的一种反映手段。对于采样后的音视频数据,计算机可以进行播放和加工处理。

4.2 视频帧

每一个时刻拍的那张照片,就叫视频帧,它是视频的基本数据单位。

4.3 PCM音频采样点

每一个时刻获取到的声音振幅,就叫PCM采样点,它是音频的基本数据单位。

了解这些基本够用了,不需要深入地去研究过多的细节。最主要的是要了解,通过采样可以将现实世界的事物反映到计算机中,变成可处理的数据。

5. 音视频参数

既然音视频数据是经过采样得到的,那么我们想要播放音视频数据,就必须用到采样过程中使用到的一些参数,这样音视频数据才能正确的反应原事物的状态。

5.1 音频参数

5.1.1 基本参数

音频有三个基本参数:

  • 采样位数:表示每个采样使用多少个比特位来保存,一般为4、8、16、32位(bit)。采样位数为8 bit时,每个采样点可以表示256个不同的采样值,而采样位数为16 bit时,每个采样点可以表示65536个不同的采样值。采样位数的大小影响声音的质量,采样位数越多,量化后的波形越接近原始声音,声音的质量越高,但是需要的存储空间也越多;位数越少,声音的质量越低,需要的存储空间越少。通常,CD音质的采样位数是16 bit,移动通信是8 bit。
  • 采样频率(Sampling Rate):表示一秒钟采样多少次,常用的采样频率有44100=44.1k,以及44800=44.8k。采样频率必须至少是人可以听到的频率的2倍,这是由奈奎斯特采样定理得到的,采样频率再低的话,原声音中的频率就会丢失。奈奎斯特采样定理是信号与系统这门课中的,不懂的话没关系,不需要做过多了解。
  • 声道数:声道数是指有多少个录音麦克风放在音源的周围录音。声道间是独立、同时进行采样的。大部分音乐是双声道的,播放时用耳机听,会有一定的立体感。

上面三个是最基本的三个参数,只要知道了这三个参数,就可以将声音记录下来,而且可以播放出来。

这三个参数怎么记忆呢?按照从小到大、从少到多的逻辑记忆即可:

  • 先从单个采样点开始,存储一个点所用位数叫采样位数;
  • 一秒钟采样得到的采样点的个数叫采样频率;
  • 同时进行的采样任务的个数叫声道数。

5.1.2 网络参数

为什么要说网络参数呢,由于互联网的发展,音视频成为一种服务,逐渐出现在互联网上。在线看电影,刷短视频,上网课等等都已经成为了一种新的生活方式。把音视频搬到网络上,必然会有一些和网络相关的技术参数,来实现对音视频服务的控制。有如下几种:

  • 码率:单位是 比特每秒,英文是bps(bit per second)。此参数表示播放某音频需要占用多少网络带宽。因为码率是网络环境下的参数,所以要结合网络来理解。网络带宽就是网络速度,单位是bps。咱们家里办的宽带,一般都是百兆千兆的带宽,听着似乎很快,但是由于它的单位是bps,实际上转换成字节(Byte),要除以8,百兆不过12.5MB/s,千兆不过125MB/s每秒。因为文件是以字节为单位衡量的,所以这个速度实际上并不是像听起来那么快。所以,码率是衡量音频在网络上传输时,对网络带宽占用量的一个参数。当网络带宽比较小时,可以选择降低音视频码率,这可以通过降低音频质量来实现;当网络带宽比较大时,可以选择提高音频码率,传输更高质量的音视频。

5.2 视频参数

5.2.1 基本参数

视频有三个基本参数:

  • 像素格式:像素用来保存某一点的颜色,这个颜色可以采用不同的格式存储。常见的有RGB、YUV、HSV等。学习这些格式需要一定的数学运算,我们后面将单独写一篇文章讲解,并计划写一个工具来实现他们之间的转换。
  • 画面分辨率:分辨率是指一帧画面的长宽各有多少像素,一般的写法是宽 * 高,如1920 * 1080。分辨率越高,画面越细腻。
  • 帧率:帧率是指1秒钟播放的帧的个数,帧率越高,画面越流畅,帧率越低,画面越卡顿。

对视频基本参数,也可以采用从小到大的逻辑记忆:

  • 先从最基本的像素开始,存储某颜色的格式叫像素格式。
  • n个像素构成一帧画面,帧的长宽叫做分辨率。
  • n个帧连续播放才能形成视频,帧率是指1秒中播放的帧的个数。

5.2.2 网络参数

视频的网络参数和音频类似,主要有:

  • 码率:解释同音频的码率。需要提及的是,视频的码率等级比音频多一些,因为视频的数据相对于音频数据,大了不止一点点,所以视频码率等级分的也更多。

结语

本文主要是梳理了一下音视频中的必须了解的基本知识。笔者对本系列文章的定位是既要精简又要通俗易懂。现代社会每个人都很忙,尽量降低学习成本,才是一个优秀的教程应该做的事情,而不是把简单的东西用一些专业术语和公式把它复杂化。后面的文章会陆续在公众号及网站更新,希望大家多多关注。


附录及参考链接

  • 雷神博客链接:视音频数据处理入门:PCM音频采样数据处理
  • PCM百度百科:https://baike.baidu.com/item/PCM/1568054
  • 音频基础知识—PCM浅析:cloud.tencent.com/developer/article/1802685
  • 原文链接:https://www.qtfuture.cn/?thread-32.htm

本文原创发布于微信公众号Qt未来工程师。