engrus

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

MFilter - это фильтр-плагин для популярного архиватора 7-Zip, предназначенный для улучшения сжатия некоторых типов мультимедиа файлов путем их автоматической предобработки. Данный фильтр не является отдельным методом сжатия, и должен использоваться совместно с полноценным сжимающим кодеком. MFilter производит следующие оптимизации над упаковываемыми файлами:

  • Фильтр упаковывает методом Brunsli или Lepton jpeg файлы (включая вложенные эскизы), поддерживается обработка вложенных jpeg файлов в другие файлы, например, в pdf.
  • Фильтр производит дельта кодирование следующих типов растровых графических файлов:
    • несжатые bmp
    • pnm (ppm, pgm, pam)
    • несжатые tiff
    • несжатые dng
    • несжатые raw (3fr, arw, nef и другие)
    • несжатые tga
  • Фильтр упаковывает методом WavPack wav файлы с несжатыми аудио данными в формате PCM. Поддерживается автоматическое определение и упаковка файлов следующих типов файлов:
    • wav (включая варианты bwf/rf64 и Multiple Data Chunks (Legasy Audition Format))
    • caf (Core Audio Format)
    • w64 (Sony Wave64)
    • dff (Philips DSDIFF)
    • dsf (Sony DSD stream)
    • aif, afc (Аudio Interchange File Format, включая формат AIFF-C)
    • sf2 (SoundFont)
  • Фильтр декодирует данные в формате BASE64.
  • Фильтр применяет BCJ, ARM, ARMT, IA64, SPARC и PPC фильтры к соответствующим исполняемым файлам.

Об улучшении качества сжатия при использовании фильтра можно судить по цифрам на скриншоте:

MFilter codec

Установка

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

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

Для использования фильтра нужно выбрать в 7-Zip стандартную команду упаковки и выбрать в поле Archive format формат 7z:

Упаковка с использованием MFilter

Интерфейс программы 7-Zip не позволяет напрямую выбрать дополнительный фильтр, поэтому для использования MFilter нужно добавить в поле Parameters строку "f=mfilter". Все остальные параметры вы можете настроить по своему усмотрению.

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

Фильтр имеет несколько дополнительных настроек, позволяющих регулировать отдельные аспекты обработки файлов. Все дополнительные настройки указываются в поле Parameters в следующем виде: "f=mfilter:p1v1:p2v2", где p1 и p2 - это ключи параметров, а v1 и v2 - это значения параметров.

Размер блока

При упаковке данные разбиваются на блоки. Увеличение размера блока может немного улучшить уровень сжатия, но при этом увеличит количество потребляемой при упаковке памяти. Размер блока не влияет на количество потребляемой памяти при распаковке файла. Для настройки размера блока служит ключ "c". Например, строка "с128m" установит размер блока в 128 Мб. Минимальное значение 8 Мб, максимальное 128 Мб, значение по умолчанию 8 Мб.

Алгоритм сжатия jpeg файлов

Для выбора алгоритма сжатия jpeg файлов служит ключ "a". Допустимые значения ключа 0 и 1, 0 отвечает за выбор метода Brunsli, 1 отвечает за выбор метода Lepton. По умолчанию используется алгоритм сжатия Brunsli, он является оптимальным по соотношению уровень сжатия/скорость сжатия.

Также для сжатия jpeg файлов вы можете задействовать любой дополнительный внешний консольный упаковщик jpeg файлов. Для этого информацию о нем нужно добавить в файл MFilter7z.ini. В общем виде настройка внешнего упаковщика выглядит следующим образом:

[N]
Ext=EEE
Encode=packer.exe params "%1" "%2"
Decode=packer.exe params "%1" "%2"
PipeDecode=packer.exe params

N - значение, которое будет использоваться для ключа "a".

EEE - расширение, используемое упаковщиком для файлов, содержащих сжатые jpeg файлы.

Строка Encode описывает командную строку, которая будет использоваться при сжатии jpeg файла, при этом вместо %1 будет подставлен полный путь к исходному jpeg файлу, а вместо %2 будет подставлен полный путь к файлу, который должен содержать результат сжатия.

Строка Decode описывает командную строку, которая будет использоваться при распаковке сжатого файла, при этом вместо %1 будет подставлен полный путь к упакованному jpeg файлу, а вместо %2 будет подставлен полный путь к файлу, который должен содержать результат распаковки.

Имена, используемые при подстановке, отличаются только расширением файла.

В случае, если декодер поддерживает распаковку через стандартные потоки ввода/вывода, можно также определить строку PipeDecode.

Так настройка внешнего упаковщика PackJPG выглядит следующим образом:

[2]
Encode=packJPG.exe -np "%1"
Decode=packJPG.exe -np "%1"
Ext=pjg

Алгоритм предсказания

При упаковке растровых графических файлов используется алгоритм предсказания пикселей изображения на основе предшествующих пикселей. Фильтр может применять один из восьми возможных алгоритмов:

 | | | | |
-+-+-+-+-+-
 | |C|B| |
-+-+-+-+-+-
 | |A|Y| |
-+-+-+-+-+-
 | | | | | 
  1. None
  2. Y = A
  3. Y = B
  4. Y = C
  5. Y = A + B - C
  6. Y = A + ((B - C) / 2)
  7. Y = B + ((A - C) / 2)
  8. Y = (A + B) / 2

Фильтр пытается автоматически выбрать наилучший алгоритм, но вы можете самостоятельно определить его использовав параметр "pb". Для выбора наилучшего алгоритма фильтр просматривает первые 200 строк изображения и делает выбор на основе статистики. Вы можете определить количество строк, которое будет использоваться для анализа, с помощью параметра "lp".

Логгирование

Фильтр имеет режим логгирования упаковки. В этом режиме фильтр создает во временной папке файл MFilter.log, в который записываются данные анализа упаковываемых файлов. Для включения этого режима служит ключ "o" со значением 1.

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

  • Версия плагина: 1.2
  • Размер установочного дистрибутива: 3510 KB
  • Дата установочного дистрибутива: 30 Jan 2022