本帖最后由 纯爱牛头人战士 于 2023-11-21 22:03 编辑
- 先上结论(如果不更换压缩软件):如果是压缩图片、音频和视频这类不包含程序代码和文本的文件,那么在压缩时可以调整压缩方式(或等级),选择仅储存或最快来提高压缩(打包)速度。而如果是游戏、软件工具和小说这类程序代码和文本占比较高的文件,那么在压缩时可以按照CPU和硬盘的性能调整压缩方式(或等级),选择标准及较好以上,可以提高压缩率,进一步减小压缩包体积。
- 如果打算更换压缩软件,那么先听我叨叨完
下面讲讲原因:
你随意打开一个文件夹的属性界面,可以看到这个文件夹有两个“大小”,其中一个就叫“大小”,而另一个叫“占用空间”,而且“占用空间”总是大于等于“大小”。出现这种状况的原因就是文件的大小并不是簇大小的整数倍,简单通俗地解释就是:硬盘格式化后会被分成许多簇,簇可以理解成很多个相同大小的水桶,而这些桶一般都很小(一般为4KB),而文件就是不同体积的水,因为水和水之间不能混合,所以每一份水都会独享装自己的桶,不会出现一个桶装了两份水(文件),这就导致了装了一份水的一堆桶里经常会有一个桶没有装满,为了避免水混合,在装下一份水时就不会继续往没满的桶里装水,而是把水装进空桶里。正因为储存文件的最后一个簇经常是没有填满的,“占用空间”(占用簇的大小)才总是大于“大小”(文件实际大小)。那些没有填满的簇积少成多,就会导致空间浪费。 空间的浪费还不是最大的问题,文件数量较多导致频繁读写文件头,IO资源浪费,读写速度下降才是最麻烦的(往机械里面直接存未压缩的游戏经常会这样),这时候就可以进行压缩打包文件,减小文件体积的同时还能提高传输速度。另一方面,打包文件储存还便于在网盘中存取文件(一些网盘会对文件数量作出一定限制) 相信很多人把文件压缩起来就是为了减小占用的空间,但是在压缩图片、音频和视频这类文件的时候文件大小几乎没有变化,在压缩游戏的时候则是有时大小变小很多,有时则变化并不大。想要找到其中的原因,就需要先了解压缩的原理。 压缩方式一般分为两类,即有损压缩和无损压缩: - 有损压缩一般应用在图像和音频压缩上,原理都是简单粗暴地降低精度(比如视频降低码率,图片降低精细度,音频降低采样度)来使得文件的大小显著减小,但缺点也显而易见,都损坏了原有的数据,而且会使精度降低(表现为视频和图片会产生一些模糊,音频的高低音部分丢失)。
- 无损压缩便是今天讨论的压缩软件的压缩方式。因为要保证数据的完整性不丢失,无损压缩就不能对原有数据进行改动,那么只能从储存数据入手。如果让人来记录一串字符,比如“3.141592653589793238462643383279”,直接让人记是记不住的,但如果让人记“圆周率精确到小数点后30位”,那就很好记了,毕竟再让人写出来的时候只需要查表摘抄就好了。计算机压缩也是一样的道理,无损压缩不能改动原有的数据,那就只能寻找原有数据的“规律”来压缩文件,而寻找“规律”的方法就叫压缩算法。
知道了有损压缩和无损压缩的区别后,图像和音频压缩比不高的原因也能推测出来了——也就是这类文件的“规律”很难寻找,导致各种算法都很难压缩图像和音频(如下图,用不同的方法压缩总大小约4.39GB的援助交际1~8话,即使是压缩率最高的方式,也只能把压缩比压到99.57%)。
但在某些特定情况下,对图像和音频的压缩比可以提高不少,比如压缩带有差分较多的图包,其中会包含较多的重复数据,此时部分算法就能够根据重复的部分来提高压缩率(如下图,用不同的方法压缩总大小约1.57GB的yosola PL图包,包含较多差分图,最高的压缩比已经逼近60%了,而压缩比稍低的速度也不慢)。 但这终究只是特定情况,同样使用Zstandard算法 压缩等级最大去压缩单行本和音声(文件重复内容相比上面的例子少非常多),平均压缩比也只能达到约96%。
至于游戏和应用程序(特指各种工具比如播放器、浏览器和github上的工具等等)的压缩,因为它们都需要使用编程语言来编写,而且有许多命令会调用很多次,所以重复的内容会很多,压缩率也很容易提高。但是游戏和普通的应用程序不同,游戏的资源文件包含了图像和音频资源,这些资源都是很难被压缩的,这就导致了一般情况下游戏的压缩率其实不如应用程序,但仍比图像和音频的压缩率要好(如下图,两个LZMA2算法都压缩到了52%以下) 但如果一个游戏储存图像和音频资源文件占了游戏大小的大部分,那么压缩率就会比较难看(毕竟前面讲过图像和音频难以压缩),所以在压缩游戏的还是得视情况调整压缩方法。
那么有哪些压缩软件可以选择的? 如果想要使用Zstandard和Fast-LZMA2压缩算法,就只能选择7-zip zstd(Windows平台使用,注意是zstd版本而非官网版本,界面非常精简或者说是简陋)和ZArchiver Pro(安卓平台使用,需要进入设置调整,且Zstandard显示为ZSTD),如果不想玩那么多花里胡哨的,也可以使用WinRAR(独占的RAR算法还是有一些优势的,但只能压缩RAR和ZIP文件,而且无法选择压缩算法,解压缩速度也稍差)和BandiZip(压缩算法和压缩格式绑定,无法自由选择,没有固实压缩选项)。 如果使用7-zip zstd或ZArchiver Pro压缩文件,此处不推荐使用Zstandard算法和LZ算法压缩,除非只是自用压缩。因为这两种算法的解压也需要压缩软件主动支持,否则会出现他人无法正常解压(如下图,BandiZip会提示不支持的压缩方法,而WinRAR可以通过用7-zip zstd的7z.dll替换7zxa.dll来得到Zstandard解压支持)。 而Fast-LZMA2算法则没有那么多要求,仅压缩必须使用支持Fast-LZMA2算法的软件,解压只需要软件支持LZMA算法解压即可。
第一篇就码到这里了(也快到帖子字节数上限了),其实还有些东西没讲的(比如固实压缩和7-zip的一堆压缩参数),就给这贴加个“(一)”,之后再补充吧,这贴后面贴一下提到了的软件的下载地址。
- 7-zip zstd:Github
- ZArchiver Pro:谷歌商店 (Pro版本我找不到官方渠道就不贴了,肯定不是懒)
- WinRAR:官网
- BandiZip:官网
|