昨天,我在微信群里看到了一张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