Самое высокое сжатие для файлов (для веб-передачи)?

14

Я видел несколько сильно сжатых файлов, таких как 700 МБ данных, сжатых до 30-50 МБ.

Но как вы получаете такие сжатые файлы? Я пытался использовать программное обеспечение, такое как WinRAR и 7Zip, но никогда не достиг такого высокого сжатия.

Какие методы / программное обеспечение позволяют вам так хорошо сжимать файлы?

(PS Я использую Windows XP)

rzlines
источник
Хорошая идея ... но откуда вы берете такие файлы?
Robinicks
3
Я видел 7zip сжатые файлы журнала сервера (в основном текстовые) примерно до 1% от их первоначального размера.
Umber Ferrule
2
Откройте Блокнот. Тип 1 миллиард раз "А". Сохраните, затем сожмите. ВОТ ЭТО ДА! Создайте приложение, которое записывает 1 миллиард (истинных) случайных чисел в файл. Сожмите это. А?
igrimpe 28.12.12
igrimpe: многие алгоритмы сжатия индексируют шаблоны. Миллиард А это А миллиард раз. Вы можете сжать это до [A] {1, 1000000000}. Если у вас есть миллиард случайных чисел, становится затруднительным сопоставление с образцом, поскольку каждое последующее число в данном подмножестве экспоненциально уменьшает вероятность совпадения подмножества.
AaronF

Ответы:

11

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

Сжатие данных несколько раз с использованием различных инструментов, таких как 7zip, winrar (для zip) и bjwflate.

(Обратите внимание, что это не означает, что нужно сжать zip-файл снова и снова, а создать несколько альтернативных zip-файлов с использованием различных инструментов)

Затем запустите deflopt для каждого архива, чтобы немного уменьшить каждый архив.

Наконец, запустите zipmix для коллекции архивов. Поскольку разные zip-инструменты лучше работают с разными файлами, zipmix выбирает наилучшую сжатую версию каждого файла из каждого архива и выдает выходные данные, которые меньше, чем у любого из zip-инструментов, которые могли бы быть созданы индивидуально.

Тем не менее, вы должны заметить, что это не гарантирует, что ваши файлы будут работать магически. Некоторые типы данных просто не сжимаются очень хорошо, такие как JPEG и MP3. Эти файлы уже сжаты внутри.

IZB
источник
4
JPEG и MP3 не заархивированы. Они сжаты, но не застегнуты.
КовБал
Это невероятно плохой совет, пытаться использовать несколько алгоритмов сжатия последовательно - очень плохая идея. Каждый алгоритм создает сжатый файл + накладные расходы, поэтому, используя несколько, вы фактически добавляете данные к данным, которые пытаетесь сжать - это все равно, что пытаться вырыть яму в песке, чем глубже вы идете, тем больше песка льется на вы. Вам гораздо лучше использовать один хороший алгоритм при максимальных настройках сжатия.
Такрой
Я думаю, что вы неправильно поняли .. одни и те же данные повторно не сжимаются. Скорее вы просто выбираете лучший алгоритм для каждого файла, а не для архива.
IZB
6
Сжатие данных несколько раз вводит в заблуждение.
ta.speot.is
12

Это полностью зависит от сжатых данных.

Текст сжимается очень хорошо, двоичные форматы не очень хорошо, а сжатые данные (mp3, jpg, mpeg) - совсем нет.

Вот хорошая сравнительная таблица компрессии из Википедии.

Nifle
источник
Я знаю, что сжатие зависит от типа данных, но есть ли какие-то конкретные методы, которые помогут вам сжимать файлы дальше?
rzlines
3
После того, как вы сжали что-то, обычно невозможно получить это заметно меньше. Вам просто нужно выбрать подходящий метод сжатия для ваших данных.
Нифля
Текст может быть легко сжат до 90%.
Георг Шолли
@ GeorgSchölly: это отлично. Потому что я могу преобразовать любые данные в текст, например, преобразовать каждый двоичный байт в две шестнадцатеричные цифры, отображаемые в текст. Это удвоит мой размер, но тогда экономия на 90% от удвоенного размера приведет к общей экономии на 80%. (Или я мог бы использовать base64 для большей эффективности преобразования двоичного текста в текстовый.) Это поразительно хорошая новость! :)
TOOGAM
8

Предыдущие ответы ошибочны на порядок!

Лучший алгоритм сжатия, с которым у меня есть личный опыт, это paq8o10t (см. Страницу zpaq и PDF ).

