计算机的0和1是怎么变成我们屏幕上看到的图片、视频和声音的呢?

B站上看到的视频,看完后有了一点粗略的了解,做下笔记。

参考:https://www.bilibili.com/video/av19369528/

 

我们都知道,对于计算机来说,所有东西都是由一堆0和1组成的,那么这些0和1是怎么变成我们屏幕上看到的图片、视频和声音的呢?

一、文字

举个例子:我们生活中的苹果,在中文里面,是由“苹果”来表示的,在英文中,是由“Apple”来表示的,在日文中,是由りんご(ringo)来表示的。这三个单词,都表达了“苹果”这个东西。

虽然语言可以不同,表达一个东西的方式可以不一样,但是这些语言都有自己的规则,中文中的苹果就是“苹果”,英文中的苹果就是“Apple”,日文中的苹果就是りんご。

我们的计算机也是一样的道理,虽然在我们看来,数据是一堆毫无规则的0和1,但是这些0和1都有相应的读取规则,那就是编码表(比如ASCII)。

在编码表中,包含了文字、标点符号等各种各样的信息。比如说,计算机内部存在一串01001011这样一串数据,计算机就会在编码表里找到这串数据对应的东西,然后再把这个东西显示出来,这就出现了我们所看到的文字。

举个例子:01000001,在ASCII编码表中代表大写字母A。计算机先找到01000001这串数据,在编码表中找到对应的字母A,再输出到屏幕。最后,我们就能看到一个字母A。

这里还有一个问题,同样的一串数字,如果使用不同的编码表,表达的意思完全不一样(这就像同样一个苹果,用中文和英文表达出来的意思就不一样)。就像ASCII,因为存在二进制位数的限制,只能翻译成英文,无法表达出其他文字。

为了扩充ASCII编码,以用于显示本国的语言,不同的国家和地区制定了不同的标准。比如GB2312,就是中文常用的编码表。

二、图片和视频

图片和视频,又是怎么变成0和1的呢?

我们打开一张黑白图片,把图片放大之后,就会看到一个一个的小方格,就是平时所说的像素点。假设每个图片的像素点,只能用一个二进制位来表示(非0即1),那么0就代表白色,1就代表黑色。把这些像素点按照一定的规律组合起来,储存在计算机中,就变成了一张黑白图片。

图片像素点的二进制位越多,这个像素点可以表示的颜色就越丰富。如果能用两个二进制位来表示一个像素点,就有00、01、10、11,四种情况,即2的2次方,可以表示四种颜色,图片就可以打破黑白二色的限制。

以此类推,当我们用8个二进制位来表示一个像素点的时候,每个像素点可以表达2的8次方种颜色,共256种,这就是常说的“256色”的来历。

至于视频,是由一系列图片通过一定的速率播放得来的,本质上就是一堆图片。如何表示图片,就能如何表示一段视频。

三、声音

声音是怎么变成0和1,储存在计算机里面的呢?

timg

举个例子:我用麦克风录制了一段10秒钟的音频,声音的波形会是一段平滑的曲线(模拟信号),计算机需要尽可能地把这段平滑的曲线,翻译成一串数据,重新模拟出来。

第一步,就是对曲线进行采样。如果计算机每秒钟对声音采样一次,采样完成后,就会得到一串间隔为1s的采样点。

那么问题来了,因为采样间隔很大,采样点会很离散,声音波形就不够平滑,和原声差距很大,最终表现为声音失真。那么,要怎么让模拟出来的声音的波形,和原声尽量接近呢?

解决办法就是提高计算机的采样频率,比如从原来的1秒1次,改成1秒10次,频率越高,采样点就越多,采样的曲线就会越平滑,越接近原声的波形,听起来就越接近原声。

第二步,就是把刚才模拟出来的曲线进行量化。

量化是什么意思呢?就像我们的考试成绩一样,有1、30、50、60、77、88、99这些分数,学校需要给每个同学评一个分数等级。因为学生很多(采样点很多),我们不可能给每个分数一个等级(0分为辣鸡,1分为小辣鸡…),只能用“分数段”的形式来评级。

于是,学校规定了一个评分标准,60分以下为不及格,60至70为中,70至80为良,80以上为优秀,把所有学生的分数,分成这四个不同的等级,最后公布成绩的时候,就可以这样说:“xx你的成绩很优秀!xx你不合格…”,这就是量化的一种方式。

同理,我们可以把采样得到的曲线进行量化,等到不同的等级:

u=2560903551,3987246567&fm=27&gp=0

量化之后,需要进行编码。比如0级就编码成0000,1级就编码成0001,最后就把所有的等级编码成了一段数据,记录下来就完成了整个储存过程。

至于声音的播放,就是把整个储存过程逆转过来而已。

四、总结

简单的科普,基本原理似乎很简单,难在细节问题。简单了解一下。