Как работает сжатие файлов?

Оглавление:

Как работает сжатие файлов?
Как работает сжатие файлов?

Видео: Как работает сжатие файлов?

Видео: Как работает сжатие файлов?
Видео: РЕШЕНИЕ.системные прерывания, процессор 100%, майнер вирус. - YouTube 2024, Ноябрь
Anonim
Инженеры-программисты всегда разрабатывали новые способы подгонки большого количества данных в небольшое пространство. Это было верно, когда наши жесткие диски были крошечными, и появление Интернета только что сделало его более критичным. Сжатие файлов играет большую роль в подключении нас, позволяя нам отправлять меньше данных по линии, чтобы мы могли быстрее загружать и устанавливать больше подключений к занятым сетям.
Инженеры-программисты всегда разрабатывали новые способы подгонки большого количества данных в небольшое пространство. Это было верно, когда наши жесткие диски были крошечными, и появление Интернета только что сделало его более критичным. Сжатие файлов играет большую роль в подключении нас, позволяя нам отправлять меньше данных по линии, чтобы мы могли быстрее загружать и устанавливать больше подключений к занятым сетям.

Итак, как это работает?

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

Самые популярные библиотеки для сжатия текста полагаются на два алгоритма сжатия, используя оба одновременно для достижения очень высоких коэффициентов сжатия. Этими двумя алгоритмами являются «LZ77» и «кодирование Хаффмана». Кодирование Хаффмана довольно сложно, и мы не будем подробно разбираться в этом. Прежде всего, он использует некоторую причудливую математику для назначения более короткихдвоичные коды к отдельным письмам, уменьшая размеры файлов в процессе. Если вы хотите узнать больше об этом, ознакомьтесь с этой статьей о том, как работает код, или об этом объясните Computerphile.

LZ77, с другой стороны, относительно прост и о чем мы будем говорить здесь. Он пытается удалить повторяющиеся слова и заменить их на меньший «ключ», который представляет слово.

Возьмите эту короткую часть текста, например:

Алгоритм LZ77 будет смотреть на этот текст, понимая, что он повторяет «howtogeek» три раза и меняет его на это:
Алгоритм LZ77 будет смотреть на этот текст, понимая, что он повторяет «howtogeek» три раза и меняет его на это:
Затем, когда он хочет прочитать текст назад, он заменит каждый экземпляр (h) «howtogeek», возвращая нас к исходной фразе.
Затем, когда он хочет прочитать текст назад, он заменит каждый экземпляр (h) «howtogeek», возвращая нас к исходной фразе.

Мы называем сжатие таким «без потерь» - данные, которые вы вводите, такие же, как и данные, которые вы выходите. Ничего не потеряно.

На самом деле LZ77 не использует список ключей, но вместо этого заменяет второе и третье вхождения ссылкой в памяти:

Итак, теперь, когда он доходит до (h), он будет оглядываться назад на «howtogeek» и читать это вместо этого.
Итак, теперь, когда он доходит до (h), он будет оглядываться назад на «howtogeek» и читать это вместо этого.

Если вам интересно более подробное объяснение, это видео из Computerphile очень полезно.

Теперь это идеализированный пример. В действительности, большинство текстов сжимается с помощью клавиш размером всего несколько символов. Например, слово «the» будет сжато, даже если оно появляется в виде слов «там», «их» и «затем». С повторным текстом вы можете получить некоторые сумасшедшие коэффициенты сжатия. Возьмите этот текстовый файл со словом «howtogeek», который повторяется 100 раз. Исходный текстовый файл имеет три килобайта. Однако при сжатии он берет только 158 байтов. Это почти 95% сжатия.

Теперь, очевидно, это довольно экстремальный пример, поскольку мы повторяли одно и то же слово снова и снова. В обычной практике вы, вероятно, получите сжатие 30-40% с использованием формата сжатия, такого как ZIP, в файле, который в основном является текстом.
Теперь, очевидно, это довольно экстремальный пример, поскольку мы повторяли одно и то же слово снова и снова. В обычной практике вы, вероятно, получите сжатие 30-40% с использованием формата сжатия, такого как ZIP, в файле, который в основном является текстом.

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

Как работает сжатие изображения и видео?

Сжатие видео и аудио работает по-разному. В отличие от текста, где вы можете иметь сжатие без потерь, и никакие данные не теряются, с изображениями у нас есть так называемое «Lossy Compression», в котором вы теряете некоторые данные. И чем больше вы сжимаете, тем больше данных вы теряете.
Сжатие видео и аудио работает по-разному. В отличие от текста, где вы можете иметь сжатие без потерь, и никакие данные не теряются, с изображениями у нас есть так называемое «Lossy Compression», в котором вы теряете некоторые данные. И чем больше вы сжимаете, тем больше данных вы теряете.

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