Подсказка: команда для сжатия files_or_folders будет выглядеть так:

paq8o10t -5 archive files_or_folders

Размер архива в зависимости от времени сжатия и извлечения 10 ГБ (79 431 файлов) на внешний жесткий диск USB по умолчанию и максимальные настройки на ноутбуке Dell Latitude E6510 (Core i7 M620, 2 + 2 гиперпотока, 2,66 ГГц, 4 ГБ, Ubuntu Linux , Вино 1.6).  Данные из 10 ГБ Benchmark (система 4).

Источник: инкрементная утилита архивации журналов и архиватор

Вы можете найти зеркало исходного кода на GitHub .


Несколько лучший алгоритм сжатия и победитель премии Хаттера - decomp8 (см. Ссылку на странице с призом). Тем не менее, нет программы компрессора, которую вы могли бы использовать.


Для действительно больших файлов lrzip может достичь коэффициентов сжатия, которые просто комичны .

Пример из README.benchmarks:


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

Это тесты, выполненные на двухъядерном Intel Core2 с частотой 2,53 ГГц и оперативной памятью 4 ГБ с использованием lrzip v0.5.1. Обратите внимание, что он работал с 32-битным пользовательским пространством, поэтому возможна только адресация 2 ГБ. Однако тест был выполнен с опцией -U, позволяющей обрабатывать весь файл как одно большое окно сжатия.

Тарбол из 6 последовательных ядерных деревьев.

Compression    Size                 Percentage      Compress    Decompress
None           2373713920           100             [n/a]       [n/a]
7z             344088002            14.5            17m26s      1m22s
lrzip          104874109            4.4             11m37s      56s
lrzip -l       223130711            9.4             05m21s      1m01s
lrzip -U       73356070             3.1             08m53s      43s
lrzip -Ul      158851141            6.7             04m31s      35s
lrzip -Uz      62614573             2.6             24m42s      25m30s
Александр Риччио
источник
Он оптимизирован для обеспечения максимальной степени сжатия, но намного медленнее, чем у ближайших соперников.
Эрик Дж.
2
@Eric J. да, но в вопросе не указана скорость сжатия / декомпрессии;)
Александр Риччио
3

Squeezechart.com содержит сравнения различных степеней сжатия. Хотя, как говорится в ответе Nifle, вы вряд ли получите такие высокие коэффициенты сжатия для двоичных форматов.

idan315
источник
2

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

Для 7-Zip найдите «Добавить в архив» во встроенной справке для более подробной информации.

Том Робинсон
источник
2

Вы можете попробовать 7zip со следующими ультра настройками:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on big_file.mysql.7z big_file.mysql
kenorb
источник
2

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

Топ 30

введите описание изображения здесь

Наилучшими показателями (на основе сжатия) в этом тесте являются PAQ8 и WinRK (PWCM). Они могут сжимать тестовый набор объемом более 300 МБ до 62 МБ (сокращение размера на 80%), но для завершения теста требуется не менее 8,5 часов. Программа номер один (PAQ8P) занимает почти 12 часов, а программа номер четыре (PAQAR) даже 17 часов, чтобы завершить тест. WinRK, программа со вторым лучшим сжатием (79,7%) занимает около 8,5 часов. Не удивительно, что все упомянутые программы используют PAQ (-подобный) движок для сжатия. Если у вас есть файлы со встроенными изображениями (например, файлы Word DOC), использующие PAQ8, он распознает их и сжимает отдельно, что значительно повышает степень сжатия. Все упомянутые программы (кроме WinRK) бесплатны.

LifeH2O
источник
1

Ваша лучшая ставка здесь, кажется, методом проб и ошибок. Попробуйте все доступные методы сжатия для каждого файла и выберите лучшее для размещения на вашем сайте. К счастью, компьютеры делают такие вещи довольно быстро и не скучают. Вы можете написать простой скрипт для автоматизации процесса, чтобы он был «относительно безболезненным».

Только не ожидайте чудес - 700 МБ до 30 МБ просто не случается так часто. Файлы журнала, как указано выше - да. «Ваш средний файл» - никак.

Хотей
источник
0

Nanozip, кажется, имеет наибольшее сжатие вместе с FreeArc. Но это еще не в окончательной версии. Вот как добивается хорошее сжатие Nanozip . У него очень высокая степень сжатия, и он не занимает слишком много времени, см. Сводку тестов производительности теста сжатия нескольких файлов , но FreeArc работает быстрее.

user712092
источник