engrus

7-Zip плагины\Modern7z

Modern7z - это плагин для популярного архиватора 7-Zip, добавляющий в 7-Zip поддержку современных методов сжатия:

Поскольку данные методы сжатия предназначены для упаковки только одного файла, то обычно они используются совместно с контейнером TAR (или аналогичным по сути контейнером). Вначале производится упаковка файлов в контейнер TAR, а затем производится непосредственное сжатие полученного TAR файла нужным алгоритмом. Также возможно использование данных методов сжатия в качестве кодеков при упаковке файлов в формат 7Z.

Открытие ZSTD in 7-Zip

Также плагин позволяет:

  • распаковывать из zip архивов файлы, упакованные методом ZSTD.
  • распаковывать из zip архивов файлы, упакованные методом BROTLI (этот метод отображается в 7-Zip как "129:v1"). Этот метод используется, например, в файле palemoon.res из состава браузера Pale Moon.
  • распаковывать и упаковывать jsonlz4 файлы (эти файлы имеют сигнатуру "mozLz40").

Установка

Установочный дистрибутив Modern7z представляет собой простой Zip-архив, содержащий файл ReadMe.txt и две папки с именами 32 и 64. В этих папках находятся 32-битная и 64-битная версии плагина, соответственно. Внутри папок находятся непосредственно файлы плагина. Для установки плагина в папке, в которую установлена программа 7-Zip, необходимо создать папку Codecs. В созданную папку необходимо скопировать либо содержимое папки 32, либо содержимое папки 64, в зависимости от разрядности программы 7-Zip. После этого 7-Zip при запуске будет автоматически находить плагин и использовать его для работы с дополнительными методами сжатия.

Использование

Для упаковки файла конкретным алгоритмом нужно выбрать в 7Zip стандартную команду упаковки. После появления окна Add To Archive нужно выбрать необходимый алгоритм в поле Archive format:

Упаковка в формат ZSTD в 7-Zip

Все дополнительные методы имеют очень широкий диапазон уровня сжатия:

Метод сжатияДиапазон уровня сжатия
Zstandard1-22
Brotli0-11
LZ40-12
LZ50-15
Lizard10-19 используется для подметода FastLZ4
20-29 используется для подметода LIZv1
30-39 используется для подметода FastLZ4 + Huffman
40-49 используется для подметода LIZv1 + Huffman
Fast LZMA21-9

Интерфейс 7Zip позволяет выбрать лишь значения 0, 1, 3, 5, 7 и 9, поэтому точное необходимое значение нужно указать напрямую в поле Parameters, например, строка "x=20" будет обозначать, что необходимо использовать уровень сжатия 20.

Интерфейс 7Zip не позволяет выбрать количество потоков, которые будут использоваться для упаковки данных. Поэтому этот параметр также нужно указать в поле Parameters, например, строка "mt=4" будет обозначать, что при сжатии необходимо использовать 4 потока. Если параметр mt не будет указан, то будет использоваться количество потоков, равное количеству ядер процессора в системе.

Для полученных после сжатия файлов поддерживается Random Access Mode. Это позволяет производить навигацию по вложенному TAR контейнеру без предварительного полного извлечения всего TAR контейнера. Данный режим поддерживается только в том случае, если размер отдельного независимого блока не превышает 64 Mb (о формировании независимых блоков см. в разделе Тонкая настройка).

Использование в качестве кодека

Интерфейс 7Zip не позволяет напрямую выбрать дополнительный алгоритм в качестве метода сжатия, который будет использоваться при упаковке в формат 7Z. Поэтому его нужно указывать в поле Parameters в виде строки вида "0=NAME", где NAME - это внутреннее название метода сжатия:

Метод сжатияВнутреннее название
ZstandardZSTD
BrotliBROTLI
LZ4LZ4
LZ5LZ5
LizardLIZARD
Fast LZMA2FLZMA2
Упаковка в формат ZSTD в 7-Zip

Например, строка "0=ZSTD" будет обозначать, что необходимо использовать метод сжатия Zstandard.

Точное значение уровня сжатия также нужно указать напрямую в поле Parameters (см выше).

Тонкая настройка

Алгоритмы позволяют установить значения дополнительных параметров, влияющих на различные аспекты сжатия. Все дополнительные параметры при необходимости их использования указываются в поле Parameters в виде строки key=value, аналогично выбору параметра Уровень сжатия.

Для определения размера используется следующая система сокращений: key=Nx, где N - это число, а x - это единица измерения. Допустимые единицы измерения: b - байт, k - килобайт, m - мегабайт, g - гигабайт.

Размер блока

При сжатии с использованием алгоритма Brotli в качестве кодека и алгоритмов Zstandard, LZ4, LZ5, Lizard как в качестве кодека, так и при создании отдельного файла, входной поток данных делится на блоки одинакового размера, каждый из которых сжимается отдельно. Это позволяет увеличить скорость сжатия данных за счет сжатия каждого блока в отдельном потоке. Но данный метод ускорения имеет и отрицательную сторону - он приводит к снижению общего уровня сжатия.

По умолчанию размер блока определяется в соответствии с выбранным уровнем сжатия:

