我不在乎压缩需要多长时间,我只想实现两件事:
- 绝对最佳的压缩比
- 与标准阅读器(如 Windows 和 WinZip)兼容
因此,诸如 7-zip 之类的建议不会有太大用处,除非 7-zip 在标准 ZIP 压缩方面也略胜一筹(而不是使用它非常好的 .7z 格式)。
理想情况下我正在寻找:
- 推荐一款软件
- 该软件的特定设置可实现最佳压缩
- 免费的东西
请记住,压缩需要多长时间不是问题!
最后一件事 - 一些文件可能通过不同的设置压缩得更好,比如“Word 大小”或“字典大小” - 是否有工具可以分析文件并选择最合适的压缩比,或者 WinZip、7-zip 等是否已经可以做到这一点?
答案1
如果您想要与 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 创建自解压档案很可能可以节省大量时间和空间。
答案2
我所知道的最好的 deflate 压缩器(标准 ZIP 使用的压缩格式)是:
Deflate 文件压缩文件大小比较使用 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 生产的是所有产品中最小的。
答案3
假设您使用的是 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 完全打开。
答案4
这更多的是压缩器在工作时可用的内存量限制。使用 7-Zip,我会打包一个 .Zip 格式、超级压缩、LZMA 压缩方法和默认 64MB 字典大小的档案。如果您有可用内存,则可以增加字典大小,但请注意,使用 64MB 字典进行压缩需要近 3GB 的可用内存。如果您有足够的内存,使用更大的字典应该可以让 7-zip 寻找更多匹配项并提供更好的压缩效果。LZMA 平均比 gzip(我认为是 deflate/deflate64)和 bzip2 好 5%,根据内容的不同,最高可达 10-12%。
我不知道有什么工具可以找到最佳的单词/字典大小,但我认为你会发现压缩方法与输入数据的相关性更强,否则平均值/默认值应该是好的。