把视频压成 ZIP,文件几乎没变小,甚至还大了一点,这是压缩失效了吗?普通 ZIP 尝试用更省空间的方式记录原文件,不会删掉视频画面;常见视频已经经过编码压缩,再压一层 ZIP,往往省不了多少。如果目的是整理发送文件,打包仍然有用;如果要缩小视频,就要看另一种处理。

压掉的是重复表达,内容还能找回来
先看一个人为设计的例子:一张纸上写着 ABABABABABAB。如果双方事先约定好记法,可以把它记成“AB 重复 6 次”。展开时仍然是那 12 个字母,顺序也一样,没有凭空少掉哪一个。
内容没变,记录方式变了。实际 ZIP 会用自己的格式记录数据,当然不会写上这句中文;而且规则本身也占空间。对于这么短的字符串,省下来的甚至可能不够存规则。
常见 ZIP 压缩方法 DEFLATE 会利用重复出现的数据片段,也会用编码减少表示数据所需的位数。实际算法比“记次数”复杂,但解压软件知道对应规则,就能把数据还原。这叫无损压缩:在文件完整、压缩解压正常的前提下,还原的是原来的文件字节。

所以,把照片或视频直接放进普通 ZIP 再解压,不会因此把画质越压越糊。需要留意的是,有些软件还会附带“缩小图片”“转换格式”等处理;勾选了这些功能,就已经不只是 ZIP 压缩了。
视频往往已经“瘦过一轮”
手机拍摄、剪辑软件导出的视频,通常已经经过专门的视频编码。编码器会利用画面中的规律来减少数据量,常见的有损编码还会舍弃一部分信息,以换取更小的体积。
到了 ZIP 这一步,它面对的是已经编码好的文件字节,不会像视频编码器那样重新分析每帧画面、选择可以牺牲哪些细节。前面已经把容易节省的部分处理过,后面再压一遍,收益就可能很小。WinZip 的官方说明也指出,多数已经压缩的多媒体文件,放进压缩包后通常不会明显缩小。
具体效果仍受原有编码、素材和压缩方法影响。MP4 是装载音视频等内容的容器名称,后缀相同,里面的编码和数据也可能不同。日常已压缩的视频往往很难再靠 ZIP 明显缩小,但不能仅凭后缀断定压缩结果。
JPEG 图片也常有类似表现:它本来已经高度压缩,微软的 ZIP 帮助说明打包后的总大小可能差不多。有些文档格式内部也用了压缩,所以“视频压不动、文档一定好压”并不是可靠的分类方法。

一个小实验:同样压成 ZIP,结果差很多
下面是两个人工样本的实验结果,使用 Python 的 ZIP 工具、DEFLATE 方法和压缩级别 9。第一份是 ABCDEF 重复 10,000 次的文本;第二份是用一组变化充分的人工字节生成的 ZIP 文件,再给它套一层 ZIP。
| 样本 | 打包前 | 打包后 |
|---|---|---|
| 大量重复的文本 | 60,000 字节 | 228 字节 |
| 已有的 ZIP 文件 | 131,226 字节 | 131,366 字节 |
两份样本解压后,都与各自输入逐字节相同。第一份有大量重复,能省很多;第二份没得到足够的额外收益,还要带上压缩包的文件名、索引等记录,因此略大了一点。
测试环境:Python 3.10.8、zlib 1.2.12。第二份样本由程序生成,不是视频实测;这些数字只说明本次样本结果,不能当成日常文件的预期压缩率。
再套一层 ZIP,就多一层文件名、索引等结构。没有足够的新规律可压缩,这一层就可能只有开销。因此,反复套压缩包并不是可靠的缩小文件办法。
先想清楚:你要打包,还是要缩小视频?
把一批文件一起发出去:ZIP 能保留文件和目录的组织,把它们收进一个包,方便整理和传递。即使没小多少,打包也完成了这件事。
让视频低于上传大小限制:通常要考虑重新编码,也就是转码。视频工具可以调整编码方式、质量、码率或分辨率;节省多少取决于原文件和设置。常见的有损转码会在体积与画质之间取舍,缩小文件可能伴随细节损失。

HandBrake 的质量说明建议从小幅调整开始,并检查输出效果。真要缩小视频,可以保留原文件,先截取有运动、纹理或字幕的代表片段试转,比较体积和画面,再决定是否处理整段。仅仅把文件后缀改成另一种格式,不会完成这种编码转换。
要原样打包和还原文件,用普通 ZIP;要缩小已经编码的视频,就要评估转码后的体积与画质。选择哪一种,取决于要保留原文件,还是愿意用画质换体积。
参考资料:RFC 1951:DEFLATE Compressed Data Format Specification
https://www.rfc-editor.org/rfc/rfc1951
Microsoft:Zip and unzip files
https://support.microsoft.com/en-us/windows/experience/storage-filemanagement/zip-and-unzip-files
WinZip:Why don’t some files compress very much?
https://kb.winzip.com/en/130408
WinZip:Will zipping files cause them to be of lower quality?
https://kb.winzip.com/en/130446
HandBrake:Adjusting quality
https://handbrake.fr/docs/en/latest/workflow/adjust-quality.html