20

Мне все равно, сколько времени нужно, чтобы сжать, все, чего я хочу добиться, это две вещи:

  • Абсолютно наилучшая степень сжатия
  • Совместимость со стандартными считывателями, такими как Windows и WinZip

Таким образом, такие предложения, как 7-zip, будут бесполезны, если только 7-zip не будет немного лучше при стандартном сжатии ZIP (в отличие от использования очень хорошего формата .7z).

В идеале я ищу:

  • Рекомендация части программного обеспечения
  • Конкретные настройки для этого программного обеспечения, которые обеспечивают абсолютное наилучшее сжатие
  • Что-то бесплатно

Помните, сколько времени занимает сжатие, это не проблема!

И последнее: некоторые файлы могут быть лучше сжаты с различными настройками, такими как "Размер слова" или "Размер словаря", - есть ли инструмент, который может анализировать файлы и выбирать наиболее подходящий коэффициент сжатия, или WinZip, 7-zip и тд. уже этим занимаешься?

6 ответов6

18

Если вам нужна совместимость с возможностями папок Zip, встроенных в Windows XP, вы застряли со сжатием Deflate. Я не думаю, что вы даже можете использовать Deflate64, тем более передовые методы сжатия (такие как LZMA, PPMD, WavPack, Bzip2 и т.д.), Доступные в последних версиях winZip и PowerArchiver. PowerArchiver, по крайней мере, по умолчанию использует расширение .zipx для этих файлов - я не думаю, что WinZip это делает.

Наименьший возможный zip-файл, который может создать 7-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 для создания самораспаковывающихся архивов.

7

Наилучшие из известных мне компрессоров 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 был на 0,5% лучше, чем pngout. Zopfli делает самые маленькие из них.

5

Если вы работаете в Windows: если вы все еще хотите использовать формат ZIP, я бы порекомендовал воспользоваться бесплатной утилитой командной строки KZIP Кена Сильвермана, которую можно найти здесь. Скопируйте его в папку, содержащую все файлы, которые нужно сжать, перейдите в эту папку с помощью CMD и выполните следующую команду:

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

Как предполагает Роальд, лучше всего включить каталог, в котором находится kzip.exe в переменную PATH вашей системы, чтобы предотвратить ее включение в файл archive/Zip.

До сих пор я обнаружил, что файлы ZIP, созданные с помощью KZIP, примерно на 10-20% меньше, чем файлы, созданные другими программами сжатия ZIP. Они также полностью открыты другим архивным программным обеспечением (Winzip, WinRAR, 7-zip и т.д.) И Windows.

1

Супер простой скрипт для сжатия всех папок в папке в отдельные ZIP-файлы с использованием .zip filetype и метода сжатия Deflate64.

@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, Ультра сжатие, метод сжатия LZMA и размер словаря по умолчанию 64 МБ. Если у вас есть доступная память, увеличьте размер словаря, хотя учтите, что вам понадобится почти 3 ГБ доступной памяти, чтобы сжать словарь объемом 64 МБ. Использование большего словаря должно позволить 7-zip охотиться за большим количеством совпадений и обеспечить лучшее сжатие, если вы можете позволить себе память. LZMA превосходит gzip (я думаю, deflate/deflate64) и bzip2 в среднем на 5%, в зависимости от содержимого - до 10-12%.

Я не знаю инструмента, чтобы найти лучший размер слова / словаря, хотя я думаю, вы обнаружите, что метод сжатия имеет более сильную корреляцию с входными данными, и среднее / значения по умолчанию должны быть хорошими в противном случае.

-2

Если вы ищете лучший компрессор для сред Windows, я бы порекомендовал вам попробовать либо * .zip формат с 7-zip LZMA 'Compression Method', либо использовать 7-Zip * .7z SFX архивы. SFX-архивы имеют накладные расходы около 130 КБ на сжатые файлы .7z и их стоит использовать, когда разница в размерах между .7z и .zip велика.

Другим хорошим, но необычным конкурентом является NSIS, который может использовать режим сжатия LZMA для создания настраиваемых exe-файлов. Я знаю, что NSIS - не компрессор, а язык сценариев, но я был впечатлен, что он работает лучше, чем 7-zip SFX.

Тест, который я сделал с 2 файлами -

  • AutoHotkey-H.exe (946 кб)
  • AutoHotkey.dll (1003 КБ)
  • Общий размер - 1955 кб

  • 7-Zip .zip - 794 кб
  • 7-Zip .7z SFX - 594 кб
  • NSIS LZMA Solid Compression - 552 Кбайт
  • 7-Zip .7z - 461 кб

Поскольку # 4 - это не то, что вам нужно, абсолютный победитель - NSIS, но по практическим соображениям я рекомендую использовать .zip сжатый размер менее 500 КБ, а если больше, то использовать инструмент для создания exe-файлов, такой как 7-Zip SFX или NSIS (в частности, 7-zip, так как его легко настроить).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .