Какой способ сжатия дает наибольший эффект и лучше поддается сжатию в 7 zip
Здравствуй Хабр!
Данная статья посвящена, как правильно и максимально сжимать файлы в ZIP-архивы. Данную статью я решил написать по той причине, что очень много приложений свои форматы упаковывают именно в ZIP. В данной статье разберем методы сжатия ZIP, приложения для сжатия в ZIP, и как можно улучшить сжатие.
Метод сжатия в ZIP
Метод сжатия Deflate
На сегодняшний день есть несколько библиотек, основанных на методе сжатия Deflate:
Библиотека Deflate | Скорость работы | Степень сжатия | Приложения |
Zlib | Высокая | Низкая | |
7-zip | Средняя | Средняя | 7-zip, advzip |
Kzip | Низкая | Высокая | kzip |
Архиваторы ZIP
В данном разделе, мы будем рассматривать только те приложения, которые бесплатные для использования.
Алгоритм 7-zip
Здесь мы поговорим о двух программах, где реализован алгоритм 7-zip: 7-zip и advzip.
При создании zip-архива в помощью 7-zip, я использую следующие параметры
Особенность работы advzip в том, что он уже работает с готовыми архивами zip, т.е. вы просто указываете путь к архиву, и он сам пытается его сжать. Бывает удобно когда у вас уже есть готовый архив, и вам не надо распаковывать и архивировать еще раз.
Алгоритм kzip
Алгоритм kzip был реализован в приложении kzip, приложение работает крайне медленно, но практически всегда дает лучший результат. У него есть настройки (/s, /n, /b), которые могут улучшить/ухудшить степень сжатия ZIP.
Так что в 7zip есть разные методы сжатия. Какой метод лучше всего подходит для какой задачи?
Например: Одно из различий между LZMA и LZMA2 заключается в том, что я могу выбрать все свои ядра процессора, тогда как в LZMA 2 ядра - макс.
Используйте LZMA 2, если вы не хотите извлекать архив в системе, которая не может работать с архивами LZMA 2.
Вообще говоря, большинство современных алгоритмов сжатия дают примерно одинаковое сжатие, и в отношении количества ядер, которые вы можете использовать одновременно, вам решать, сколько вы хотите использовать. Говоря в общем (если вы не создаете большие архивы), нет причин, почему нужно больше, чем один. Кроме того, при сжатии нескольких ядер узким местом может стать жесткий диск.
примечание: лучшие результаты сжатия («ультра») в основном покупаются процессором и (важно) оперативной памятью. lzma2-ultra-dictsize (64 МБ) -4 нитей съест 2 + ГБ ОЗУ, bzip2-ультра-dictsize (900 КБ) съест 69 МБ ОЗУ.
Lzma2 быстрее при использовании 4 или более ядер и обеспечивает лучшее сжатие. Этот документ объясняет все это.
Я не говорю, что документ непригоден для использования, но у него есть ряд проблем. Очевидно, что автор даже не указывает, какой тип данных сжимается (текст? Картинки? Зашифрованные данные?), Не использует относительные размеры, где это применимо, и, похоже, вообще не разбирается в надежных архивах.
7-Zip (по крайней мере, с 2019 по 27-27) имеет встроенный справочный документ с очень, очень хорошим объяснением различных настроек, которые вы можете выбрать, и для чего, в общем, каждый из них хорош.
Там нет результатов тестов или что-то еще, но было достаточно информации, чтобы вселить в меня уверенность, что я выбирал "достаточно хорошо", а не "случайно ужасные" настройки.
Документ справки доступен через диспетчер файлов 7-Zip, а также через диалоговое окно «Добавить в архив».
Путь «Содержание» к странице, которую я нашел полезной (которая открывается непосредственно из диалогового окна «Добавить в архив»):
Для передачи файлов большого объема обычно используется их сжатие в RAR, ZIP или 7z (7-zip) архив. Это позволяет уменьшить объем передаваемых данных и объединить большое количество файлов в один, что значительно ускоряет и упрощает передачу файлов.
При архивации файлов пользователи часто стремятся достичь максимального сжатия файлов. Такой подход позволяет сэкономить наибольший объем данных, но может привести к сложностям при распаковке архива. В данной статье мы расскажем о том, как максимально сжать файлы в RAR, ZIP или 7z (7-zip) архив, а также когда это необходимо, а когда лучше обойтись менее эффективным способ сжатия.
Какой формат обеспечит максимальное сжатие файлов
Сейчас существует три основных формата архива, которые используются пользователями при передаче документов. Это такие форматы как ZIP, RAR и 7z (7-zip). Существуют и другие форматы архивов, но они в Windows среде используются крайне редко, поэтому их мы рассматривать не будем.
При сжатии файлов вам придется выбирать один из указанных форматов архивов. Каждый их них имеет свои преимущества, недостатки и особенности, о которых лучше знать заранее, для того чтобы не столкнутся с неожиданными проблемами.
- ZIP – самый старый, популярный и универсальный формат архивов из всех трех. ZIP архив открывается средствами Windows без использования сторонних программ, поэтому он гарантировано откроется на любом компьютере. Используя ZIP архив вам не нужно переживать о том, что получатель файлов не сможет его открыть. При этом zip работает очень быстро, но не обеспечивает высокой степени сжатия, уступая в этом параметре и RAR и 7zip архивам. Создавать ZIP архивы можно как средствами Windows, так и с помощью сторонних архиваторов, например, с помощью WinZip, WinRar или 7zip.
- RAR – популярный в прошлом формат архивов, который понемногу отмирает. Сжимает данные лучше, чем ZIP, но хуже, чем 7-zip. При этом показывает среднюю скорость работы. Для создания RAR архивов требуется платный архиватор WinRAR, для распаковки подойдет любой сторонний архиватор, например, WinZip, WinRar или 7-zip.
- 7z (7-zip) – набирающий популярность формат архивов. Обеспечивает самую высокую степень сжатия, превосходя ZIP и RAR форматы, но при этом работает медленней всего. Для создания 7z архивов требуется бесплатный архиватор 7-zip, для распаковки подойдет любой сторонний архиватор, например, Win Zip, Win Rar или 7zip.
Таким образом, если вам необходимо максимальная совместимость, то следует выбирать формат ZIP, даже в ущерб сжатию. Архивы в формате ZIP можно открыть на любом Windows компьютере, даже если на нем не установлено никакого архиватора. Если же вы хотите добиться максимального сжатия файлов, то оптимальный вариант – это 7z (7-zip) . Но, в этом случае нужно помнить, что получателю ваших файлов придется устанавливать и использовать сторонний архиватор.
Как сжать файлы в ZIP без сторонних программ
Если вам не нужно максимальное сжатие, то файлы можно запаковать в ZIP-архив с помощью встроенного в Windows архиватора. Если вы пользуетесь Windows 11, то для этого нужно выделить файлы, кликнуть по ним правой кнопкой мышки и выбрать « Сжать в ZIP-файл ». В результате файлы будут заархивированы рядом и в той же папке появится созданный ZIP-файл.
Задайте вопрос в комментариях под статьей или на странице «Задать вопрос» и вы обязательно получите ответ.
А есть ли какая-нибудь статья, где сравниваются различные форматы? Не понятно, на сколько 7z эффективен и за что отвечают все остальные настройки. Что значит выбрать по дефолту? На сколько это оправдано? Может он не правильный подбор ведёт?
Можете поискать в интеренте «сравнение архиваторов», статей достаточно много. Здесь могу привести вот такую картинку. Как видно, 7z заметно опережает остальные форматы.
Вопрос только в том, настолько это необходимо в современных условиях. Ведь для открытия архива получателю нужно будет устанавливать архиватор. Тогда как ZIP-архив можно открыть средствами Windows, без установки сторонних программ.
Добрый день!
Подскажите, пожалуйста, как решить вопрос с отправкой в Росреестр документа в pdf, который подписан ЭЦП (файл sig).
В папке zip 2 листа пдф и 2 листа сиг, общий объем 62 мб. А нужно не более 5 мб. Как это можно сделать? С уважением, Геннадий
Это PDF-файлы столько занимают?
Если в PDF-файлах сканы (фотографии) документов, то ZIP вам не поможет. ZIP и другие архиваторы не могут значительно уменьшить размер таких файлов. В этом случае нужно сжать сами PDF-файлы (с небольшой потерей качества).
Это можно сделать в Adobe Acrobat Pro, открывате «Файл – Сохранить как – Файл PDF уменьшенного размера» и сохраняете новый PDF-файл. В Adobe Acrobat Reader нужно открыть «Файл — Сохранить как другой — PDF-файл уменьшенного размера».
Возможно после этого нужно будет еще раз подписать документ.
Другой вариант — изначально сжать сканы/фотографии, которые вы используете для создания PDF. Тогда этой проблемы вообще не будет.
Мне часто приходится собирать файлы журналов и загружать их на центральный сервер (принадлежит другой компании). Центральный сервер имеет ограничение на размер файла, поэтому я пытаюсь создать наименьший возможный файл в формате zip.
Какие настройки лучше всего использовать при сжатии текстового файла в формат zip, когда мне нужен только маленький размер файла?
Я сделал очевидное и выбрал ультра-сжатие, и я заметил, что LZMA работает лучше, чем выкачивание, но у меня слишком много других вариантов, чтобы я мог протестировать их все.
@endolith: bzip2, lzma, wv и ppmd - очень недавние дополнения к формату файлов. Даже не безопасно предполагать, что ваш получатель может обрабатывать deflate64, а тем более что-либо более новое.
определить "нормальные инструменты почтового индекса". В настоящее время большинство «обычных zip-инструментов», таких как 7z и winrar, могут извлекать файлы 7z.
Чтобы создать наименьший стандартный ZIP-файл, который может создать 7-Zip, попробуйте:
В противном случае, если вас не интересует стандарт ZIP, используйте следующие ультра-настройки:
@Tek: почему? Это не очень хорошо. Вопрос был об использовании «стандартного формата ZIP», поэтому в ответе не следует указывать LZMA. -ms = on для .7z, а не для стандартных zip-файлов. -md связан с BZip2, поэтому я не ожидаю, что он повлияет на ZIP (или даже LZMA). -mfb = 64 - неоптимизированное значение: -mfb = 258 создает меньшие zip-файлы. И в этом ответе даже не упоминается -mpass = 15, что может повлиять на zip-файлы. Это хорошо отформатированный ответ, который, к сожалению, неверен во многих отношениях.
Если вы можете использовать формат .7z, а не просто .zip, я бы просто использовал PPMD со следующими параметрами и оставил бы все остальное, как установлено уровнем сжатия:
- Формат архива: 7z
- Метод сжатия: PPMD
- Уровень компрессии: Ультра
Я регулярно сжимаю серверные / текстовые журналы (60 МБ +), используя эти опции, и они обычно выходят на 1-2% от исходного размера.
Для текста, такого как файлы журнала, ppmd определенно подходит. Тем не менее, в вопросе упоминалось, что он должен оставаться в формате zip, который может не работать с PPMD.
Только что попробовал zip с PPMD, и Windows Explorer открывает содержимое без жалоб здесь на Windows 7
Я тоже это заметил. Он открывает содержимое просто отлично. Однако, когда я действительно попытался просмотреть один из файлов внутри zip-файла, это не удалось.
Я сравниваю для db.fdb 1,2 ГБ (1236598784 B) на сервере Ubuntu 14.04.03 с p7zip [64] 9.20 на ВМ:
и получить такие результаты:
Я думаю, что второй метод работает нормально = (почти) лучший компресс с лучшим временем. Но для лучшего «просмотра» и легкости запоминания это первый метод - с небольшими файлами и без точки максимального сжатия. Между 2 и 3 методами мы не получаем 7z меньше, но тратим на сжатие почти вдвое больше времени. Каждый решит со своим.
После долгих экспериментов, изучения подробной документации 7zip и прочтения части исходного кода 7z, касающегося расширенных параметров LZMA2, ниже представлен лучший способ. Он сократил некоторые тестовые файлы на 1 ГБ более чем в 2-4 раза по сравнению с ранее принятыми решениями, размещенными здесь или даже на странице 7z.
Здесь предполагается сжатие LZMA2, но вы можете добиться еще большей производительности в 7zip, передав расширенные параметры LZMA2, такие как -m0=LZMA2:27 , или -m0=LZMA2:d25 , или массив параметров, таких как
вау, это имело действительно большое значение. Для своего архива я экспериментировал со многими другими предложениями, включая другие ответы здесь, и лучший результат, который я получил, был 99 МБ против 85 МБ с этими настройками.
Установите в поле «split to volume, bytes» максимально допустимый размер файла сервера (я думаю, в байтах, хотя он принимает общие сокращения, такие как «КБ» и «МБ»). Если размер zip-файла превышает этот размер, 7-zip автоматически разделит его на несколько файлов, таких как integra_serviceLog.zip.001 , gration_serviceLog.zip.002 и т. Д. дискеты.) Для распаковки вам понадобятся все файлы. Используйте это вместо того, чтобы беспокоиться об абсолютных наилучших настройках сжатия, которые нужно использовать для любого конкретного набора файлов, потому что то, что лучше для одного файла, может отличаться для другого файла, и вам не нужно проходить это каждый раз, когда вам нужно копировать логи.
Я беспокоюсь о том, как люди на другой стороне распакуют файлы. Мне нужно, чтобы это было как можно проще для них. Знаете ли вы, если вы можете разархивировать разделенные тома, используя встроенный в Windows zip или gzip?
По-видимому, нет, встроенная функция zip-папок Windows не поддерживает составные zip-файлы. Это очень плохо, так как это была стандартная функция формата до Windows 3. Я был бы очень удивлен, если бы gzip не смог этого сделать. WinZip определенно может.
Я хочу сжать папку размером 16 ГБ, но какой метод лучше? tar.gz? tar.bz2 rar? 7z? Будет ли архив меньше, если я сначала сжимаю в методе, затем копирую сжатый архив в новую папку, затем повторно сжимаю другим способом? Мне нужно сделать так, чтобы он помещался на DVD (выход может быть 8,5 ГБ, не помню), но установка «4370 МБ» делает сжатый файл частью 2,5 ГБ.
Кстати, каков метод сжатия по умолчанию в Ubuntu?
По умолчанию это gz . Лучшие результаты, которые я получаю, 7z хотя.
Вот результаты для контейнера виртуальной коробки 1.4 Гб:
Откуда эти результаты? Для каждого алгоритма степень сжатия и скорость очень сильно зависят от того, что вы пытаетесь сжать. Попробуйте сжать некоторые данные, поступающие /dev/urandom : вы получите разные результаты при каждой попытке. Или попробуйте /dev/zero : bzip2 - победитель (по соотношению).
@AndreaCorbellini ссылка находится в ответе, так что нажмите на нее !? и, как я уже сказал: он основан на контейнере виртуальной коробки 1.4. Я согласен, что сжатие во многом зависит от того, какие это файлы, но из нескольких лет опыта 7z, кажется, лучше для файлов, которые у меня есть (в основном, программные и двоичные файлы данных)
Этот вопрос очень старый, но, возможно, кто-то найдет это решение полезным:
Используйте rzip , после tar . Сначала он сжимает блоки данных размером 900 МБ с помощью словарного метода, а затем передает очищенные данные bzip2 . Это намного быстрее, чем другие сильные инструменты сжатия ( bzip2 , lzma ), а некоторые файлы сжимает даже лучше, чем bzip2 или lzma .
Да, gz это инструмент сжатия по умолчанию в Linux. Это быстро, и, несмотря на его возраст, он дает очень хорошие результаты в сжатии текстовых файлов, таких как исходный код. Еще один стандартный инструмент bzip2 , хотя он намного медленнее.
Дополнение: lrzip новее и расширяет принцип rzip. Он даже поддерживает неограниченные размеры блоков и выбор методов сжатия (LZMA, Bzip2, Gzip, LZO, ZPAQ или нет). LZMA является стандартом. Для резервного копирования или если вы делитесь большим количеством данных с другими пользователями Linux / BSD, это может пригодиться.
Я выбираю LZMA . Он имеет наименьший объем байтов и имеет высокую степень сжатия. Сравнение между ZIP и LZMA: я сгенерировал два файла seq.txt с кодом PHP
который содержит повторяющиеся блоки из 0,9 цифры ~ 1 МБ данных и rnd.txt с кодом PHP
который содержит случайные блоки из 0,9 цифры ~ 1 МБ данных.
Результаты сжатия:
- seq.txt, rnd.txt - 1100000 байт
- seq.txt.zip - 2502 байта
- rnd.txt.zip - 515957 байт
- seq.txt.lzma - 257 байт
- rnd.txt.lzma - 484939 байт
- ZIP -> "seq.txt" -> 99,772%
- ZIP -> "rnd.txt" -> 53,094%
- LZMA -> "seq.txt" -> 99,976%
- LZMA -> "rnd.txt" -> 55,914%
Таким образом, LZMA сжимает последовательные данные на 0,2% эффективнее, чем ZIP,
и случайные данные на 2,8% эффективнее, чем ZIP.
Как максимально сжать файлы в архив
Для максимального сжатия файлов вам потребуется архиватор, даже если вы решили использовать формат ZIP. Так вы сможете добиться лучшего сжатия, чем то, которое предлагают встроенные средства Windows.
7-zip – один из лучших архиваторов для таких задач. Это бесплатная программа с открытым исходным кодом, которая поддерживает множество форматов архивов. Для создания архивов поддерживаются форматы 7z, XZ, BZIP2 (BZ2, TB2, TBZ, TBZ2), TAR, GZIP (GZ, TGZ), ZIP (JAR) и WIM, а для распаковки ARJ, CAB, CramFS, DEB, CHM, CPIO, DMG, HFS, FAT, ISO, LZMA, MSI, LZH (LHA), RPM, NSIS, RAR, NTFS, SquashFS, UDF, XAR, VHD и Z (TAR).
После установки программы 7zip можно приступать к архивации файлов. Для этого нужно кликнуть правой кнопкой по файлам или папкам, открыть меню « 7-zip » и выбрать пункт « Добавить к архиву ».
В результате перед вами появится окно с настройками архивации. По умолчанию, здесь заданы средние настройки, которые позволяют получить неплохой уровень сжатия, но не требуют большого времени на упаковку. Если вы хотите добиться максимального сжатия файлов, то эти настройки нужно изменить.
Для начала нужно выбрать формат архива. Как уже было сказано, для максимального сжатия следует выбирать формат « 7z ». Если же вам нужна совместимость, то выбирайте « ZIP ».
Дальше – уровень сжатия. Для максимального сжатия файлов нужно выбрать вариант « Ультра », как в случае формата 7z, так и в случае ZIP. Но, нужно учитывать, что степень сжатия влияет на скорость архивации. Поэтому если объем данных очень большой, то в режиме « Ультра » процесс может сильно затянутся, возможно есть смысл немного понизить уровень сжатия ради ускорения процесса.
Остальные настройки, которые касаются сжатия, лучше оставить по умолчанию. Но, вы можете изменить имя архива, включить разбиение архива на тома или использовать шифрование. Это не повлияет на итоговый размер файла. Когда все будет готов можно нажимать на кнопку « ОК » и запускать процесс упаковки.
После завершения процесса упаковки, рядом с файлами появится ZIP или 7z архив, в котором будут запакованы выбранные вами файлы.
Читайте также: