数字逻辑(五)——用二进制来表示音频和视频

devtools/2024/12/26 8:24:02/

目录

1. 用二级制来表示音频 

1.1 采样

1.2 量化

1.3 编码

2. 用二进制来表示视频

2.1 使用二进制来存储文件

2.2 使用二进制来采集视频

2.3 计算机如何播放视频


1. 用二级制来表示音频 

声音是由物体的振动来表示的,振动是一种连续的波形,因此声音信息是一种模拟信号。但是计算机所能够表示的信息都是离散的,只能处理离散的数字信号,因此需要对于声音进行一定的处理,将模拟信号转换为数字信号。

其中最重要的有三步:采样、量化和编码。流程如下所示:

图1 用二进制表示音频过程图

1.1 采样

采样是将模拟信号转换为数字信号的第一步,通过固定间隔内”捕捉“音频信号的平均值来完成这一目标。

对于一段连续的音频,首先将其拆分为很多份的,每一份都需要记录一个平均振幅。每秒采集样本的次数称为采样率,通常是以赫兹(Hz)位单位。拆分的过程中通常会产生信息丢失,因此采样率越大,信息丢失越小,音频的还原程度越高,但同时也会增加数据量。计算机中使用二进制来表示一个采样点的振幅,例如8位的二进制来表示一个采样点振幅,可以使用0~255来表示一个振幅级别。使用16位的二进制来表示一个采样点,可以使用0~65535来表示一个振幅级别。

 如下图所示这是一个连续的模拟信号(仅作演示使用,实际上的音频文件比此图要复杂得多):

图2 连续的模拟信号图

 对上图进行声音信号的采样后为:

图3 对于声音信号的采样图

如何比较振幅的大小呢?如下图中,在水平方向上,每一个线段表示一个频段,从左到右的的频率是逐渐增大的。(从图中不能直接观察到);而在竖直方向上,线段的高度越高,那么表示振幅(即表示响度)越大。这是某个时刻的频谱图,将所有时刻的声音连接到一起就成为一个完整的音频文件。

图4 某时刻音频文件各个频段的振幅

1.2 量化

采样过后,需要对于声音的进行量化,量化过程是模拟信号到数字信号的转变。通过数字转换器(ADC)转化,量化过程是将采样的幅度映射到有限数量的离散值。

如下所示图5转换为为离散的音频信号:

图5 离散的音频信号图

 之后再完全转换成了离散的数字信号:

图6 转换为数字信号示意图

到此已经完成了对于音频的采样和转换的过程,波形的模拟信号完全转换为了离散的数字信号图。

在有的计算机的录音机软件,会显示相关声音的音频信号图,例如下面是在计算机的录音机中得到一段音频:

图7 计算机的录音机的音频信号图

1.3 编码

编码过程就是将量化之后的数字信号转换为储存和处理的形式。这个过程就是将二进制数据写入文件当中。常见的音频文件包括:mp3文件、FLAC文件和WMA文件。例如这种MP3文件的形式:

图8 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文件),然后运行上面代码,运行结果如下所示:

图9 将音频二进制文件转换为音频波形图

可以看到上面的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:表示视频像素总和,是像素的行数与列数相乘的结果。

下面手机视频剪辑软件中的界面如下所示:

图10 手机视频剪辑界面示意图

在上面的内容中包括分辨率为1080P,表示视频像素的行数为1080行;下面有连续图像帧,最下面作为视频配乐的音频。这些都是这个视频中基本信息。

视频文件为什么比图片文件大得多,对于图片来说,只包含单幅图片的信息,而对于视频文件来说,而视频文件包含一系列连续的图像帧以及音频信息,假设一个视频是 24fps(每秒 30 帧),时长为 1 分钟,分辨率也是 1920×1080,那么它就包含 24×60 = 1440 帧图像。

2.2 使用二进制来采集视频

采集完整的视频的过程和包括采样和编码两个过程。如下所示:

图11 使用二进制来采集视频过程图

视频采集过程可以使用多种设备进行采集,包括摄像头、录屏软件等等。在采集完成之后,需要对于文件进行编码,常见的编码方式包括H.264/AVC 和 H.265/HEVC 等,这些方式通常利用数据的空间冗余和时间冗余进行压缩。

2.3 计算机如何播放视频

当用户需要播放视频时,首先打开视频编译器对于视频进行解码,读取视频的编译信息,然后采用的编码标准(如H.264)通过相应的解码器将压缩的数据还原为原始的视频帧数据。

之后使用GPU(图形处理单元)或者CPU(中央处理器)进行渲染,最终将处理过后的视频帧传递到屏幕缓冲区,最后视频帧显示在屏幕上。

利用二进制播放视频的流程图如下图所示:

图12 计算机播放视频文件的流程图

http://www.ppmy.cn/devtools/145046.html

相关文章

选择屏幕的用法

**************************定义控件*********************************** SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002. SELECT-OPTIONS bukrs FOR iloa-bukrs . "公司代码 SELECT-OPTIONS swerk FOR iloa-swerk OBLIGATORY . "工厂 SELECT-O…

STM32-按键扫描配置

问题引入 由于在使用例程中的按键时,发现按键无效,经过Debug发现程序进入按键扫描死循环中。 由于初始按键引脚时,按键引脚上拉,按下为高电平。给的引脚配置为浮空输入(不确定高低电平),导致初…

如何理解TCP/IP协议?如何理解TCP/IP协议是什么?

理解TCP/IP协议 1. 什么是TCP/IP协议? TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是一组用于实现网络通信的协议,广泛用于互联网和局域网中。TCP/IP协议栈由一系列协议组成,规定了计算机如何在网络中发送和接收数据。它通常被用来…

ES学习class类用法(十一)

这里写目录标题 一、class 类的用法二、类的继承 一、class 类的用法 JS语言中,生成实例对象的传统方法是通过构造函数: function Person(name,age){this.namename;this.ageage;}Person.prototype.sayNamefunction(){return this.name}let pnew Person(…

[N1CTF 2018]eating_cms

[N1CTF 2018]eating_cms 知识点 文件上传 解题 这个题感觉还好,知识点真心不难,就是全混在一起。 思路差不多挺离谱 首先看到,有一个登录界面,然后猜测有注册界面 admin注册不了,随便注册一个账号。 注册之后&…

TCP为什么需要三次握手和四次挥手?

在 TCP/IP 协议中,三次握手(Three-Way Handshake)和四次挥手(Four-Way Handshake)是为了确保可靠的数据传输和连接的建立与断开。下面将详细讲解这两个过程,并结合实际项目代码示例进行解释。 1. 三次握手(三次握手) 三次握手是用来建立一个 TCP 连接的过程。通过这个…

汽车经销商门店管理新趋势:信息化工具助力精益运营

随着汽车市场竞争日益激烈,新能源汽车的崛起、新零售模式的普及,以及消费者对服务体验需求的不断提高,传统汽车经销商的门店运营正面临严峻挑战。如何在这种充满不确定性的市场中维持竞争力?答案就在于——精益运营。 汽车经销商门…

鸿蒙学习笔记:用户登录界面

文章目录 1. 提出任务2. 完成任务2.1 创建鸿蒙项目2.2 准备图片资源2.3 编写首页代码2.4 启动应用 3. 实战小结 1. 提出任务 本次任务聚焦于运用 ArkUI 打造用户登录界面。需呈现特定元素:一张图片增添视觉感,两个分别用于账号与密码的文本输入框&#…