文件压缩到底压掉了什么?为什么视频打包后几乎没变小?

IT那些事2026-09-26发布 WarpEdit
705 0 0

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

手绘房间中,视频文件角色与装有同样视频的ZIP袋并列,表现打包后体积未明显减少的疑问

压掉的是重复表达,内容还能找回来

先看一个人为设计的例子:一张纸上写着 ABABABABABAB。如果双方事先约定好记法,可以把它记成“AB 重复 6 次”。展开时仍然是那 12 个字母,顺序也一样,没有凭空少掉哪一个。

内容没变,记录方式变了。实际 ZIP 会用自己的格式记录数据,当然不会写上这句中文;而且规则本身也占空间。对于这么短的字符串,省下来的甚至可能不够存规则。

常见 ZIP 压缩方法 DEFLATE 会利用重复出现的数据片段,也会用编码减少表示数据所需的位数。实际算法比“记次数”复杂,但解压软件知道对应规则,就能把数据还原。这叫无损压缩:在文件完整、压缩解压正常的前提下,还原的是原来的文件字节。

横向三步展示六组AB简写为AB重复6次,再展开还原,说明记录方式改变但内容可还原
原理示意:双方约定记法后可以还原;实际压缩还需要保存规则,并非这段短字符一定能省空间。

所以,把照片或视频直接放进普通 ZIP 再解压,不会因此把画质越压越糊。需要留意的是,有些软件还会附带“缩小图片”“转换格式”等处理;勾选了这些功能,就已经不只是 ZIP 压缩了。

视频往往已经“瘦过一轮”

手机拍摄、剪辑软件导出的视频,通常已经经过专门的视频编码。编码器会利用画面中的规律来减少数据量,常见的有损编码还会舍弃一部分信息,以换取更小的体积。

到了 ZIP 这一步,它面对的是已经编码好的文件字节,不会像视频编码器那样重新分析每帧画面、选择可以牺牲哪些细节。前面已经把容易节省的部分处理过,后面再压一遍,收益就可能很小。WinZip 的官方说明也指出,多数已经压缩的多媒体文件,放进压缩包后通常不会明显缩小。

具体效果仍受原有编码、素材和压缩方法影响。MP4 是装载音视频等内容的容器名称,后缀相同,里面的编码和数据也可能不同。日常已压缩的视频往往很难再靠 ZIP 明显缩小,但不能仅凭后缀断定压缩结果。

JPEG 图片也常有类似表现:它本来已经高度压缩,微软的 ZIP 帮助说明打包后的总大小可能差不多。有些文档格式内部也用了压缩,所以“视频压不动、文档一定好压”并不是可靠的分类方法。

左右两阶段展示视频编码先利用画面规律减少数据,ZIP再处理已编码文件字节,进一步节省空间往往有限
先后处理的对象不同:视频编码利用画面规律,普通 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 能保留文件和目录的组织,把它们收进一个包,方便整理和传递。即使没小多少,打包也完成了这件事。

让视频低于上传大小限制:通常要考虑重新编码,也就是转码。视频工具可以调整编码方式、质量、码率或分辨率;节省多少取决于原文件和设置。常见的有损转码会在体积与画质之间取舍,缩小文件可能伴随细节损失。

左右对照ZIP打包与视频有损转码: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

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...