返回顶部
大家都在看
相关推荐

[教程类] 【教程/科普】有关压缩的一些事(一)

[复制链接]
纯爱牛头人战士 显示全部楼层 发表于 2023-11-21 22:03:58 |阅读模式 打印 上一主题 下一主题
本帖最后由 纯爱牛头人战士 于 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:官网







3 1
分享

精彩评论1

泡影 显示全部楼层 发表于 2024-4-17 23:55:03
感谢科普!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

NeoACG是国内ACG爱好者社区,汇聚了包括Coser、绘师、写手等创作者在内的众多二次元同好,提供cosplay、绘画和文字作品创作发表、二次元同好交流等社群服务。 网站共设cosplay、绘画、写作、漫展、讨论等多个频道。