你看过仅有4kb的《哪吒2》吗?知道是如何压缩的吗?

昨天,我在微信群里看到了一张GIF动图。

我盯着看了好久,发现其没有结束,貌似能一直放映下去,

我又仔细看了看,发现放映的内容居然是哪吒2!

就在我感到疑惑时,又发现了好几条与之内容相同的GIF,但清晰度上有所差别。

对此感到好奇的我去网上搜了一下,原来这是网友们自发组织的一场哪吒2的压缩大赛,俗称“压片战争”。

看了很多网友的压缩大小,从最开始的50M,再到30M,再到577kb,甚至到4.46kb。

到目前最小已经到了7b了。。。

真是佩服当代网友的技术啊。

但这场大赛本身并不是我想讨论的,作为一名技术人员,我想从技术本身对这场大赛使用到的压缩操作进行一个讨论。



压缩技术是如何实现的?

在早期,计算机和网络刚发展的时候,存储容量小,硬盘只有几 MB、网络速度慢,以 Kbps 计。人们想传输一些信息,动辄几分钟甚至几小时才能传完。

所以,数据传输不便,一直是令人头疼的一大问题。

这时就有人想,能不能在不影响数据可用性的前提下,把数据“压缩”一下,这样既能省空间,又能节省传输时间?

于是就有人提出,在一段信息中往往存在“冗余”的部分,这些“冗余”其实可以用某种规则来替代,并在需要时根据规则完整复原。

比如,对这串文字 "哈哈哈哈哈哈哈哈",我们观察到“哈”连续出现了 8 次,于是可以把它的冗余部分用一个简单规则表示为:"哈" × 8

这个 “哈” × 8 就是压缩后的数据,根据我们的规则,可以将“哈” × 8 复原成 "哈哈哈哈哈哈哈哈"

这就是人们最早提出的压缩技术。


时至今日,压缩技术发展出两大门派:无损压缩 vs 有损压缩

它们最主要的区别在于:压缩后,还能不能完美还原成原来的样子?

无损压缩:

是一种能完美将压缩后的数据还原成原来样子的压缩方式,其还原后的数据和原来一模一样,没有丢失任何信息。

常用于对数据完整性要求极高的场景,比如:文本文件(ZIP、RAR、7z)、源代码、表格数据(Excel)

有损压缩:

是一种不能将压缩后的数据还原成原来样子的压缩方式,压缩时会丢掉一些人类不容易察觉的细节,解压后无法恢复到完全原样,但整体效果差不多。

原理是利用人类感官的“弱点”,丢掉一些我们察觉不到的信息,比如超高频声音、颜色细微差别等。

就像你拍了一段高清的视频,为了方便传给朋友,你把它压缩成手机小视频,文件变小了,但画面中的细微纹理、背景中的小物件可能被省略掉了。等朋友播放时,虽然视频还能看懂主要内容,但那些细节已经回不来了。

有损压缩常用于追求更高压缩率,允许细节损失的场景,比如:图片(JPG、GIF)、音乐(MP3)、视频(MP4)

时至今日,这两种压缩方式仍是最常见的,但也诞生了新的混合/场景优化压缩技术,这里就不过多介绍了。



《哪吒2》使用的是什么压缩方式?

介绍完了压缩技术,再让我们回到文章本身——在“压片战争”中,《哪吒2》使用的是什么压缩方式?

使用的压缩方式主要是标准的GIF格式所采用的LZW(Lempel-Ziv-Welch)无损数据压缩算法。然而,将一部两小时的电影压缩成极小体积(如50MB甚至几KB)的关键,并不在于LZW算法本身,而在于压缩前对原始视频进行了极端的降质处理。

这些处理手段包括大幅降低视频的分辨率(例如降至176x74)、降低帧率(如降至15fps)、降低色深以及降低码率。通过这些方式,先将原始视频数据量变得非常小,然后再转换为GIF格式,利用GIF的LZW算法进行最终压缩。随着“比赛”进行,压缩手段越来越极端,导致画质严重下降。


参考文章:

https://mp.weixin.qq.com/s/6iU20eDHxybtGXTJGyAEuw

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。