跳到主要内容
ConvertOwl
技术阅读需 1 分钟作者 ConvertOwl

为什么ZIP文件压缩不了多少?

把一堆照片或视频打包成ZIP,体积几乎不变。这里讲清楚为什么ZIP对已经压缩过的文件几乎榨不出什么空间。

像素风格的猫头鹰看着一个装有照片、音乐和文档的100MB文件夹压缩后只变成96MB

你把一堆度假照片打包成ZIP,本以为文件会变小,结果压缩包出来的大小几乎没变,有时候甚至还大了一两兆。这不是工具坏了。ZIP做的正是它该做的事,只是这些文件在被打包之前就已经压缩过了,ZIP已经榨不出多少空间。

ZIP到底在找什么#

ZIP压缩包用的是一种叫DEFLATE的算法,定义在RFC 1951里。DEFLATE能找到两种省空间的机会:一是重复出现的字节序列,可以用更短的引用来代替;二是某些字节值出现的频率远高于其他值,可以用更少的比特来编码。这两个技巧都依赖同一件事:原始数据里的冗余,也就是那些模式和重复。

一份纯文本文件、一张表格、一份日志文件,或者一张没压缩过的BMP图片,里面全是这种冗余:重复的单词、重复的列数据、大片相同颜色的像素。DEFLATE处理这些游刃有余,所以一堆.txt.csv文件打包后能缩小60%到90%。

为什么照片、视频和PDF几乎不变#

一张JPG、一个MP4、一首MP3,还有大多数PDF,在它们到达创建ZIP工具之前,冗余早就被去掉了。JPEG自己的编码器已经用熵编码把图片压到接近它的实际极限;H.264和H.265对视频做的是同样的事,MP3和AAC对音频也是如此。等DEFLATE拿到这些数据时,它赖以生存的重复模式基本上已经不存在了。它不是失败了,只是几乎没有活可干了,所以打包出来的ZIP文件大小和原文件差不多,算上文件头和每个文件的管理开销,有时候甚至会稍微大一点。

这也是为什么打包.docx.xlsx.pptx文件几乎没用:这些Office格式本身内部就是ZIP压缩包,装的是已经压缩过的XML。相当于用ZIP去压缩一个ZIP。

文件类型典型ZIP压缩率
纯文本、CSV、日志文件60%-90%
未压缩的BMP或WAV50%-80%
Word/Excel/PowerPoint (.docx, .xlsx, .pptx)0%-5%(内部本来就是ZIP)
JPG、PNG、MP4、MP30%-3%,有时还会稍大

那照片或视频到底该怎么变小#

不是再打包一次。真正决定压缩效果的是图片或视频的编码格式,所以要缩小文件,得从那里下手。把照片放进图片压缩工具,用较低的质量设置重新编码,这跟ZIP是完全不同的操作:它可以有针对性地牺牲一部分细节来换取体积,而ZIP里的DEFLATE从来不允许丢失任何东西。想知道怎么选质量参数又不留下明显痕迹,可以看看如何在不损失质量的情况下压缩图片这篇文章。

已经压缩过的文件,什么时候打包ZIP还是有意义的#

即使ZIP没法让照片或视频明显变小,它还是有别的用处:把文件打包在一起。如果你想把十二个文件当成一个附件发出去,或者把一个项目的素材打包成一个下载文件,创建ZIP工具可以直接在浏览器里完成这件事,不用上传,压缩率高不高都无所谓。另一边,解压ZIP工具可以把压缩包还原成原来的文件。如果想从头学怎么打包和命名压缩包,可以看看如何把文件压缩进一个ZIP文件夹这篇文章,博客的技术专栏里还有更多关于压缩格式底层原理的内容。

常见问题#

为什么我的ZIP文件比原文件还大? 如果压缩包里的文件本身已经压缩过了(比如JPG或MP4),ZIP文件有可能比原文件稍大一点,因为DEFLATE找不到可以去除的冗余,而压缩包本身还会给每个文件额外加上一点文件头和管理数据。

把JPG或PNG打包成ZIP会损失质量吗? 不会,ZIP是无损格式,放进去的每一个字节解压后都会原样还原;只是它通常没办法让一张已经压缩过的图片变得更小。

有没有办法把照片和视频压缩得比ZIP更狠? 有,用图片压缩工具这类懂编码格式的工具,它能有针对性地降低质量,在这类数据上把体积压缩得比ZIP狠得多。

为什么Word或Excel文件打包后几乎不变小? 现在的.docx.xlsx.pptx文件本身内部就是装着已压缩XML的ZIP压缩包,再套一层ZIP基本没什么可压的了。

如果文件不会变小,打包ZIP还值得吗? 值得,如果目的是打包而不是压缩:一个ZIP能把很多文件合成一个,哪怕压缩率是0%,当成附件或下载文件也很有用。

简单总结#

  • ZIP的DEFLATE算法只在存在冗余的地方才能省空间;纯文本和未压缩的数据能省下不少。
  • 照片、视频、音频和PDF通常已经被各自的格式压缩过了,DEFLATE几乎找不到可压的东西,打包出来的ZIP体积几乎不变。
  • Office文档.docx.xlsx.pptx)内部本来就是ZIP压缩包,所以再打包一次基本没用。
  • 想真正缩小照片或视频,需要的是图片压缩工具这类编码级别的工具,而不是再套一层ZIP。
  • 对已经压缩过的文件来说,如果目的是打包而不是缩小体积,ZIP依然有用,可以用免费的创建ZIP工具

试用这些工具

免费、私密、即时——一切都在你的浏览器中运行。

像素风格的猫头鹰坐在笔记本电脑前,面板上显示格式、编码器、分辨率、码率和帧率等视频压缩设置
技术1 分钟

视频压缩最佳设置详解

分辨率、码率、编码器和帧率:真正决定视频文件大小的设置,每一项该怎么选,哪些又不该动。