Уровень сжатияРазмер блока
ZstandardBrotliLZ4LZ5Lizard
0-20-10-10-110-11, 20-21, 30-31, 40-411 Мб
3-52-32-32-312, 22, 32, 422 Мб
6-104-54-54-513, 23, 33, 434 Мб
11-1566-76-714, 24, 34, 448 Мб
16-17788-915, 25, 35, 4516 Мб
18-198910-1116, 26, 36, 4632 Мб
2091012-1317, 27, 37, 4764 Мб
2110111418, 28, 38, 48128 Мб
2211121519, 29, 39, 49256 Мб

Для настройки размера блока служит ключ "c". Например, строка "c=512m" установит размер блока в 512 Мб. Строка "c=0b" имеет особое значение - при ее использовании входной поток не будет делиться на блоки вообще, при этом будет отключено многопоточное сжатие (данная строка не влияет на работу алгоритма Brotli). Это дает максимальную эффективность сжатия, но в тоже время является самым медленным режимом работы.

LZ4, LZ5, and Lizard

Для алгоритмов LZ4, LZ5 и Lizard дополнительно можно настроить размер словаря с использованием ключа "d". По умолчанию размер словаря определяется в соответствии с размером упаковываемых данных, но его можно выбрать самостоятельно.

Допустимые значения:

АлгоритмРазмер словаря
ZSTD64k, 128k, 256k, 512k, 1m, 2m, 4m, 8m, 16m, 32m, 64m, 128m, 256m, 512m, 1g, 2g (доступно только для x64)
LZ464k, 256k, 1m, 4m
LZ564k, 256k, 1m, 4m, 16m, 64m, 256m
Lizard128k, 256k, 1m, 4m, 16m, 64m, 256m

Brotli

При упаковке с использованием метода Brotli можно настроить следующие дополнительные параметры:

  • Algorithm; ключ "a"
    Допустимые значения:
    0: В этом режиме компрессор ничего не знает заранее о свойствах входных данных.
    1: Режим сжатия текста в формате UTF-8.
    2: Режим сжатия, использующийся в WOFF 2.0.
    Пример: a=0
  • Sliding LZ77 window size; ключ "d"
    Диапазон допустимых значений: 1k - 1g
    Компрессор может уменьшить переданное значение, если, например, размер входных данных гораздо меньше размера окна.
    Пример: d=256m
  • Input block size; ключ "mem"
    Диапазон допустимых значений: 1k - 16m
    Компрессор может уменьшить переданное значение, если, например, размер входных данных гораздо меньше размера входного блока.
    Больший размер блока позволяет добиться большего уровня сжатия, но требует больше памяти для работы.
    Пример: mem=256m
  • Флаг, определяющий использование функции "literal context modeling"; ключ "lc"
    Допустимые значения: 0, 1
    Флаг определяет выбор приоритета между скоростью распаковки и уровнем сжатия.
    Пример: lc=1
  • The number of postfix bits (NPOSTFIX); ключ "pb"
    Допустимые значения: 0, 1, 2, 3
    Компрессор может изменить переданное значение.
    Пример: pb=0
  • The number of direct distance codes; ключ "fb"
    Диапазон допустимых значений: 0 - 15 << NPOSTFIX с шагом 1 << NPOSTFIX
    Компрессор может изменить переданное значение.

Fast LZMA2

При упаковке с использованием метода Fast LZMA2 можно настроить следующие дополнительные параметры:

  • Algorithm; ключ "a"
    Допустимые значения: 1 (fast), 2 (optimize), 3 (hybrid mode)
    Пример: a=3
  • Dictionary size; ключ "d"
    Диапазон допустимых значений: 1m - 128m для 32 битной версии плагина; 1m - 1g для 64 битной версии плагина.
    Пример: d=64m
  • The number of fast bytes; ключ "fb"
    Диапазон допустимых значений: 5-273
    Пример: fb=160
  • Match finder cycles; ключ "mc"
    Диапазон допустимых значений: 0-1000000000
    Пример: mc=1000
  • The number of literal context bits; ключ "lc"
    Диапазон допустимых значений: 0-4
    Пример: lc=3
  • The number of literal pos bits; ключ "lp"
    Диапазон допустимых значений: 0-4
    Пример: lp=0
  • The number of pos bits; ключ "pb"
    Диапазон допустимых значений: 0-4
    Пример: pb=2

Подробнее о значении ключей указанных ключей можно прочитать в справке к программе 7-Zip в разделе, описывающем алгоритмы сжатия LZMA и LZMA2.

Актуальная версия

  • Версия плагина: 1.9
  • Размер установочного дистрибутива: 2690 KB
  • Дата установочного дистрибутива: 07 Dec 2023

Примечание для разработчиков

Разработчики, желающие добавить поддержку плагина Modern7z в свою программу, могут сильно упростить жизнь своим пользователям, избавив их от необходимости ручного ввода параметров. Modern7z поддерживает механизм получения и передачи параметров 7z Parameter API. Данный механизм позволяет приложению использовать любой новый плагин (поддерживающий 7z Parameter API) и корректно отображать доступные для изменения параметры полностью автоматически, основываясь лишь на данных, передаваемых самим плагином.

Дополнительная информация

Вы также можете использовать все методы сжатия плагина Modern7z в программе TC4Shell. Эта программа позволяет открывать множество типов архива прямо в Проводнике в виде простых папок. Также TC4Shell может использоваться для модификации и создания новых архивов.

Pack to ZSTD format Pack to ZSTD format Open ZSTD in Windows Explorer

Подробнее...