如何获得最佳的标准ZIP压缩?


20

我不在乎压缩需要多长时间,我想要实现的只是两件事:

  • 绝对最佳压缩比
  • 与标准阅读器(例如Windows和WinZip)的兼容性

因此,除非7-zip在标准ZIP压缩方面也稍好一点(相对于使用非常好的.7z格式),否则诸如7-zip之类的建议将不会有用。

理想情况下,我正在寻找:

  • 一款软件的推荐
  • 该软件的特定设置可实现绝对最佳压缩
  • 免费的东西

请记住,压缩所需的时间不是问题!

最后一件事-有些文件可能使用不同的设置可以更好地压缩,例如“ Word size”或“ Dictionary size”-有没有一种工具可以分析文件并选择最合适的压缩率,或者WinZip 7-zip等已经做到了?

Answers:


20

如果要与Windows XP内置的Zip Folders功能兼容,则必须使用Deflate压缩。我认为您甚至都不能使用Deflate64,更不用说在最新版本的winZip和PowerArchiver中可用的高级压缩方法(例如LZMA,PPMD,WavPack,Bzip2等)。PowerArchiver至少默认使用这些文件的.zipx扩展名-我认为WinZip尚未这样做。

可以使用以下命令行完成7-Zip可以创建的最小的zip文件:

7za a -mm=Deflate -mfb=258 -mpass=15 -r C:\Path\To\Archive.zip C:\Path\To\Files\*

特别注意:7-Zip的通配符解析器与系统上的大多数其他解析器不同。*.*表示所有带有扩展名的文件。 *表示所有文件。

以这种方式(大概使用其他工具制作较小的“标准” .zip文件)创建.zip文件确实非常缓慢。通过使用7-Zip或WinRar创建自解压存档,您很可能节省大量时间和空间。


我的7z错误出现在“ -m0”上,但我猜“ -mm”与最新版本相同。我还注意到,在我的情况下(压缩JPG文件),使用“ -mx9”而不是“ -mfb = 258 -mpass = 15”,结果的平均随机差异平均为±15个字节(例外情况为±50s) )
马克·杰罗尼莫斯

1
@ Zom-B:是的,应该是,-mm=而不是-m0=-m0=用于.7z档案。此外,7-Zip手册还指定-mx=9Zip存档等效于-mfb=128 -mpass=10。我注意到的是,-mfb=258 -mpass=15它总是比现在慢得多,-mx=9而且通常根本不节省太多空间(或者偶尔使用更多字节)。每隔一段时间,它可以节省相当多的空间。
afrazier

先前评论中的“慢得多”转化为慢3倍多。至于空间,较慢的选项可提供大约。与更快的版本(即-mx = 9,而没有-mpass = 15)相比,具有99.885%的大小。因此,使用3倍以上的时间只能节省0.115%的空间。因此,除非0.115%的增益非常重要,否则请使用-mx = 9而不是-mpass = 15。
电视

8

我知道最好的deflate(标准ZIP使用的压缩格式)压缩器是:

使用Zopfli的数据压缩中压缩文件压缩的​​文件大小比较(从原始文件存档):

╔══════════════╦═══════════╦═════════╦═════════╦═════════╦═════════╗
║              ║Corpus size║gzip ­-9  ║7-­zip    ║kzip     ║Zopfli   ║
╠══════════════╬═══════════╬═════════╬═════════╬═════════╬═════════╣
║Alexa-top-10k ║  693108837║128498665║125599259║125163521║123755118║
║Calgary       ║    3141622║  1017624║   980674║   978993║   974579║
║Canterbury    ║    2818976║   730732║   675163║   674321║   669933║
║enwik8        ║  100000000║ 36445248║ 35102976║ 35025767║ 34995756║
╚══════════════╩═══════════╩═════════╩═════════╩═════════╩═════════╝

即使是随机的PNG,Zopfli也比pngout好0.5%。Zopfli使它们最小。


如何使用Zopfli压缩一组文件,就像使用原始zip命令一样?
Panayotis

1
@Panayotis Google 对zopfli zip的搜索导致访问github.com/google/zopfli/issues/29,其中讨论了zopfli项目如何不直接处理Zip文件,但是讨论了诸如AdvanceCOMP的advzip之类的工具,这些工具可以使用zopfli作为后端。 。
匿名

5

假设您使用的是Windows:如果您仍然想使用ZIP格式,我建议您使用Ken Silverman的免费KZIP命令行实用程序,该程序在此处找到。将其复制到包含您需要压缩的所有文件的文件夹内,使用CMD转到该文件夹​​,然后运行以下命令:

kzip /r <filename of ZIP file> *.*

正如Roald所建议的那样,最好将目录包含kzip.exe在系统的PATH变量中,以防止将其包含在存档/ Zip文件中。

到目前为止,我发现用KZIP创建的ZIP文件比其他ZIP压缩程序创建的ZIP文件小10-20%。它们还可以通过其他存档软件(Winzip,WinRAR,7-zip等)和Windows完全打开。


5
如果不将其放在该目录中,而是将其放在系统PATH上,该怎么办?
RD 2010年

1
我有相同的要求-Windows标准ZIP功能必须支持。我最终使用KZIP,因为它像冠军一样工作。请务必使用/ s / b / n选项,以更好地了解哪种方法最适合您的环境。
Goyuix 2010年

当然!PATH变量。我已经编辑了答案。谢谢罗尔德!
Isxek 2010年

或仅在命令前加上可执行文件的路径
micsthepick,

1

超级简单的脚本,可使用.zip文件类型和Deflate64压缩方法将文件夹中的所有文件夹压缩为单个zip文件。

@echo off
for /d %%X in (*) do "c:\Program Files\7-Zip\7z.exe" a "%%X.zip" "%%X\" -tzip -mx9 -mm=Deflate64

-1

这是对压缩器执行工作时必须为其提供多少内存的限制。使用7-Zip,我将以.Zip格式,Ultra压缩,LZMA压缩方法和默认的64MB字典大小打包一个档案。如果您有可用的内存,则增加字典的大小,但是请注意,使用64MB的字典进行压缩时,您将需要近3GB的可用内存。使用更大的字典应该允许7-zip寻找更多匹配项,并且如果您有足够的内存,则可以提供更好的压缩率。LZMA平均击败gzip(deflate / deflate64)和bzip2 5%,取决于内容,最高可达10-12%。

我不知道找到最佳单词/字典大小的工具,尽管我认为您会发现压缩方法与输入数据具有更强的相关性,否则平均值/默认值应该很好。


3
我在使用LZMA时遇到了一些麻烦-例如,无论我在7zip中尝试什么设置,该zip中的文本文件(joshz.com/Bad.zip)都不会使用Windows内置的解压缩器进行解压缩(我正在使用Windows 7)。
乔什·康姆利

(我链接到的zip文件包含错误的文件供参考,但未使用LZMA压缩)
Josh Comley 2010年

@joshcomley我无法找到内置的Windows文件夹压缩工具支持的压缩方案的列表。根据维基百科的LZMA,它由WinZip的和跨各种平台许多其他压缩工具的支持,所以我决定去用它。* .zip只是一种容器格式,所以我不知道是否有一种“官方”压缩将支持哪些工具,或者仅仅是一些常用的工具(类似于* .avi可以容纳几乎任何类型的视频)。如果您需要确保它始终有效,请将其打包为自解压文件。
达斯Android

-3

如果您正在寻找适用于Windows环境的最佳压缩器,我建议您尝试将* .zip格式与7-zip LZMA '压缩方法'或使用7-Zip * .7z SFX存档。SFX压缩文件在.7z压缩文件上的开销约为130 kb,当.7z和.zip之间的大小差异很大时,值得使用。

NSIS的另一个很好但并不罕见的竞争对手是NSIS,它可以使用LZMA压缩模式来创建高度可定制的exe。我知道NSIS不是压缩器,而是脚本语言,但令我印象深刻的是它的性能优于7压缩SFX。

我对2个文件进行的测试 -

  • AutoHotkey-H.exe(946 kb)
  • AutoHotkey.dll(1003 kb)
  • 总大小-1955 kb

  • 7压缩.zip-794 kb
  • 7压缩.7z SFX-594 kb
  • NSIS LZMA固体压缩-552 kb
  • 7-Zip .7z-461 kb

由于#4不是您想要的,所以明显的赢家是NSIS,但出于实际原因,我建议使用.zip压缩大小小于500 kbs,如果更大,请使用exe制作工具(例如7-Zip SFX或NSIS(特别是7-zip,因为它易于设置)。


2
问题中的要求特别排除了7z和其他格式。
Bob

@Bob他说,与Windows和exe(我的2号和3号)兼容的压缩机是。我指出的7z只是#4。
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.