Вот пример. Это скриншот, который я взял, который не был сжат вообще.

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

Ну, это всего лишь худший сценарий, каждый раз экспортирующий с 0% качеством JPEG. Для сравнения, вот качественный JPEG на 50%, который почти неотличим от исходного изображения PNG, если вы не взорвете его и не смотрите внимательно.

PNG для этого изображения был размером 200 КБ, но этот 50-процентный JPEG-качество составляет всего 28 КБ.
PNG для этого изображения был размером 200 КБ, но этот 50-процентный JPEG-качество составляет всего 28 КБ.

Итак, как это экономит столько места? Ну, алгоритм JPEG - это подвиг техники. В большинстве изображений хранится список номеров, причем каждое число представляет собой один пиксель.

JPEG ничего не делает. Вместо этого он хранит изображения, используя что-то, называемое дискретным косинусным преобразованием, которое представляет собой совокупность синусоидальных волн, объединенных вместе с различной интенсивностью. Он использует 64 разных уравнения, но большинство из них не используются. Это то, что делает слайдер качества для JPEG в Photoshop и других графических приложениях - выберите, сколько уравнений использовать. Затем приложения используют кодировку Хаффмана, чтобы еще больше уменьшить размер файла.

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

Этот образ ужасен.Но небольшие объемы сжатия JPEG могут существенно повлиять на размер файла, и это делает JPEG очень полезным для сжатия изображений на веб-сайтах. Большинство фотографий, которые вы видите в Интернете, сжимаются для экономии времени загрузки, особенно для мобильных пользователей с плохими подключениями к данным. Фактически, все изображения на How-To Geek были сжаты, чтобы ускорить загрузку страницы, и вы, вероятно, никогда не заметили.
Этот образ ужасен.Но небольшие объемы сжатия JPEG могут существенно повлиять на размер файла, и это делает JPEG очень полезным для сжатия изображений на веб-сайтах. Большинство фотографий, которые вы видите в Интернете, сжимаются для экономии времени загрузки, особенно для мобильных пользователей с плохими подключениями к данным. Фактически, все изображения на How-To Geek были сжаты, чтобы ускорить загрузку страницы, и вы, вероятно, никогда не заметили.

Сжатие видео

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

Мы используем что-то под названием «межкадровое сжатие», которое вычисляет изменения между каждым фреймом и сохраняет их только. Так, например, если у вас относительно неподвижный снимок, который занимает несколько секунд в видео, много места сохраняется, потому что алгоритму сжатия не нужно хранить все вещи в сцене, которые не меняются. Межкадровое сжатие является основной причиной того, что у нас есть цифровое телевидение и веб-видео. Без него видеоролики будут составлять сотни гигабайт, что больше, чем средний размер жесткого диска в 2005 году, когда YouTube запускается.

Кроме того, поскольку межкадровое сжатие лучше всего работает с главным образом стационарным видео, вот почему конфетти разрушает качество видео.

Примечание: GIF этого не делает, поэтому анимированные GIF-файлы часто очень короткие и маленькие, но все же имеют довольно большой размер файла.

Еще одна вещь, о которой нужно помнить о видео, - это его битрейт - количество данных, разрешенных в каждую секунду. Например, если ваш битбит составляет 200 кбит / с, ваше видео будет выглядеть довольно плохо. Качество идет вверх по мере роста битрейта, но после нескольких мегабайт в секунду вы получаете убытки.

Это увеличенный кадр, взятый из видео медузы. Слева - 3 Мбит / с, а справа - 100 Мбит / с.

30-кратное увеличение размера файла, но не значительное повышение качества. Как правило, видеоролики YouTube занимают около 2-10 Мбит / с в зависимости от вашего подключения, поскольку ничего больше, возможно, не будет замечено.
30-кратное увеличение размера файла, но не значительное повышение качества. Как правило, видеоролики YouTube занимают около 2-10 Мбит / с в зависимости от вашего подключения, поскольку ничего больше, возможно, не будет замечено.

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

Сжатие аудио

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

MP3 также использует битрейт, начиная с нижнего конца 48 и 96 кбит / с (нижний) до 128 и 240 кбит / с (довольно хорошо) до 320 Кбит / с (высококачественный звук), и вы, скорее всего, услышите разницу только с исключительно хорошими наушниками ( и уши).

Существуют также кодеки сжатия без потерь для аудио, основным из которых является FLAC, который использует кодирование LZ77 для доставки абсолютно без потерь звука. Некоторые люди клянутся отличным качеством звука FLAC, но с преобладанием MP3, кажется, большинство людей либо не могут сказать, либо не возражают против разницы.

Рекомендуемые: