在聊天软件里一次选中二十张照片,点发送,进度条几乎只闪一下。点开一部高清电影,缓冲几秒就开始播放。这些体验太自然了,自然到很少有人停下来想一个问题:如果照片、音乐和视频都按最原始的方式保存,互联网还装得下我们的生活吗?
答案可能是装不下。一张1200万像素的彩色图片,如果每个像素直接用红、绿、蓝三个字节记录,展开后大约需要36MB。二十张就是720MB。视频更夸张:一段1920×1080、每秒30帧的视频,一分钟就会产生大约11GB数据,一部两小时的电影将超过1TB。
我们今天能随手拍照、在线听歌、刷短视频,一件很重要的事在于,计算机学会了不把所有原始数据都原封不动地保存和发送。这就是数据压缩。
压缩的直觉比计算机更古老
压缩的思想其实比计算机更古老。19世纪,人们通过电报传递信息,每多发送一个点或一道划,都意味着更多时间和费用。于是莫尔斯电码把常见字母使用较短的编码,不常见的字母使用较长的编码。
在英文中非常常见的字母E,只需要一个点;很少出现的Q,则需要更长的点划组合。这已经包含了数据压缩最核心的直觉:经常出现的内容少占一点位置,少见的内容多占一点位置。
不过,当时的人只是凭经验这样做。究竟一段信息最少能压缩到多小,压缩有没有无法突破的极限,还没有人能说清楚。直到1948年,克劳德·香农发表《通信的数学理论》。
香农没有研究一封电报具体在说什么。他关心的是,一条消息中究竟有多少不确定性。如果某个符号几乎每次都会出现,它带来的新信息就很少;越是难以预测的符号,携带的信息越多。由此,他用“熵”衡量一个信息源平均包含多少信息,也给无损压缩划出了一条理论底线:只要要求数据能够原样恢复,就不可能无限压缩。压缩到一定程度以后,再少一个比特都可能丢失信息。
香农告诉了人们终点在哪里,但还需要有人找到走近它的办法。
一份学生作业,成了压缩史上的经典
1951年,麻省理工学院研究生戴维·霍夫曼被要求设计一种尽可能高效的二进制编码,他提出的方法后来被称为霍夫曼编码。
可以把它理解成给不同内容设计简称。假设一段文字里,“的”出现了几百次,而“龘”只出现一次,那么让两个字都占用同样长度显然不划算。霍夫曼编码会根据出现频率,把短编码留给常见内容,把长编码分给少见内容。
这样做并没有删除任何东西。解码时,原文仍然可以一个字不差地恢复,这属于无损压缩。斯坦福大学的课程资料记载,霍夫曼在1952年发表了这一方法。直到今天,它的思想仍存在于多种图像和文件压缩技术中。
后来出现的字典压缩又向前走了一步。它不只统计某个字符出现多少次,还会寻找反复出现的片段。比如一篇文章中,“数据压缩”出现了几十次,计算机可以先把这四个字收入字典,之后每次只记录一个较短的编号。我们熟悉的ZIP等压缩文件,基本思路就是寻找重复模式,再用更短的表示替代它们。
有一点需要注意,对于文字、程序、表格和合同的压缩,务必十分谨慎。举个例子,银行账目一个数字被删掉,后果是非常可怕的。
为什么一定要全部保留?
后来人们开始问:为什么一定要全部保留?
一张照片中,相邻像素往往很接近。蓝天的一大片区域可能都是相似的蓝色,墙壁上连续几百个像素的亮度也不会突然剧烈变化。如果把每个像素都当作毫无关系的新数据来保存,显然浪费了大量空间。
更关键的是,人眼并不能同等敏锐地感知所有变化。我们对某些轮廓和明暗变化很敏感,对非常细碎的纹理和部分颜色差异却没那么敏感。于是,压缩技术出现了另一个方向:不再要求数据绝对完整,而是优先保留人真正容易察觉的部分。这就是有损压缩。
1992年形成的JPEG标准便是代表。它通常会把图像分成一个个小块,把像素转换成不同频率的成分,再较为粗略地记录人眼不敏感的部分。最后得到的图片已经不等同于原始数据,但只要压缩程度合适,人们很难看出明显差别。JPEG组织的官方介绍显示,JPEG 1的标准化工作始于1986年,标准于1992年建立,其核心有损格式结合了离散余弦变换、量化和霍夫曼编码。
这也是为什么一张展开后几十MB的照片,保存成JPEG以后往往只剩几MB。它把人眼不太在乎的部分删掉了。但如果压缩过度,那些被删去的细节就会显现为色块、模糊和方格状痕迹。网上一些被反复转载的老照片越传越糊,就是这个原因。
MP3压缩的是人的听觉
照片可以利用人眼的局限,声音也可以利用人耳的特点。
未经压缩的CD规格立体声音频,每秒大约需要1411千比特。一首四分钟的歌曲,数据量大约为42MB。今天看来不算很大,可在拨号上网和小容量硬盘的年代,它足以让普通用户等很久。
MP3改变了这件事。人的耳朵并不能听见所有频率;当一个强烈声音和一个相近的微弱声音同时出现时,后者还可能被前者掩盖。MP3会分析声音,把听觉上不明显的部分用较少数据记录,甚至直接舍弃。
以每秒128千比特计算,一首四分钟的MP3只有大约3.8MB,差不多是同等时长CD原始音频的十分之一。
20世纪80年代末,德国弗劳恩霍夫团队一直尝试让高质量音乐通过容量有限的通信线路传输。MPEG-1音频标准随后形成。1995年,团队正式选定“.mp3”作为MPEG Audio Layer III的文件扩展名。弗劳恩霍夫记录的发展时间线显示,早期MP3很快被用于小容量硬盘和28.8kbps调制解调器上的音乐传输,便携式数字音乐也由此成为可能。
在这之前,人们携带的是磁带和CD;在这之后,人们可以把整个音乐收藏装进口袋。MP3使得音乐第一次可以如此方便地复制、传输和随身携带。唱片业的销售方式、个人听歌习惯以及后来的流媒体服务,都被它推着改变了方向。
视频压缩:让互联网从文字网变成视频网
如果说JPEG解决了一张图片的问题,视频就要解决每秒几十张图片的问题。
最笨的办法,是把每一帧都当作一张完整照片保存。但视频前后两帧通常非常相似。一个人坐在镜头前讲话,背景里的墙、桌子和窗户可能几秒钟都没有变化,真正发生变化的只是嘴部、表情和少量身体动作。
视频编码器会先保存一幅相对完整的画面,再预测后续画面发生了什么。有时它只需要记录:画面中的这一小块向右移动了几个像素,那一小块亮了一点,另一个区域没有变化。于是,原本需要不断发送的完整图片,被替换成了运动方向、差异信息和少量新的画面内容。
这也解释了为什么视频通话时,如果一个人静静坐着,画面通常很清楚;一旦镜头剧烈晃动,或突然出现大量飘雪、树叶、水花,画质就容易下降。因为几乎整个画面都在变化,算法很难继续靠“和上一帧差不多”来节省数据。
2003年定稿的H.264等现代视频编码标准,把帧内压缩、帧间预测、运动补偿等方法组织成了完整系统。后来的视频编码不断提高效率,让高清、4K乃至更高分辨率的视频能够进入普通家庭网络。没有视频压缩,今天的短视频、直播、在线视频会议和云游戏,即使不是完全不能实现,规模和价格也会与现在截然不同。
压缩不是魔法,互联网也不是无限宽
压缩只是寻找可以不必须发送的东西。只有存在规律和冗余的数据才容易压缩。
- 重复的文章可以压得很小,接近随机的数字则很难再缩;
- 已经压缩过的JPEG、MP4和ZIP再打包,体积通常不会明显下降;
- 有损压缩也不能无限进行,码率越低,丢失的信息通常越多。
这背后始终是一场无奈的取舍。带宽不够,就多花算力压缩;手机性能有限,就接受稍大的文件;医学影像、工程图纸和档案要减少损失甚至坚持无损;小屏幕上看短视频,则可牺牲难以察觉的细节。我们买的每部手机、看的每段视频,都在寻找这种平衡。
互联网发展常被写成网速提升史。从拨号到宽带,从3G到5G。但另一条线索同样重要:图片从BMP变成JPEG,音乐从PCM变成MP3、AAC,视频从逐帧保存变成预测编码。网速一快,更清晰的图片、更高分辨率的视频和更丰富的内容又把新增带宽填满;存储从MB走向TB,相册和应用也随之膨胀。我们从未真正拥有用不完的空间,只是压缩算法一直在背后腾位置。
所以,数据压缩不只是右键菜单里的“添加到压缩包”。它改变了音乐如何传播、照片如何保存、电影如何抵达家庭,也支撑着视频通话、网络直播和短视频平台的规模。我们以为互联网是一根越来越粗的水管,其实在水管变粗的同时,工程师也在几十年里研究如何把同样的生活折叠成更小的数据,从仍然有限的管道中送过去。互联网装得下我们的生活,不只是因为它越来越大,也因为数据学会了变小。
热门跟贴