Тройное сжатие и экономия места всего 1%?

Тройное сжатие и экономия места всего 1%?

Я пытался сэкономить место на своем сервере Linux, и у меня была папка, содержащая в подпапках 22 ГБ изображений.

Поэтому я решил их сжать.

Сначала я использовал tar:

tar -zcf folder.tar folder 

Затем сжать

gzip folder

И наконец, на всякий случай, bzip2

bzip2 folder

И после всего этого, общая сумма всех folder.tar.gz.bzip2s, все еще составила 22 ГБ! С более высокой точностью, экономия места составила 1%!

Я что-то не так сделал? Я бы ожидал экономии в разы больше, чем 1%!

Как еще можно сжать файлы?

решение1

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

Если файлы уже сжаты, вы, как правило, не увидите особых преимуществ от их повторного сжатия. Если это действительно сэкономило вам дополнительное место, то, вероятно, это признак того, что первый алгоритм сжатия отстой. Судя по сути вопроса, я предполагаю, что многие из них являются медиафайлами и, как таковые, уже сжаты (хотя и с помощью алгоритмов, которые отдают приоритет скорости распаковки), и поэтому вы, вероятно, не получите от них многого. Это своего рода сценарий «кровь из камня»: они уже настолько малы, насколько это возможно без потери информации.

Если я очень беспокоюсь о пространстве, я просто делаю "bzip2 -9" и называю это хорошим. Хотя я слышал хорошие вещи о соотношении в XZ. Я сам не использовал XZ (кроме как для распаковки чужих вещей), но, как предполагается, у него лучшее соотношение, чем у bzip2, но сжатие/распаковка занимает немного больше времени.

решение2

Ваши попытки сжатия не увенчались успехом, поскольку ваши данные уже сильно сжаты, и больше ничего не получится, см. другие ответы для более подробных объяснений. Однако, если вы можете договориться ос потерямикомпрессия, в отличие отбез потерькак вы уже пробовали, вы можете значительно сжать изображения. Но поскольку данные обрезаются, это нельзя отменить.

Вот пример повторного сжатия всех изображений JPEG с помощью imagemagick. Обратите внимание, что это приведет к перезаписи ваших файлов.

find image_directory -type f -name "*.jpg" -exec mogrify -quality 75% {} \+

решение3

Большинство распространенных форматов изображений уже сжаты (например, jpg, png, gif), поэтому особой экономии вы не получите. 1% звучит примерно так.

Добавление большего сжатия может фактически сделать результат (немного) больше, поскольку алгоритм сжатия не дает никаких преимуществ для сжатых данных, а затем формат (например, gzip) должен добавить заголовок и/или информацию о структуре к выходным данным.

Извините! Если вы используете png, вы можете попробовать сжать файлы с помощьюpngcrush.

решение4

Еще один момент, который стоит поднять: использование нескольких инструментов/алгоритмов сжатия может фактически привести к тому, что ваш конечный результат раздуется в размере и станет больше, чем нужно. Это означает, что если вы сожмете 100 ГБ до 10 ГБ, а затем попытаетесь сжать его снова, вы можете получить ~15 ГБ в зависимости от того, что вы сжимаете и чем вы это делаете.

Лично я никогда не делаю ничего большего, чем tar cjvf container.tar.bz2 /targetпросто потому, что объем дискового пространства, сэкономленный за счет двойного сжатия, ничтожно мал.

Связанный контент