上次写了图片压缩,这倒让我想起几年前看过的一个很有意思的东西

那就是这张鸭子图:

不过微信会压缩图片,你可以打开这个链接:http://2.im.guokr.com/F70Kn-4wz7aF5Yejf9W3g6kO4exDBqVEb0TumQmxy5MiAQAAEAEAAEpQ.jpg 来获取原图

将这张图片下载到本地,修改文件后缀为 .rar,然后再解压,你会得到四个文件

▲改后缀名,然后解压

这其中有一个「说明.txt」里面是这样写的:

  • 每年,世界各地著名的Warez组织都会推出一个小的动画片来比较,仅仅是用来炫耀其实力
  • 要知道,一首普通的MP3,通常就有4000K左右,一张普通的JPG压缩图片也要30-40K,而这个仅有63K的3D动画,你花半个小时也看不完,而且不重复、带音乐!

双击「prophecy《彗星撞地球》.exe」便能查看这段3D动画

阿虚简单录了一下前2分钟的效果

第1段:

第2段:

如果感兴趣,可以自己把图片保存下来后看看

注:系统必须安装有directx8.0才行。按A键可缩小,按S键放大,按F键快速放,按R键重放……

可能很多人会误以为这是什么逆天的压缩算法,但实际上不是的,这段动画并不是由什么视频压缩而成,背后上实际是靠即时演算而得到的

就好比给电脑一个谱子,然后电脑其实是在照谱演奏

另外,像8个关卡的魂斗罗只有128K,32个关卡的超级马里奥甚至只有64K,零几年时红极一时的3D FPS射击游戏 kkrieger(毁灭杀手)仅96KB…

这些都不是单纯的压缩,背后涉及的原理很多,的确也都很有意思,不过对我们一般人来讲,看了也就图一乐,没有什么实际的用途

阿虚倒想借由这个问题给大家科普一下——普通的压缩包怎么压缩,才能拥有最好的压缩率?

▍1 关于压缩文件的常识

首先你得知道:压缩率很大程度上取决于你压的是什么东西

我们一般分5️⃣大文件类型:程序文件,文本文件,压缩图片,压缩音频和压缩视频

而实际上只有程序文件文本文件这种人类语言的数据是有压缩价值的

这句话的意思是:图片、音频、视频文件,数据基本上已经压缩了,用压缩软件的压缩算法二次压缩是几乎没有作用的🤷🏻‍♂️

Kaciras在他的博客也分享过他的测试结果:https://blog.kaciras.com/article/4/WinRAR-vs-7zip-performance

阿虚自己也实际测试过包括:mobi、epub、docx、pdf、mp3、flac、jpg、png…这些常见格式,压缩率基本都是100%,即原本100MB,压缩后还是100MB

除外实际有点压缩效果的也就 doxc 和 pdf:100MB 的 docx 大约能压到94MB1GB 的 pdf 能压缩到 986MB

还有 txt 文件,靠压缩软件还是能有比较不错的压缩率的!

▲50M的txt文件的压缩效果

所以你要是想靠压缩软件来进行压缩视频、音频、图片是几乎没有实际意义的

对于这种情况,压缩软件基本上就起一个打包作用

如果准备打包的文件较大,我建议你压缩方式选择「存储」

这个方式就是几乎直接把文件装在一起,不进行压缩操作,能最大程度的节约在压缩&解压的时间

如果你是想压缩图片、视频、音频…通常有损压缩才能真正起到效果

比如降低视频分辨率,降低码率等:https://mp.weixin.qq.com/s/CBhVeL5s9S9ewsgwsdhTsg

音频的话,一般人用一般设备其实也听不出 flac 和 320K mp3 的区别,但这格式在文件大小上差别就大了:https://mp.weixin.qq.com/s/Am2u6zPd49aWKMjPjbdZ-Q

如果是图片的话,我前不久才讲过,一般人会用到的压缩方式,也就 png 格式转 jpg 格式了:https://mp.weixin.qq.com/s/pV_WuPXP62QnJ19o76Y2nQ

▍2 最好的压缩参数该怎么设置?

而对于程序文件,压缩还是很有必要的——尤其是你遇到像蓝奏云、闪电盘这类网盘,限制上传大小是100MB的时候

于是阿虚这几天,就结合自己以往的使用体验&网上的推荐,测试了一下以下4️⃣款软件的压缩效果

但你需要知道:对于一个 .exe 安装包,压缩是不起效果的(exe实际也属于一种压缩格式了)

而什么样的程序文件能获得较高的压缩率呢?

程序中的小文件越多,就越容易获得较高的压缩率,比如下图这种情况

所以就算你压缩设置啥的完全都一样,也不一定能取得同样的压缩率,具体能压缩多少还是取决与于源文件

测试之前,先说一下压缩文件的一些参数:

  • 压缩算法: 常见的压缩算法有Defate、Bzip、PPMd、RAR、LZMA、LZMA2,真正决定压缩效果的不是7z、zip、rar等压缩格式,而是压缩算法
  • 字典大小:较大的字典文件能提供较高的压缩比,但同时压缩所需内存会大量增加(解压所需内存也会少量增加),具体大小需根据电脑配置量力而行
  • 单词大小:影响纯文本文件的压缩比,此参数越大,压缩速度越慢,但不影响解压速度
  • 固实压缩:可增加压缩比,如果创建的压缩档案需要更新,建议关闭固实模式
  • CPU线程:线程越高压缩时间越低,但同时压缩所需内存越大

为了具体说明,我找来一个正好100MB的程序文件,下面看看怎么压缩能压到最低

我就对这个程序用不同压缩软件,在不同压缩参数下,进行了几十次的压缩测试

最终的结果便是下面这张图

▲点击查看大图

答案还是显而易见的:

选用压缩软件7zip,压缩方法LZMA2,字典大小根据自身电脑配置尽可能的大,单词选择273,采用固实压缩,便能取得最高的压缩率

上图之所以把好压也加亮了,是因为阿虚用的旧版好压很多年了,在正确设置参数的情况下,还是能取得和最新版7zip差不多的压缩率(差0.1M)

个人觉得,综合好压其他功能的实用性,这款软件还是很值得推荐的

● 2.1 字典大小&CPU线程

测试结论虽然简单粗暴,但还有一些问题需要说明

首先便是在设置压缩参数的时候,要根据自己的电脑配置量力而行

选择LZMA2算法,字典大小如果选择1024MB,线程个数还是12的话,一般需要电脑有30G的内存才能完成压缩…

99%的用户电脑内存都是没这么大的,上面那样设置只会导致压缩失败

所以你需要适当降低字典大小、降低线程个数!

▲可以在右下方自定义压缩配置

「解压所需内存」一般都是大大低于「压缩所需内存的」

而且解压所需内存一般最大也就1G左右,如今的电脑基本上都能胜任的

所以基本上不必担心你的压缩文件别人会因为电脑内存不足而解压不了

● 2.2 固实压缩

然后对于固实压缩还是有必要说明一下的

压缩参数中的「固实大小」要大于你被压缩文件本身,才能取得最好的压缩率

假如你有100MB的文件需要压缩,那么固实大小就得设置100MB以上,如128MB

另外固实压缩虽然具有压缩比高的优点,但也有其缺点

如果你需要往压缩包里添加文件,或者说想取出压缩包里的某部分文件,对于采用固实压缩的压缩包会较慢

关于固实压缩更详细的说明,可以到 Bandizip官网的帮助中了解:https://www.bandisoft.com/bandizip/help/what-is-solid-compression

▲扫码即可查看

● 2.3 PPMd 压缩算法

还有 PPMd 这种压缩算法,虽然只能单线程,但优势是对纯文字的压缩有加成

阿虚找来50MB的纯TXT文件,单独对比了PPMd算法和上面得出的最高压缩率设置,的确是PPMd压缩效果更好一点

● 2.4 RAR格式

WinRAR虽然在压缩率上没有优势,但其是唯一带恢复记录功能的压缩软件

什么是恢复记录?

假如有个100m的压缩文件,如果不带恢复记录,损坏了1k,那整个这个文件就坏了,如果带有1%的恢复记录,它的大小会变成101m,但在任意位置损坏不超过1m,这个文件就能正常解压!

所以对于准备长期冷备份的文件,这个恢复记录还是很有作用的(不过,阿虚更建议多重备份来解决这个问题)

因为WinRAR是商业软件,不开源,需要购买许可证才能使用

同时由于你懂的原因,这款软件阿虚在公众号也不方便提供,大家要是想使用,可以自己上网找一下注册密钥

▍3 压缩软件下载

于是,如果你对压缩率有要求,我便只推荐你两款压缩软件

一是好压(旧版):

▲好压压缩参数设置页面

二是7-zip:

▲7-zip压缩参数设置页面

原因是这俩款软件才能对「压缩参数」进行详细设置(Bandizip只能简单设置)

再主观上来讲,阿虚自己是比较推荐好压(旧版)的

除了使用符合国人习惯,还提供一些实用的小功能,搭配2345看图王(去广告版),也能方便的查看压缩包内的图片

旧版好压的下载地址在储物间(axutongxue.com)一直有提供,你也可以关注微信公众号:阿虚同学,在后台回复以下关键词来获取

解压缩

而7-zip是一款开源软件,在官网即可免费下载:https://sparanoid.com/lab/7z/

另外不是说不推荐 Bandizip

这款压缩软件的确好用,但是就算是企业版,也无法对压缩参数进行过多的设置——这是它的缺点

当然,如果有人想用 Bandizip,阿虚这里也有顺便提供,获取方式还是在后台发送关键词:解压缩

Bandizip 之前一直有在储物间提供个人版,不过这次更新了企业版,在用这款软件的粉丝可以更新一下

另外如果你对压缩包密码有疑问,可以去复习我原来写过的这篇文章:https://mp.weixin.qq.com/s/sBxLpr2uwKF2IpTFTrH8HA

而如果你想搜索压缩包内的内容,则可以复习这篇文章:https://mp.weixin.qq.com/s/ApyutqrsRN8dP65aKzq3mQ

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