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

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

把一段视频右键压成 ZIP,等进度条走完,文件几乎没变小,甚至还胖了一点。压缩软件没认真干活?普通 ZIP 压缩会尝试用更省空间的方式记录原数据,并不靠删掉视频画面来瘦身;常见视频本来已经压缩过,留给它继续节省的空间往往不多。“装进压缩包”和“把视频变小”,需要分开看。

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

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

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

这个例子想说明的是:内容没变,记录内容的方式可以变。它只是帮助理解的简写,并不是 ZIP 文件内部真的写着这句中文。对于这么短的字符串,保存规则本身就可能比省下的空间还多。

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

六组AB通过简写为AB重复6次,再展开为原来的六组AB,演示可还原的记录方式
原理示意:双方约定记法后可以还原;实际压缩还需要保存规则,并非这段短字符一定能省空间。

所以,把照片或视频直接放进普通 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
暂无评论...