目录
1. 用二级制来表示音频
声音是由物体的振动来表示的,振动是一种连续的波形,因此声音信息是一种模拟信号。但是计算机所能够表示的信息都是离散的,只能处理离散的数字信号,因此需要对于声音进行一定的处理,将模拟信号转换为数字信号。
其中最重要的有三步:采样、量化和编码。流程如下所示:
1.1 采样
采样是将模拟信号转换为数字信号的第一步,通过固定间隔内”捕捉“音频信号的平均值来完成这一目标。
对于一段连续的音频,首先将其拆分为很多份的,每一份都需要记录一个平均振幅。每秒采集样本的次数称为采样率,通常是以赫兹(Hz)位单位。拆分的过程中通常会产生信息丢失,因此采样率越大,信息丢失越小,音频的还原程度越高,但同时也会增加数据量。计算机中使用二进制来表示一个采样点的振幅,例如8位的二进制来表示一个采样点振幅,可以使用0~255来表示一个振幅级别。使用16位的二进制来表示一个采样点,可以使用0~65535来表示一个振幅级别。
如下图所示这是一个连续的模拟信号(仅作演示使用,实际上的音频文件比此图要复杂得多):
对上图进行声音信号的采样后为:
如何比较振幅的大小呢?如下图中,在水平方向上,每一个线段表示一个频段,从左到右的的频率是逐渐增大的。(从图中不能直接观察到);而在竖直方向上,线段的高度越高,那么表示振幅(即表示响度)越大。这是某个时刻的频谱图,将所有时刻的声音连接到一起就成为一个完整的音频文件。
1.2 量化
采样过后,需要对于声音的进行量化,量化过程是模拟信号到数字信号的转变。通过数字转换器(ADC)转化,量化过程是将采样的幅度映射到有限数量的离散值。
如下所示图5转换为为离散的音频信号:
之后再完全转换成了离散的数字信号:
到此已经完成了对于音频的采样和转换的过程,波形的模拟信号完全转换为了离散的数字信号图。
在有的计算机的录音机软件,会显示相关声音的音频信号图,例如下面是在计算机的录音机中得到一段音频:
1.3 编码
编码过程就是将量化之后的数字信号转换为储存和处理的形式。这个过程就是将二进制数据写入文件当中。常见的音频文件包括:mp3文件、FLAC文件和WMA文件。例如这种MP3文件的形式:
同时,也可以进行相反的过程,将一个音频的二进制文件转换相应的音频波形图。在计算机中,可以利用Python代码对于对于二进制的音频文件进行读取,再对于画出转换后的模拟信号的波形图。如下所示为Python的代码:
import numpy as np
import matplotlib.pyplot as plt
# 读取音频二进制文件
with open('audio.bin', 'rb') as file:
data = file.read()
# 将二进制数据转换为音频波形数据
audio_data = np.frombuffer(data, dtype=np.int16)
# 绘制音频波形图
plt.figure(figsize=(10, 4))
plt.plot(audio_data)
plt.xlabel('Sample')
plt.ylabel('Amplitude')
plt.title('Audio Waveform')
plt.show()
现在可以尝试将bin文件通过Python语言就行读取(音频原件来源于:音频)。将原先下载的wav文件转换为bin文件的格式(wav文件可以转换为bin文件),然后运行上面代码,运行结果如下所示:
可以看到上面的bin文件中的二进制变为音频波形图,可以见到计算机成功将二进制的数字信号变成了声音的模拟信号。
2. 用二进制来表示视频
2.1 使用二进制来存储文件
视频由一系列静态图片组成,图片通过快速连续的播放,让观看者感觉不到运动。当一系列静态图像以足够快的速度连续显示时,人眼无法区分它们之间的间隔,因此会感知到连续的运动。
帧(Frame)是视频序列中的单个静止图像。每一帧捕获了视频在特定时间点的画面。视频是由一系列连续的帧组成的。当这些帧以一定的速率(帧率)连续播放时,由于人眼的视觉暂留效应,它们会形成一个连续运动的错觉。
帧率(Frame Rate),又称为帧速率,值的是每一秒播放的视频的帧数,以”帧每秒“(frame per second,简写为fps)为单位,常见的帧率为24fps(应用于电影领域)、25fps(欧洲和中国的电视传播领域)、30fps(北美、南亚和日本的电视和互联网视频)、60fps和120fps等等,24fps指的是每秒播放24幅静态图像,即每秒播放24帧。帧的速率越高,那么视频播放越流畅,帧数越低的视频,可以带来电影的质感。
而计算机中的分辨率为显示器和图像在单位面积内包含的像素数量,通常以横向和纵向的像素点来衡量。一般来说,像素越多,那么分辨率越大,图像越清晰,图像文件也就越大。常见的分辨率博包括VGA、SVGA、XGA、SXGA、WUXGA等。VGA(640×680)是IBM计算机的一种显示标准;SVGA(800×600),专指800×600的分辨率;WUXGA(1920×1200),UXGA的宽屏幕版,必须需要足够大的屏幕。
在分辨率后面有个后缀,例如1080P,这个后缀通常有P、K和MP,分别表示不同的意思。
- P:表示“视频像素的总行数”,例如:720P和1080P,720P表示视频行数为720,1080P表示的是视频行数为1080。1080P的镜头通常是1940×1080。
- K:表示“视频像素的总列数”,例如:4K,表示的是视频一共有4000列的像素,具体可能是3940列或者4096列。
- MP:表示视频像素总和,是像素的行数与列数相乘的结果。
下面手机视频剪辑软件中的界面如下所示:
在上面的内容中包括分辨率为1080P,表示视频像素的行数为1080行;下面有连续图像帧,最下面作为视频配乐的音频。这些都是这个视频中基本信息。
视频文件为什么比图片文件大得多,对于图片来说,只包含单幅图片的信息,而对于视频文件来说,而视频文件包含一系列连续的图像帧以及音频信息,假设一个视频是 24fps(每秒 30 帧),时长为 1 分钟,分辨率也是 1920×1080,那么它就包含 24×60 = 1440 帧图像。
2.2 使用二进制来采集视频
采集完整的视频的过程和包括采样和编码两个过程。如下所示:
视频采集过程可以使用多种设备进行采集,包括摄像头、录屏软件等等。在采集完成之后,需要对于文件进行编码,常见的编码方式包括H.264/AVC 和 H.265/HEVC 等,这些方式通常利用数据的空间冗余和时间冗余进行压缩。
2.3 计算机如何播放视频
当用户需要播放视频时,首先打开视频编译器对于视频进行解码,读取视频的编译信息,然后采用的编码标准(如H.264)通过相应的解码器将压缩的数据还原为原始的视频帧数据。
之后使用GPU(图形处理单元)或者CPU(中央处理器)进行渲染,最终将处理过后的视频帧传递到屏幕缓冲区,最后视频帧显示在屏幕上。
利用二进制播放视频的流程图如下图所示: