你敢信?你手机里刷到的每一张照片、每一段视频,拆开看根本不是画面,而是一长串密密麻麻的0和1。
可就是这两种数字,能组合出1677万多种颜色,还能让每秒几十帧的静态画面连成流畅视频,你每次点亮屏幕,背后都在上演一场速度快到看不见的“数字变形记”。
计算机本身并不认识红色、蓝色,也不理解一个人正在笑,它能识别的,最底层其实只有两种状态:有电和没电。
文字、音乐、照片、电影,进入电脑和手机之后,都得先翻译成二进制,屏幕上的一束光、一个人的轮廓、镜头移动时产生的变化,最后都会变成由0和1排列出来的数据。
数字越多,能表达的状态也越丰富,8位二进制可以表示256种状态,24位则能表示2的24次方,也就是16777216种状态。
一张照片在机器眼里,也不是完整的一幅画,而是被切成了无数个小格子,每个小格子就是一个像素。比如一张800×600的图片,横向有800个像素,纵向有600个像素,总数达到48万。
像素越密,画面通常越细腻,你把一张低分辨率图片放大,很快就能看到一格一格的马赛克;换成高分辨率照片,即使放大不少,人物发丝和物体边缘也更清楚。
每个像素显示什么颜色,要靠红、绿、蓝三种光混合出来,也就是RGB,计算机分别给这三种颜色分配一个数值,范围都是0到255,数字越大,代表对应的光越亮。
人眼对大面积、变化缓慢的主体更敏感,对特别细碎的边缘和纹理没那么敏感,JPEG就会尽量保留低频信息,把一部分高频细节压缩,甚至直接舍弃。
这也是JPEG图片被放得特别大后,边缘会发糊、局部会出现方块的原因。被删掉的细节通常无法完整找回,但在正常观看距离下,人眼往往察觉不到太多变化,文件体积却可能缩小到原来的二十分之一左右。
视频的道理更有意思,它本质上不是一整段连续的“动态画面”,而是一张张图片快速播放,每一张图片,都叫一帧。
按照每秒30帧计算,一分钟视频就包含1800帧,如果每一帧都像普通照片那样完整保存,文件大小会大得惊人,网络传输和设备存储都很难承受。
视频编码器采用了一个很聪明的办法:相邻画面之间,大部分内容其实没有变化。
比如有人坐在沙发上看电视,房间背景、沙发和墙壁基本不动,可能只有嘴巴、手臂或者眼睛在变化。编码器没必要每一帧都重复保存整间屋子,只要记录“哪里变了、变成什么样”就行。
视频里的第一张完整画面叫关键帧,它相当于一个参照物,后面的预测帧主要保存与前一帧之间的差异。变化小,记录的数据就少;变化大,需要记录的内容就多。
遇到镜头切换,画面突然从客厅跳到街道,编码器就会重新插入关键帧,这样可以避免后面的画面一直依赖错误的参照,也能让视频在拖动进度条时更快恢复正常。
靠着这种“只保存变化”的思路,视频压缩效率非常高。H.264可以把原始视频数据压缩到大约八十分之一,H.265在相同画质下还能比H.264节省一半左右的码率,更新的H.266又能在H.265基础上再省下接近一半的数据量。
一部两小时的1080p电影,如果完全不压缩,原始数据大约要1TB,经过H.264编码后,可能只剩5GB左右,体积缩小了整整200倍。我们下载电影、刷短视频、在线观看视频,看到的几乎都不是原始画面,而是经过编码压缩后的版本。
播放时,流程会反过来,播放器先读取那串二进制数据,再通过解码器把它还原成一帧帧画面,计算出每个像素里红、绿、蓝三种光应该有多亮,最后交给屏幕上的发光单元。
这些发光单元按照对应强度亮起来,30帧、60帧,甚至120帧画面连续出现。你的眼睛和大脑会把一张张静止图片连接起来,于是屏幕里的人开始走动,汽车开始飞驰,光影也像真的流动起来。
从0和1到满屏色彩,中间并没有什么神秘魔法,靠的是一整套编码、压缩、传输和解码规则。编码器把画面拆成数字,解码器再把数字拼回画面,芯片、内存和屏幕驱动则负责在极短时间内完成接力。
如今,手机视频已经从1080p走向4K、8K,帧率从30帧提升到60帧、120帧,压缩标准也在不断更新。画面会越来越清晰,动作会越来越顺滑,文件却未必同步膨胀。
你下一次滑动屏幕时,不妨想一想:眼前一闪而过的画面,刚刚还只是芯片里高速穿行的一串0和1。所谓“看见世界”,有时就是数字先翻译,屏幕再发光。

