Программы для сжатия фотографий без потери качества
Содержание:
Пример набора данных
В данной статье будет использоваться специально подготовленное гипотетическое представление данных. Приведем простой для понимания пример. В городе Гринфилд (штат Массачусетс, США) используются префиксы телефонных номеров , и . (К сведению читателей за пределами США: в США местные телефонные номера являются семизначными и традиционно представляются в виде ###-####; префиксы назначаются в соответствии с географическим местоположением). Также предположим, что из всех трех префиксов чаще всего используется первый. Частями суффикса могут быть любые другие цифры с приблизительно равной вероятностью. Набор интересующих нас данных находится в «списке всех телефонных номеров, которые в настоящее время находятся в активном пользовании»
Можно попробовать подобрать причину, почему это могло бы быть интересным с точки зрения программирования, но в данном случае это не важно
Изначально интересующий нас набор данных имеет стандартное представление: многоколоночный отчет (возможно, сгенерированный в качестве результата выполнения какого-либо запроса или процесса компиляции). Первые несколько строк этого отчета могли бы выглядеть следующим образом:
Таблица 1. Многоколоночный отчет
============================================================= 772-7628 772-8601 772-0113 773-3429 774-9833 773-4319 774-3920 772-0893 772-9934 773-8923 773-1134 772-4930 772-9390 774-9992 772-2314
Сжатие по алгоритму Лемпеля-Зива
Вероятно, самым значимым методом сжатия без потерь является алгоритм Лемпеля-Зива. В этой статье речь пойдет о варианте LZ78, но LZ77 и другие варианты работают схожим образом. Идея, заложенная в алгоритме LZ78, заключается в кодировании потоковой последовательности байтов с использованием некоторой динамической таблицы. В начале сжатия битового потока таблица LZ заполняется фактическим набором символов, наряду с несколькими пустыми слотами. В алгоритме применяются таблицы разных размеров, но в данном примере с телефонными номерами (со сжатием пустых мест) используется таблица из 32 элементов (этого достаточно для данного примера, но может оказаться мало для других типов данных). Вначале мы заполняем первые десять слотов символами используемого алфавита (цифрами). По мере поступления новых байтов сначала выводится значение из таблицы, соответствующее самой длинной подходящей последовательности, а затем в следующий доступный слот записывается последовательность длиной N+1. В наихудшем случае мы используем 5 битов вместо 4 для отдельного символа, однако в большинстве случаев мы сможем обойтись 5 битами на несколько символов. Рассмотрим пример работы этого алгоритма (слот таблицы указан в квадратных скобках):
7 --> Поиск: 7 найдено --> добавлять нечего --> продолжить поиск 7 --> Поиск: 77 не найдено --> добавить '77' to --> вывести =00111 2 --> Поиск: 72 не найдено --> добавить '72' to --> вывести =00111 7 --> Поиск: 27 не найдено --> добавить '27' to --> вывести =00010 6 --> Поиск: 76 не найдено --> добавить '76' to --> вывести =00111 2 --> Поиск: 62 не найдено --> добавить '62' to --> вывести =00110 8 --> Поиск: 28 не найдено --> добавить '28' to --> вывести =00010
До сих пор мы не извлекли из этого никакой пользы, но давайте перейдем к следующему телефонному номеру:
7 --> Поиск: 87 не найдено --> добавить '87 to --> вывести =00100 7 --> Поиск: 77 найдено --> добавлять нечего --> продолжить поиск 2 --> Поиск: 772 не найдено --> добавить '772' to --> вывести =01011 8 --> Поиск: 28 найдено --> добавлять нечего --> продолжить поиск 6 --> Поиск: 286 не найдено --> добавить '286' to --> вывести =10000 ....
Приведенных операций должно быть достаточно для демонстрации работы модели. Хотя никакого заметного сжатия пока не достигнуто, уже видно, что мы повторно использовали слоты 11 и 16, закодировав по два символа одним выходным символом. Кроме того, мы уже накопили крайне полезную последовательность байтов в слоте 18, которая впоследствии неоднократно будет встречаться в потоке.
Алгоритм LZ78 заполняет одну таблицу символов полезными (предположительно) записями, затем записывает эту таблицу, очищает ее и начинает новую. В такой ситуации таблица из 32 символов может оказаться недостаточной, так как будет очищена прежде, чем нам удастся неоднократно воспользоваться такими последовательностями, как и ей подобные. Однако с помощью небольшой таблицы проще проиллюстрировать работу алгоритма.
В типичных наборах данных варианты метода Лемпеля-Зива достигают значительно более высоких коэффициентов сжатия, чем методы Хаффмана и RLE. С другой стороны, варианты метода Лемпеля-Зива тратят значительные ресурсы на итерации, а их таблицы могут занимать много места в памяти. Большинство существующих инструментальных средств и библиотек сжатия используют комбинацию методов Лемпеля-Зива и Хаффмана.
Сжатие пустых мест
Сжатие пустых мест может быть охарактеризовано в более общем смысле как «удаление того, что нас не интересует». Даже несмотря на то, что этот метод с технической точки зрения представляет собой метод сжатия с потерями, он все равно полезен для многих типов представлений данных, с которыми мы сталкиваемся в реальном мире. Например, даже несмотря на то, что HTML намного удобнее читать в текстовом редакторе при добавлении отступов и междустрочных интервалов, ни одно из этих «пустых мест» никак не влияет на визуализацию HTML-документа в Web-браузере. Если вам точно известно, что конкретный документ HTML предназначается исключительно для Web-браузера (или для какого-либо робота/поискового агента), то, возможно, будет неплохо убрать все пустые места, чтобы документ передавался быстрее и занимал меньше места в хранилище. Все то, что мы удаляем при сжатии пустых мест, в действительности не несет никакой функциональной нагрузки.
В случае с представленным примером из описанного отчета можно удалить лишь небольшую часть информации. Строка символов «=» по верхнему краю отчета не несет никакого функционального наполнения; то же самое касается символов «-» в номерах и пробелов между номерами. Все это полезно для человека, читающего исходный отчет, но не имеет никакого значения, если мы рассматриваем эти символы в качестве «данных». То, что мы удаляем, – это не совсем «пустое место» в традиционном смысле, но является им по сути.
Сжатие пустых мест крайне «дешево» с точки зрения реализации. Вопрос состоит лишь в считывании потока данных и исключении из выходного потока нескольких конкретных значений. Во многих случаях этап «распаковки» вообще не предусматривается. Однако даже если бы мы захотели воссоздать что-то близкое к оригиналу потока данных, это потребовало бы лишь небольшого объема ресурсов ЦП или памяти. Восстановленные данные не обязательно будут совпадать с исходными данными; это зависит от того, какие правила и ограничения содержались в оригинале. Страница HTML, напечатанная человеком в текстовом редакторе, вероятно, будет содержать пробелы, расставленные согласно определенным правилам. Это же относится и к автоматизированным инструментальным средствам, которые часто создают «обоснованные» отступы и интервалы в коде HTML. В случае с жестким форматом отчета, представленным в нашем примере, не существует никаких причин, по которым первоначальное представление не могло бы быть воссоздано каким-либо «форматирующим распаковщиком».
Типы сжатия с потерями
Существуют две основных схемы сжатия с потерями:
В трансформирующих кодеках фреймы изображений или звука обычно трансформируются в новое базисное пространство и производится квантование. Трансформация может осуществляться либо для всего фрейма целиком (как, например, в схемах на основе wavelet-преобразования), либо поблочно (характерный пример — JPEG). Результат затем сжимается энтропийными методами.
В предсказывающих кодеках предыдущие и/или последующие отсчеты данных используются для того, чтобы предсказать текущий отсчет изображения или звука. Ошибка между предсказанными данными и реальными вместе с добавочной информацией, необходимой для производства предсказания, затем квантуется и кодируется.
В некоторых системах эти две техники комбинируются путём использования трансформирующих кодеков для сжатия ошибочных сигналов, сгенерированных на стадии предсказания.
Пакетная обработка фотографий с помощью Photoshop
Первое что необходимо это создаем папку где вам угодно в моем случаи я создал папку на рабочем столе. Дальше выделяем все фотографии и переместим их в ту папку в которую вы создали.
Теперь открываем фотошоп. Желательно чтобы фотошоп был версии с CS. 5 и выше. Загружаем в фотошоп любую фотографию для обработки
Здесь самый важный нюанс, необходимо создать операцию которая является самой важной частью данного приема. На верхнем панели меню выбираем пункт «окна»
Выпадающей списке меню нужно выбрать раздел «операция»
откроется вот такое окно
Теперь приступаем создание операции. На нижней вкладке открывшейся окна нажимаем на пиктограмму «создать новый набор». Пишем имя «мой набор» и нажимаем «ок»
Вы можете написать любое имя. Как вы видите в списке наборов появился ваш набор. Нажимаем на наш набор так, чтобы стрелка была направлена вниз.
Теперь переходим в нижнюю панель и нажимаем на пиктограмму «создать новую операцию»
Откроется вот такое окно
Пишем имя операции «моя операция». Идем дальше выбираем тот набор который мы создали «мой набор»
Можно также назначить горячие клавиши которые помогут выполнить пакетную обработку фотографий за один клик также по желании выбираем цвет, но это не важно я оставляю. Осталось только начать запись, прежде чем нажать на запись у вас уже должно быть загружено фотографий и все готово
Осталось только начать запись, прежде чем нажать на запись у вас уже должно быть загружено фотографий и все готово.
В моем случаи я буду использовать пакетная обработка фотографий для приготовление фото чтобы опубликовать на своем блоге. Я буду применять свои стили, эффекты, фильтры и т.д. а вы применяете те действие которые вам необходимо. И так начнем процесс пакетная обработка фотографий, нажимаем «записать»
Для начала переходим раздел слои. Открываем меню «окно» выбираем раздел «слои»
я добавлю «уровни» и увеличу резкость. вы можете добавлять любые эффекты и фильтры, а также изменять размер изображение. После того как вы закончите обработку фотографии необходимо нажать на пиктограмму «стоп» в нижней панели у окна «операции»
теперь проверим работает ли прием пакетная обработка фотографий. Для этого на верхней панели открываем меню «файл» наводим курсор мыши на пункт «сценарий» и выбираем раздел «обработчик изображений»
открывшейся окно разделена на 4 части:
- Указываем путь пакетной обработки фотографий
- Указываем место сохранение результата
- Выбираем параметры изображений. Указываем формат фотографий и у каждого формата указываем длину и ширину. Также определяемся качеством фотографий
- Применяем нужную операцию
В нашем случаи я создал папку на рабочем столе. В первом пункте нажимаем «выбрать папку» и выбираем нужную папку
Во втором пункте укажем параметре «сохранить в том же месте»
в третьем пункте я укажу следующие настройки. Сохраню фотографий формате jpeg и укажу качество 5 или 6 так как для публикация в интернету это нормально.
И последнем пункте просто выбираем ту операцию которую мы создали
После того как вы указали все параметры нажимаем «выполнить». На ваших глазах начнется процесс пакетная обработка фотографий.
Скажу честно люблю наблюдать за этим процессом. Как только закончиться пакетная обработка фотографий. на рабочем столе заходим папку которую мы создали и указали при обработке,
там же фотошоп создал еще одну папку jpeg и сохранил все фотографий которые были обработаны.
В моем практике пакетная обработка фотографий пригодилось, когда нужны было обработать куча фотографии для публикации на моем блоге.
Так как фото было очень много, а обработать каждую картинку по отдельности это было просто наказание. И я нашел выход из ситуация с помощью данного метода.
Надеюсь это информация вам пригодится.
Правильная постановка задачи
Выбрав правильный алгоритм, можно получить значительный выигрыш даже по сравнению с более оптимизированными, но неподходящими методами. Точно так же правильный выбор представления данных зачастую оказывается важнее выбора методов сжатия (которые всегда являются своего рода последующей оптимизацией требуемых функций). Простой пример набора данных, приводимый в этой статье, служит отличной иллюстрацией ситуации, когда переосмысление проблемы будет более удачным решением, чем использование любого из приведенных методов сжатия.
Необходимо еще раз взглянуть на проблему, которую представляют данные. Так как это не общий набор данных и для него существуют четкие предварительные требования, то проблему можно переформулировать. Известно, что существует максимум 30000 телефонных номеров (от 7720000 до 7749999), некоторые из которых являются активными, а некоторые – нет. Перед нами не стоит задача вывести полное представление всех активных номеров. Нам просто требуется указать с помощью логического значения, активен данный номер или нет. Размышляя о проблеме подобным образом, мы можем просто выделить 30000 битов в памяти и в системе хранения и использовать каждый бит для индикации активности («да» или «нет») соответствующего телефонного номера. Порядок битов в битовом массиве может соответствовать телефонным номерам, отсортированным по возрастанию (от меньшего к большему).
Подобное решение на основе битового массива идеально со всех точек зрения. Оно требует ровно 3750 байт для представления набора данных; различные методы сжатия будут использовать меняющийся объем в зависимости от количества телефонных номеров в наборе и эффективности сжатия. Однако если 10000 из 30000 возможных телефонных номеров являются активными и если даже самому эффективному методу сжатия требуется несколько байтов на один телефонный номер, то битовый массив однозначно выигрывает. С точки зрения потребностей в ресурсах ЦП битовый массив не только превосходит любой из рассмотренных методов сжатия, но и оказывается лучше, чем обычный метод представления телефонных номеров в виде строк (без сжатия). Проход по битовому массиву и увеличение счетчика текущего телефонного номера могут эффективно выполняться даже во встроенном кэше современных процессоров.
Из этого простого примера можно понять, что далеко не каждая проблема имеет такое идеальное решение, как рассмотренная выше. Многие проблемы действительно требуют использования значительного объема ресурсов памяти, пропускной способности, хранилища и ЦП; и в большинстве подобных случаев методы сжатия могут облегчить или снизить эти требования. Но более важный вывод состоит в том, что перед применением методов сжатия стоит еще раз удостовериться, что для представления данных выбрана правильная концепция.
Посвящается памяти Клода Шеннона (Claude Shannon).
Сжатие без потерь
Основная статья: Сжатие звука без потерь
Сокращение статистической избыточности основано на учете свойств самих звуковых сигналов. Она определяется наличием корреляционной связи между соседними отсчетами цифрового звукового сигнала, устранение которой позволяет сокращать объем передаваемых данных на 15…25 % по сравнению с их исходной величиной. Для передачи сигнала необходимо получить более компактное его представление, что возможно осуществить с помощью ортогонального преобразования. Важными условиями применения такого метода преобразования являются:
- возможность восстанавливать исходный сигнал без искажений
- способность обеспечивать наибольшую концентрацию энергии в небольшом числе коэффициентов преобразования
- быстрый вычислительный алгоритм
Этим требованиям отвечает модифицированное дискретно-косинусное преобразование (МДКП).
Уменьшить скорость цифрового потока позволяют методы кодирования, учитывающие статистику звуковых сигналов, например, вероятности появления уровней разной величины. Одним из таких методов является код Хаффмана, где наиболее вероятным значениям сигнала приписываются более короткие кодовые слова, а значения отсчетов, вероятность появления которых мала, кодируются кодовыми словами большей длины. Именно в силу этих двух причин в наиболее эффективных алгоритмах компрессии цифровых аудиоданных кодированию подвергаются не сами отсчеты звукового сигнала, а коэффициенты МДКП.
Подобные методы применяются при архивации файлов.
Кодирование по методу Хаффмана
Кодирование по методу Хаффмана рассматривает таблицу символов как целый набор данных. Сжатие достигается путем нахождения «весовых коэффициентов» каждого символа в наборе данных. Некоторые символы используются чаще других, поэтому кодирование по методу Хаффмана предполагает, что частые символы должны кодироваться меньшим количеством бит, чем более редкие символы. Существуют различные варианты кодирования по методу Хаффмана, но исходный (и чаще всего применяемый) вариант включает поиск самого распространенного символа и кодирование его одним битом, например, 1. И если в закодированной последовательности встречается 0, это значит, что на этом месте находится другой символ, закодированный большим количеством бит.
Представим, что мы применили кодирование по методу Хаффмана для кодирования нашего примера (предположим, что мы уже подвергли отчет сжатию пустых мест). Мы могли бы получить следующий результат:
Таблица 2. Результаты кодирования по методу Хаффмана
Encoding Symbol 1 7 010 2 011 3 00000 4 00001 5 00010 6 00011 8 00100 9 00101 0 00111 1
Исходный набор символов (состоящий из чисел) может быть легко закодирован (без сжатия) в виде 4-х битных последовательностей (полубайтов). Приведенное кодирование по методу Хаффмана будет использовать до 5 битов для символов в наихудшем случае, что очевидно хуже кодирования с помощью полубайтов. Однако в лучшем случае потребуется всего 1 бит; при этом известно, что именно лучший случай будет использоваться чаще всего (так как именно этот символ чаще всего встречается в данных). Таким образом, мы могли бы закодировать конкретный телефонный номер следующим образом:
772 7628 --> 1 1 010 1 00010 010 00011
При кодировании с помощью полубайтов представление телефонного номера заняло бы 28 бит, в нашем же случае кодирование занимает 19 бит. Пробелы добавлены в пример только для лучшего восприятия; их присутствие в кодированных символах не требуется, так как по таблице кодов всегда можно определить, достигнут конец закодированного символа или нет (правда, при этом все равно необходимо отслеживать текущую позицию в данных).
Кодирование по методу Хаффмана по-прежнему является очень «дешевым» для декодирования с точки зрения процессорного времени. Однако оно требует поиска в таблице кодов, поэтому не может быть столь же «дешевым», как RLE. Кодирование по методу Хаффмана является довольно затратным, так как требует полного сканирования данных и построения таблицы частот символов. В некоторых случаях при использовании кодирования по методу Хаффмана уместным является «короткий путь». Стандартное кодирование по методу Хаффмана применяется к конкретному кодируемому набору данных, при этом в выходных данных вначале следует таблица символов. Однако если передается не одиночный набор данных, а целый формат с одинаковыми закономерностями встречаемости символов, то можно использовать глобальную таблицу Хаффмана. При наличии такой таблицы мы можем жестко запрограммировать поиск в своих исполняемых файлах, что значительно «удешевит» сжатие и распаковку (за исключением начальной глобальной дискретизации и жесткого кодирования). Например, если мы знаем, что наш набор данных будет представлять собой прозу на английском языке, то частоты появления букв хорошо известны и постоянны для различных наборов данных.
Алгоритмы сжатия данных неизвестного формата
Имеется два основных подхода к сжатию данных неизвестного формата:
- На каждом шаге алгоритма сжатия очередной сжимаемый символ либо помещается в выходной буфер сжимающего кодера как есть (со специальным флагом, помечающим, что он не был сжат), либо группа из нескольких сжимаемых символов заменяется ссылкой на совпадающую с ней группу из уже закодированных символов. Поскольку восстановление сжатых таким образом данных выполняется очень быстро, такой подход часто используется для создания самораспаковывающихся программ.
- Для каждой сжимаемой последовательности символов однократно либо в каждый момент времени собирается статистика её встречаемости в кодируемых данных. На основе этой статистики вычисляется вероятность значения очередного кодируемого символа (либо последовательности символов). После этого применяется та или иная разновидность энтропийного кодирования, например, арифметическое кодирование или кодирование Хаффмана, для представления часто встречающихся последовательностей короткими кодовыми словами, а редко встречающихся — более длинными.
Методы сжатия без потерь
Полный список смотрите в Категория:Сжатие данных
Многоцелевые
- Кодирование длин серий — простая схема, дающая хорошее сжатие данных, которые содержат много повторяющихся значений
- LZW — используется в gif и во многих других.
- Deflate — используется в gzip, усовершенствованной версии zip и как часть процесса сжатия PNG.
- LZMA — используется в 7-zip.
Сжатие аудио
- Apple Lossless — ALAC (Apple Lossless Audio Codec)
- Audio Lossless Coding — также известен как MPEG-4 ALS
- Direct Stream Transfer — DST
- Dolby TrueHD
- DTS-HD Master Audio
- Free Lossless Audio Codec — FLAC
- Meridian Lossless Packing — MLP
- Monkey’s Audio — Monkey’s Audio APE
- OptimFROG
- RealPlayer — RealAudio Lossless
- Shorten — SHN
- TAK — (T)om’s verlustfreier (A)udio (K)ompressor (нем.)
- TTA — True Audio Lossless
- WavPack — WavPack lossless
- WMA Lossless — Windows Media Lossless
Сжатие графики
- ABO — Adaptive Binary Optimization
- BTPC
- CALIC
- CREW
- CTW
- DPCM
- GIF — (без потерь только для изображений, содержащих не более 256 цветов)
- JBIG2 — (с потерями или без ч/б изображений)
- Lossless JPEG — (расширение стандарта сжатия JPEG, обеспечивающее сжатие без потерь)
- JPEG-LS — (стандарт сжатия без потерь/почти без потерь)
- JPEG 2000 — (в режиме сжатия без потерь)
- LOCO-I
- MRP
- PGF — Progressive Graphics File (сжатие с/без потерь)
- PNG — Portable Network Graphics
- PWC
- TIFF — (исключая режимы сжатия с потерями)
- TMW
- Truevision TGA
- HD Photo — (включая метод сжатия без потерь)
- FLIF — Free Lossless Image Format
Сжатие видео
- Animation codec
- CamStudio Video Codec
- CorePNG
- FFV1
- Huffyuv — ограничен YUY2 и RGB, не совместим с ffvhuff, оригинальный не обновлялся с 2002 года
- FFvhuff — улучшенный по сжатию huffyuv, поддерживает ещё YV12, обратно совместим с исходным кодеком
- Lagarith
- LCL
- MSU Lossless Video Codec
- Qbit Lossless Codec
- SheerVideo
- TSCC — TechSmith Screen Capture Codec
- Сжатие с использованием вейвлет
- Motion JPEG 2000
Сжатие текстов
PPM — архиватор HA (автор Harry Hirvola), использующий алгоритм PPM, известен высокой степенью сжатия на текстовых файлах; по этому параметру он превосходил первые версии появившегося несколько лет спустя RAR. Поэтому популярные в конце 90-х годов компакт-диски наподобие «Библиотека в кармане» использовали именно HA.
Сжатие с потерями
Такой способ уменьшает размер файла, удаляя ненужные биты информации. Чаще всего встречается в форматах изображений, видео и аудио, где нет необходимости в идеальном представлении исходного медиа. MP3 и JPEG — два популярных примера. Но сжатие с потерями не совсем подходит для файлов, где важна вся информация. Например, в текстовом файле или электронной таблице оно приведёт к искажённому выводу.
MP3 содержит не всю аудиоинформацию из оригинальной записи. Этот формат исключает некоторые звуки, которые люди не слышат. Вы заметите, что они пропали, только на профессиональном оборудовании с очень высоким качеством звука, поэтому для обычного использования удаление этой информации позволит уменьшить размер файла практически без недостатков.
Хакатон Tour.Hack
Ивент перенесён на 26–27 сентября, Новосибирск, беcплатно
tproger.ru
События и курсы на tproger.ru
Аналогично файлы JPEG удаляют некритичные части изображений. Например, в изображении с голубым небом сжатие JPEG может изменить все пиксели на один или два оттенка синего вместо десятков.
Чем сильнее вы сжимаете файл, тем заметнее становится снижение качества. Вы, вероятно, замечали такое, слушая некачественную музыку в формате MP3, загруженную на YouTube. Например, сравните музыкальный трек высокого качества с сильно сжатой версией той же песни.
При сохранении в формате с потерями, вы зачастую можете установить уровень качества. Например, у многих графических редакторов есть ползунок для выбора качества JPEG от 0 до 100. Экономия на уровне 90 или 80 процентов приводит к небольшому уменьшению размера файла с незначительной визуальной разницей. Но сохранение в плохом качестве или повторное сохранение одного и того же файла в формате с потерями ухудшит его.
Посмотрите на этот пример.
Оригинальное изображение, загруженное с Pixabay в формате JPEG. 874 КБ:
Результат сохранения в формате JPEG с 50-процентным качеством. Выглядит не так уж плохо. Вы можете заметить артефакты по краям коробок только при увеличении. 310 КБ:
Исходное изображение, сохранённое в формате JPEG с 10-процентным качеством. Выглядит ужасно. 100 КБ:
Где используется сжатие с потерями
Как мы уже упоминали, сжатие с потерями отлично подходит для большинства медиафайлов
Это крайне важно для таких компаний как Spotify и Netflix, которые постоянно транслируют большие объёмы информации. Максимальное уменьшение размера файла при сохранении качества делает их работу более эффективной
Методы сжатия данных с потерями (примеры)
Компрессия изображений
- Снижение глубины цвета
- Фрактальное сжатие
- Сжатие на основе предсказателей
- JPEG-LS
- ДИКМ
- Иерархическая сеточная интерполяция
- CALIC
- JPEG
-
Вэйвлетная компрессия
- JPEG 2000
- DjVu
-
Дифференциальное сжатие
Сжатие изображений на базе дифференциального анализа
Компрессия видео
- Motion JPEG
- Flash (поддерживает Motion JPEG)
- H.261
- H.263
- H.264
- H.265
- MNG (поддерживает Motion JPEG)
- MPEG-1 Part 2
- MPEG-2 Part 2
- MPEG-4 Part 2
- Ogg Theora (отличается отсутствием патентных ограничений)
- Sorenson video codec (англ.)
- VC-1 — открытая спецификация для формата WMV (Microsoft)
Музыка
- MP3 — Определён спецификацией MPEG-1
- Ogg Vorbis (отличается отсутствием патентных ограничений и более высоким качеством)
- AAC, AAC+ — существует в нескольких вариантах, определённых спецификациями MPEG-2 и MPEG-4, используется, например, в Apple
- eAAC+ — формат, предлагаемый Sony, как альтернатива AAC и AAC+
- Opus
- Musepack
- WMA — собственность Microsoft
- ADPCM
- ATRAC
- Dolby AC-3
- DTS
- MPEG-1 Audio Layer II
- VQF
Речь
- CELP
- G.711
- G.726
- HILN (англ.)
- Speex (отличается отсутствием патентных ограничений)
- iLBC (Кодек со свободными условиями лицензирования)
Проблемы во время сжатия файлов
Бесполезно конвертировать формат с потерями в формат без потерь. Это пустая трата пространства. Скажем, у вас есть MP3-файл весом в 3 МБ. Преобразование его в FLAC может привести к увеличению размера до 30 МБ. Но эти 30 МБ содержат только те звуки, которые имел уже сжатый MP3. Качество звука от этого не улучшится, но объём станет больше.
Также стоит иметь в виду, что преобразовывая один формат с потерями в аналогичный, вы получаете дальнейшее снижение качества. Каждый раз, когда вы применяете сжатие с потерями, вы теряете больше деталей. Это становится всё более и более заметно, пока файл по существу не будет разрушен. Помните также, что форматы с потерями удаляют некоторые данные и их невозможно восстановить.