Что делает комбинирование методов сжатия в 7z?

Средство командной строки 7z позволяет указать несколько методов сжатия , например:

# 7-zip archive type, strongest (9) compression, methods PPMd, BCJ2, LZMA2 $ 7z a -t7z -mx=9 -m0=PPMd -m1=BCJ2 -m2=LZMA2 myarchive.7z somefile.xml 

Все методы каким-либо образом используются или, по крайней мере, указаны в метаданных:

 $ 7z l -slt myarchive.7z 7-Zip [64] 9.22 beta Copyright (c) 1999-2011 Igor Pavlov 2011-04-18 Listing archive: myarchive. 7z -- Path = myarchive.7z Type = 7z Method = LZMA2 PPMD BCJ2 [..] ---------- Path = somefile.xml [..] Method = PPMD:o32:mem192m BCJ2 LZMA2:48m Block = 0 

Кажется, он не запускает файл через все три метода, выбирая лучшее. Скорее, он, по-видимому, всегда выбирает первый, так как изменение порядка метода существенно влияет на размер файла.

Даже если я добавляю несколько файлов, например один XML-файл (PPMd дает наилучшее сжатие) и один двоичный файл (LZMA2), он по-прежнему отображает все методы для обоих файлов и не переключается динамически на файл.

Фактически, в документации конкретно говорится, что «вы можете использовать любое количество методов», но это не говорит о том, почему .

То, что я пытаюсь достичь, – это «файл с несколькими файлами», чтобы выбрать «лучший вариант». Я могу, конечно, вручную добиться этого с помощью небольшого сценария, но, предположительно, методы сжатия цепей должны делать именно это?

  • Как сделать «Файлы для хранения без сжатия» в 7-zip?
  • Почему файл размером 7zip больше, чем необработанный?
  • Как архивировать с помощью подкаталогов с помощью командной строки 7-Zip? Или, как я могу сохранить структуру папок во время архивации?
  • 7-zip для linux
  • Команда 7zip не извлекает в указанный выходной каталог
  • Можно ли выполнить файл после извлечения из архива самораспаковывающегося архива 7-Zip (SFX)?
  • Как извлечь неполный 7-Zip-файл?
  • Как открыть zip-папку, показанную как zip.xml-файл?
  • 2 Solutions collect form web for “Что делает комбинирование методов сжатия в 7z?”

    Как правило, сжатые данные не могут быть сжаты (далее) эффективно. После применения первого метода сжатия размер файла не может быть значительно уменьшен.

    -mN=X в основном для указания фильтров (взятых из файла справки Windows):

    Поддерживаемые фильтры:

    Delta Delta filter («В байтах можно установить смещение по треугольнику.Например, чтобы сжать 16-битные стерео WAV-файлы, вы можете установить« 0 = Delta: 4 ». Дельта-сдвиг по умолчанию равен 1.»)

    Конвертер BCJ для исполняемых файлов x86

    BCJ2 для исполняемых файлов x86 (версия 2) («BCJ2 – это преобразователь Branch для 32-разрядных исполняемых файлов x86 (версия 2). Он преобразует некоторые инструкции для расширения для дальнейшего сжатия».)

    Конвертер ARM для исполняемых файлов ARM (little endian)

    Конвертер ARMT для исполняемых файлов ARM Thumb (little endian)

    Конвертер IA64 для исполняемых файлов IA-64

    Конвертер PPC для исполняемых файлов PowerPC (big endian)

    Преобразователь SPARC для исполняемых файлов SPARC

    Также из файла справки расширенный пример, использующий несколько выходных потоков фильтра BCJ2:

     7z a -t7z archive.7z *.exe *.dll -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3 

    Добавляет файлы * .exe и * .dll в архив archive.7z с использованием конвертера BCJ2, LZMA с 8 MB словарем для основного выходного потока (s0) и LZMA с 512 KB словарем для s1 и s2 выходных потоков BCJ2.

    Кажется, вы можете применять фильтры в последовательности.

    Это сообщение из прошлого года имеет приятное объяснение:

    Что означает номер после 7-zip -m-переключателя?

    Этот номер позволяет вам установить порядок операций сжатия, если вы используете более одного раза.

    Это пример из документации:

     7z a a.7z *.exe *.dll -m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3 

    Добавляет файлы * .exe и * .dll для архивации a.7z с использованием фильтра BCJ2, LZMA с 32 MB словарем для основного выходного потока (s0) и LZMA с 512 KB словарем для s1 и s2 выходных потоков BCJ2.

    Первое сжатие – это самое низкое число, которое равно нулю. В этом примере ноль устанавливается в BCJ2. Затем идет один, который является LZMA. Два и три также LZMA, но они используют разные d-параметры.

    Опция -mb используется для «связывания» вывода с одного сжатия на вход другого. В этом примере BCJ2 имеет один вход и четыре выхода. Выходной ноль идет на сжатие номер один. Выходной будет сжатие номер два. Два выхода идут на компрессию номер три. Вывод три не связан (потому что его не нужно снова сжимать).

    Давайте будем гением компьютера.