Меню

Flac сжатие – В Dropbox разработали алгоритм lossless-сжатия для файлов H.264 и JPEG / Habr

Формат сжатия FLAC

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

В первой группе наиболее популярным является wav, во второй – старичок mp3, хотя уже сдающий понемногу свои позиции более молодому и продвинутому и на мой взгляд намного лучшему Ogg Vorbis. Обычно большинство пользователей используют только эти форматы: wav чтобы сохранить оригинальное звучание, но в этом случае за качество приходится платить дисковым пространством, а mp3 (ogg) просто для сбора коллекции, в этом случае ситуация с точностью на оборот. Но оказывается есть еще третья “золотая ” середина — форматы обеспечивающие сжатие БЕЗ потери качества и при чем насчитывается их уже около десятка. Об одном из них, по моему мнению, самом перспективном мы и поговорим в данной статье. Имя ему FLAC (free lossless audio codec) т.е. свободный аудиокодек, обеспечивающий сжатие без потерь домашняя страница проекта http://www.sourceforge.net/projects/flac/. Итак начнем, пожалуй с условий лицензирования. FLAC относится к категории public domain т.е. за разработчиками остается право устанавливать спецификации и сертифицировать продукты на совместимость. Вот и все в принципе ограничения. Гарантируется, что ни сам формат, ни один из реализованных методов кодирования и раскодирования не запатентованы (и не будут в будущем), что позволяет без проблем использовать данный формат для любых целей не боясь преследования. Исходные тексты библиотек доступны по лицензии LGPL, а утилиты и плагины по GPL. Как видите разработчики понимают, что на такого вида продукции заработать трудно и пошли путем открытого формата, что как показывают многочисленные примеры благоприятно влияют на конечное качество продукта. FLAC распространяется для множества платформ: Unix (Linux, *BSD, Solaris), Windows, Mac OS X и не забыты даже BeOS и OS/2.

Итак, FLAC сжимает файлы без потерь. При кодировании данных не происходит потеря информации, поэтому и декодируемый аудиофайл абсолютно идентичен исходному. Формат разработан для сжатия аудиоданных (используется то что аудиоданные имеют высокий порядок корреляции между сэмплами.), но так как алгоритм работы напоминает zip и разработчики изначально не вложили ограничений на вид исходных данных, то теоретически можно сжимать и любые другие данные, но размер правда может не сильно отличаться от оригинального. Формат изначально задумывался как расширяемый поэтому возможно добавление новых возможностей без потери обратной совместимости. FLAC является потоковым форматом, что достигается разбиением данных на множество блоков, которые могут иметь разный размер, хотя имеющиеся кодеки используют блоки только постоянного размера. Так как каждый блок кодируется отдельно, то изменяя размер блока при кодировании можно добиться различной длины выходного файла т.к. чем меньше размер блока тем их соответственно больше и увеличивается количество служебной информации. Размер блока определяется от 16 до 65535 семплов, что покрывает оптимальные размеры для всех возможных аудиоданных (музыка, речь). При этом каждый блок полностью не зависим от предыдущего. Чтобы определить возможные ошибки при передаче файла, для каждого фрейма (закодированного блока) вычисляется 16-битная контрольная сумма. Целостность на дальнейшем этапе подтверждается подписью MD5 несжатых данных, которая находится в заголовке и может быть проверена при воспроизведении, декодировании или с помощью тестирования. К тому же кодер имеет режим работы, при котором кодируемые данные на лету декодируются и сравниваются с оригиналом при наличии ошибок работа прекращается. Разбитые на блоки данные передаются на стадию прогнозирования по одному подблоку. Каждый подблок кодируется в подфрейм независимо, а позже они объединяются во фрейм. Так как каждый канал кодируется отдельно, это означает, что один канал стерео фрейма может сжиматься как постоянный подфрейм, а второй как LPC подфрейм. У каждого фрейма есть заголовок, состоящий из кода синхронизации, информации о фрейме (размер блока, частота дискретизации, количество каналов и т.п.) и восьмибитной контрольной суммы. Также в заголовке содержится либо номер первого сэмпла во фрейме относительно всего потока (для потоков с изменяющимся размером блока) или номер фрейма (для потоков с постоянным размером блока). Это позволяет производить быстрый и точный поиск. Далее следуют закодированные подфреймы (по одному на каждый канал) и, наконец, фрейм, дополненный нулями до границы байта. Каждый подфрейм имеет свой заголовок, определяющий способ его декодирования. Так как левый и правый каналы в большинстве случаев содержать часть одинаковой информации, то используется метод межканальной декорреляции, которая может быть четырех различных видов, а кодер подбирает его индивидуально для каждого фрейма:

  • Независимое. Левый и правый каналы кодируются независимо.
  • Разностное. Левый и правый канал преобразовываются в средний и остаточный каналы. Средний канал — это среднее значение левого и правого сигналов, а остаточный — разница между ними (левый минус правый).
  • Левостороннее. Кодируется левый и остаточный каналы.
  • Правоостороннее. Кодируется правый и остаточный каналы.

Для прогнозирования используются четыре различных метода моделирования входного сигнала (дословный, постоянный, постоянный линейный предиктор LPC и линейное прогнозирование FIR). Чем они отличаются, смотрите на сайте. И, наконец для кодирования остаточного (ошибочного) сигнала доставшегося от стадии прогнозирования (который также необходимо учесть для того чтобы избежать потерь) используются два похожих метода с использованием кодов Райса. Причем эти методы не являются догмой можно при желании использовать и свои методы кодирования. Более того, FLAC допускает изменение метода кодирования остатков от блока к блоку и даже в пределах канала в блоке. Одной из целей проекта являются низкие аппаратные требования, чтобы обеспечить декодирование в реальном времени даже на старых компьютерах. Кроме этого есть два пункта которые разработчики не будут и не хотят реализовывать (хотя если кто то и собирается, то пожалуйста, но совместимость с оригиналом в этом случае не гарантируется). Это сжатие с потерями и реализация защиты от копирования в любом виде.

Итак, с особенностями немного разобрались, теперь давайте перейдем к практике. Все примеры привожу для платформы Linux, но для заинтересовавшихся пользователей других операционных систем все необходимые ссылки найдете на сайте. Поставка FLAC включает:

•libFLAC, библиотеку для базовых кодеров и декодеров и интерфейса метаданных;

•libFLAC++, объектную оболочку для libFLAC;

•libOggFLAC и libOggFLAC++, обертки кодеров и декодеров libFLAC и libFLAC++, соответственно, для доступа к потокам FLAC в контейнере Ogg;

•flac, утилиту командной строки, выполняющую сжатие и распаковку файлов .flac;

•metaflac, утилиту командной строки для редактирования метаданных в файлах .flac;

Плюс ко всему в комплект входят плагины для различных проигрывателей и библиотеки для работы с кодировками и ID тегами.

В первую очередь нас интересует утилита flac, большинство параметров по умолчанию базового кодера оптимизированы для CD-аудио (т.е. 44.1кГц, 2 канала, 16 бит на сэмпл), хотя конечно все это конечно можно изменить, установив соответствующие опции.

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

[sergej@grinder sound]$ flac test.wav

options: -P- -b 4608 -m -l 8 -q 0 -r 3,3
teat.wav: wrote 29986315 bytes, ratio=0,589

В результате в текущем каталоге образуется файл с таким же именем, но расширением .flac. Обратите внимание на строку options которая показывает на действительно используемые опции кодирования. Получить краткую справку можно введя просто flac, более подробную с дополнительной опцией –help. По умолчанию используется уровень сжатия 5, который можно изменить добавив -# (где # цифры от 0 (быстрее) до 8 (лучше)).

[sergej@grinder sound]$ flac -8 test.wav

Имя выходного файла можно задать явно воспользовавшись ключом . Для декодирования файла flac используется ключ -d.

[sergej@grinder sound]$ flac -d test.flac

Протестировать имеющийся файл можно с помощью опции -t, а для тех кто хочет получить информацию о каждом фрейме запустите утилиту с опцией для анализа. Это основные опции с помощью остальных с исходным файлом можно проделать если не все то многое. Так можно добавить опции для проверки, установить кодек, задать точки поиска, добавить комментарии и еще много всего. Все их можно посмотреть в очень подробной документации идущей в комплекте.

Утилита metaflac позволяет оперировать метаданными файла, проверить контрольную сумму, размер блока и фрейма (максимальный и минимальный), работать с тегами в формате Ogg Vorbis.

[sergej@grinder flac]$ metaflac —show-md5sum —show-min-framesize —show-sample-rate —show-total-samples test.flac

01762464f61bdf7ef35f268cf6f6e80a # MD5 сумма

16 # минимальный размер фрейма

44100 # скорость дискретизации

12723732 # общее количество семплов

А вот так можно скопировать тег из файла ogg и вставить его в flac.

[sergej@grinder flac]$ vorbiscomment -l —raw file.ogg | metaflac —import-vc-from=- —no-utf8-convert file.flac

Хотелось бы немного сравнить данный формат с наиболее распространенными. Для теста использовалась композиция общей протяженность 4 мин 48 сек. При кодировании во всех кодеках использовался режим по-умолчанию, как наиболее часто применяемый. При кодировании mp3 использовался по моему мнению самый лучший кодек Lame, кодирование происходило с постоянным битрейтом (режим по-умолчанию). Результат вы видите в таблице, он в особых комментариях не нуждается.

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

WAV                                            48.5                                   —

Mp3 (LAME 128 кб\с)             4.4                              2 мин

Ogg ср. 112 кб\с                       3.9                               4.08мин

FLAC                                            28.6                         0.48 мин

 

Дополнительно я попытался, как мог сравнить качество получившегося аудиофайла. Конечно, я признаю, что такое тестирование несет элемент субъективности и по всем правилам должно производится как можно большим количеством участников и в «слепую», иначе тестирующий уже заранее «знает» о недостатках. Так что это все мое личное мнение, да и не добивался, если честно кристально чистого эксперимента. Цели ведь совсем другие. Так вот какой бы ни был хороший кодек Lame, mp3 отдыхает даже по сравнению с Ogg Vorbis, такое ощущение, что недодали мощи и глубины, даже итоговый размер получился чуть больше ogg, но выиграл в скорости кодирования у последнего почти вдвое. К слову у меня ящик с трехсотым Целероном на борту и под Windows с ее графическими утилитами на кодирование этого же файла уходит времени приблизительно на 50 процентов больше. Ogg Vorbis понравился хорошим даже сказал бы отличным звучанием и даже при таком низком битрейте практически не слышно отличий во всяком случае режущих слух. А вот FLAC как и wav отличить от оригинала невозможно, но первый как видите занимает объем ровно в два раза меньший (опять же по-умолчанию, помните). Так что для тех, кому необходимо оригинальное звучание и при этом есть желание сэкономить место на диске FLAC и будет как раз тем, что доктор прописал. Теперь чем же все-таки его слушать. Как я говорил, доступны плагины для многих проигрывателей. a.

Вот и все. Viva OpenSource!

Сжатие без потерь — Википедия

У этого термина существуют и другие значения, см. Сжатие.

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

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

Сжатие без потерь используется, когда важна идентичность сжатых данных оригиналу. Обычный пример — исполняемые файлы и исходный код. Некоторые графические файловые форматы (например PNG) используют только сжатие без потерь, тогда как другие (TIFF, FLIF или GIF) могут использовать сжатие как с потерями, так и без потерь.

Легко доказывается теорема.

Для любого N > 0 нет алгоритма сжатия без потерь, который:

  1. Любой файл длиной не более N байт или оставляет той же длины, или уменьшает.
  2. Уменьшает некоторый файл длиной не более N хотя бы на один байт.

Доказательство. Не ограничивая общности, можно предположить, что уменьшился файл A длины ровно N. Обозначим алфавит как Σ{\displaystyle \Sigma }. Рассмотрим множество Σ0∪Σ1∪…∪ΣN−1∪{A}{\displaystyle \Sigma ^{0}\cup \Sigma ^{1}\cup \ldots \cup \Sigma ^{N-1}\cup \{A\}}. В этом множестве 2560+2561+…+256N−1+1{\displaystyle 256^{0}+256^{1}+\ldots +256^{N-1}+1} исходных файлов, в то время как сжатых не более чем 2560+2561+…+256N−1{\displaystyle 256^{0}+256^{1}+\ldots +256^{N-1}}. Поэтому функция декомпрессии неоднозначна, противоречие. Теорема доказана.

Впрочем, данная теорема нисколько не бросает тень на сжатие без потерь. Дело в том, что любой алгоритм сжатия можно модифицировать так, чтобы он увеличивал размер не более чем на 1 бит: если алгоритм уменьшил файл, пишем «1», потом сжатую последовательность, если увеличил — пишем «0», затем исходную.

Так что несжимаемые фрагменты не приведут к бесконтрольному «раздуванию» архива. «Реальных» же файлов длины N намного меньше, чем 256N{\displaystyle 256^{N}} (говорят, что данные имеют низкую информационную энтропию) — например, маловероятно, чтобы буквосочетание «щы» встретилось в осмысленном тексте, а в оцифрованном звуке уровень не может за один семпл прыгнуть от 0 до 100 %. К тому же за счёт специализации алгоритмов на некоторый тип данных (текст, графику, звук и т. д.) удаётся добиться высокой степени сжатия: так, применяющиеся в архиваторах универсальные алгоритмы сжимают звук примерно на треть (в 1,5 раза), в то время как FLAC — в 2,5 раза. Большинство специализированных алгоритмов малопригодны для файлов «чужих» типов: например, звуковые данные плохо сжимаются алгоритмом, рассчитанным на тексты.

В общих чертах смысл сжатия без потерь таков: в исходных данных находят какую-либо закономерность и с учётом этой закономерности генерируют вторую последовательность, которая полностью описывает исходную. Например, для кодирования двоичных последовательностей, в которых много нулей и мало единиц, мы можем использовать такую замену:

00 → 0
01 → 10
10 → 110
11 → 111

В таком случае шестнадцать битов

00 01 00 00 11 10 00 00

будут преобразованы в тринадцать битов

0 10 0 0 111 110 0 0

Такая подстановка является префиксным кодом, то есть обладает такой особенностью: если мы запишем сжатую строку без пробелов, мы всё равно сможем расставить в ней пробелы — а значит, восстановить исходную последовательность. Наиболее известным префиксным кодом является код Хаффмана.

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

Статистические модели алгоритмов для текста (или текстовых бинарных данных, таких как исполняемые файлы) включают:

Алгоритмы кодирования через генерирование битовых последовательностей:

256^{N}Список примеров в этом разделе не основывается на авторитетных источниках, посвящённых непосредственно предмету статьи или её раздела.Добавьте ссылки на источники, предметом рассмотрения которых является тема настоящей статьи (или раздела) в целом, а не отдельные элементы списка. В противном случае раздел может быть удалён.

Полный список смотрите в Категория:Сжатие данных

Многоцелевые[править | править код]

  • Кодирование длин серий — простая схема, дающая хорошее сжатие данных, которые содержат много повторяющихся значений
  • LZW — используется в gif и во многих других.
  • Deflate — используется в gzip, усовершенствованной версии zip и как часть процесса сжатия PNG.
  • LZMA — используется в 7-zip.

Сжатие аудио[править | править код]

Сжатие графики[править | править код]

  • 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 — (исключая режимы сжатия с потерями[1])
  • TMW
  • Truevision TGA
  • HD Photo — (включая метод сжатия без потерь)
  • FLIF — Free Lossless Image Format

Сжатие видео[править | править код]

Сжатие текстов[править | править код]

  • PPM — архиватор HA (автор Harry Hirvola), использующий алгоритм PPM, известен высокой степенью сжатия на текстовых файлах; по этому параметру он превосходил первые версии появившегося несколько лет спустя RAR. Поэтому популярные в конце 90-х годов компакт-диски наподобие «Библиотека в кармане» использовали именно HA.
  • Семейство алгоритмов Лемпеля-Зива
  • RLE (Run-length encoding — Кодирование длин серий)
  • универсальные — Zip, 7-Zip, RAR, GZip, PAQ и др.
  • звук — FLAC (Free Lossless Audio Codec), Monkey’s Audio (APE), TTA (True Audio), TTE, LA (LosslessAudio), RealAudio Lossless, WavPack и др.
  • изображения — BMP, PNG
  • видео — Huffyuv.

Формат Lossless — что такое? Сжатие без потерь :: SYL.ru

Истинные меломаны уже знают, что музыка в привычном формате МР3 не может порадовать детализацией и правдивостью звучания. Особенно все огрехи этого формата хорошо слышны на дорогой и качественной аппаратуре. Но можно услышать (вернее, не услышать существенных сегментов) и на акустических системах среднего уровня. Поэтому все больше ценителей качественного звука используют Lossless-формат аудиозаписей. Что это за зверь и как его использовать? Об этом и поговорим.

Что такое Lossless?

Lossless Data Compression с английского переводится как «сжатие данных без потери качества». Проще говоря, звук из такого файла обладает всеми особенностями и преимуществами оригинальной звуковой дорожки. Однако есть и капля дегтя: размер файлов без потери качества, как правило, куда больше, чем у привычных (и ущербных) МР3. Но качество звука того стоит. Есть несколько самых популярных форматов. И все их мы разберем. Но сначала немного об истории данной технологии кодирования. Это полезно знать в плане саморазвития.

lossless что такое

Lossless-формат был известен еще в девяностых прошлого столетия. Но тогда он использовался только профессионалами: студийными звукорежиссерами, «звукачами» на радиостанциях и федеральных телеканалах. Такая узкоспециальная распространенность данной технологии связана с тем, что в те времена домашние компьютеры были большой редкостью. Редкостью очень дорогой и весьма слабенькой. Мощностей стандартного ПК 90-х не хватило бы даже на то, чтобы проиграть такой файл. Не говоря уже о кодировании. Широкое распространение Lossless получил после буйных «нулевых».

Формат FLAC

Вероятно, это самый популярный контейнер для такой штуки, как Lossless-формат. Связано это с тем, что FLAC является полностью свободным от лицензий. Кодек выполнен на базе свободного программного обеспечения. Это делает его применение неограниченным. Это самый популярный формат Lossless. Что такое «самый популярный»? Это значит, что подавляющее количество музыки в формате без потери качества на торрент-трекерах находится именно во FLAC. Это ли не показатель популярности? Прелесть этого формата заключается в том, что он обеспечивает точно такое же качество звука, как и пресловутый WAV, но отличается от него гораздо меньшими размерами. Проще говоря, FLAC занимает меньше места на жестком диске, в отличие от WAV. И это делает его наиболее приемлемым для создания музыкальной библиотеки.

lossless формат

Формат ALAC

А вот эта штука будет знакома только владельцам устройств от компании Apple. Именно этот производитель создал сей формат и заставил своих клиентов использовать только его в iPhone и MacBook. Его главное отличие от FLAC заключается в том, что распространяется он только по лицензии от «яблочников». А это накладывает определенные ограничения в его использовании. А по качеству звука различий нет, так как используется практически идентичный алгоритм кодирования. Он не настолько популярен, как наш предыдущий герой, именно потому, что является проприетарным форматом Lossless. Что такое «проприетарный»? Это значит, распространяемый по лицензии от конкретного производителя с определенным количеством ограничений.

lossless музыка

Формат APE

Этот формат можно уже назвать устаревшим, так как он в последние годы перестал развиваться. Назвать его свободным нельзя, так как он тоже распространяется по проприетарной лицензии. Главным недостатком этого кодека является то, что нормально он поддерживается только на ПК или ноутбуках под управлением операционной системы «Виндовс» от «Майкрософт». А вот многие дистрибутивы «Линукс» не умеют читать музыку в АРЕ. Только после установки определенных «костылей» можно воспроизвести сей формат. Возможно, именно поэтому АРЕ и не стал настолько популярным, как два предыдущих формата.

lossless программа

Чем читать Lossless?

Lossless-музыка, конечно, звучит превосходно. Но у многих владельцев ПК и ноутбуков возникает вполне закономерный вопрос о том, чем читать такой экзотический формат. Проблем с этим нет. По крайней мере, на «Виндовс». Наиболее качественно получается воспроизвести FLAC, ALAC или АРЕ с помощью плеера Foobar 2000. Он правильно воспроизводит файлы и адекватно считывает теги. Однако его минималистический и строгий интерфейс может отпугнуть среднестатистического пользователя. К тому же русского языка «из коробки» нет. Обычному юзеру нужно что-нибудь попроще. И такой вариант есть. Всеми любимый и нереально популярный AIMP тоже весьма успешно справляется с форматами без потери качества. С этим плеером нет ничего проще, чем воспроизвести Lossless. Программа автоматически разобьет образ диска на отдельные файлы при помощи файла CUE и правильно отобразит все теги.

lossless сжатие без потерь

На операционных системах семейства «Линукс» формат без потери качества может читать практически любой проигрыватель после установки дополнительных «костылей» (для АРЕ). Без всяких добавок читает сей неудобный формат только «всеядный» DeadBeef. Но с остальными форматами проблем нет. Такие комбайны, как «Клементин», Audacious и другие запросто с ними справляются. Даже те проигрыватели, что входят в состав дистрибутива, умеют работать с лосслесс-форматами.

Что касается МакОС, то здесь выбор невелик. Все форматы без потери качества читает только VOX. Остальные плееры зациклены на проприетарном ALAC. Такова политика компании из Купертино. Проиграть FLAC или WAV стандартными системными средствами не получится. Однако в AppStore есть некоторое количество приложений сторонних разработчиков, которые могут сделать МакОС «всеядной». К таким приложениями и относится небезызвестный VOX, который напоминает сразу и AIMP и Winamp. Последний, конечно, легенда, но под МакОС его нет. Как и под «Линукс».

Lossless в видео

Lossless-музыка — это хорошо. Но как быть любителям качественных фильмов и тем, у кого имеется целый домашний кинотеатр? С этим тоже проблем нет. Современные технологии вполне могут позволить записать звуковую дорожку фильма в формате без потери качества. Только технология немного другая. Да и формат тоже. В качественных фильмах на Blu-Ray (или их «рипах») используется формат звука DTS. От вышеперечисленных форматов он отличается тем, что может содержать в себе неограниченное количество каналов. Именно поэтому он используется в киноиндустрии. Там важен полноценный объемный звук. Так что в кино Lossless-формат тоже используется. Если бы не использовался — это выглядело бы как минимум странно.

кино lossless

Сегодня многие плееры запросто воспроизводят фильмы с таким звуком. На «Виндовс» самыми популярными решениями являются КМР, «ПотПлеер», «ГОМ плеер» и другие. Под «Линуксом» все проигрыватели справляются с этой задачей: VLC, SMPlayer и так далее. Под МакОС тоже есть огромное количество плееров такого типа. Включая стандартный, поставляющийся с самой операционной системой. Из бытовых проигрывателей адекватно справляются с этой задачей только «Блю-Рэй»-плееры. Обычные ДВД здесь никак не подойдут. Однако они и не нужны. Современные телевизоры (даже без системы «Смарт ТВ») способны считать файл с таким фильмом прямо с USB-накопителя или внешнего жесткого диска. Причем со звуком все будет в порядке.

Чем можно «рипнуть» диск в Lossless?

Извлекать полную информацию из аудиодиска умеют многие программы, но нужна соответствующая аппаратура для формата Lossless. Сжатие без потерь возможно только при наличии звуковой карты хотя бы среднего уровня. Встроенные «пищалки» никак не подойдут: налицо передискретизация, всевозможные искажения, неправильная сцена и прочее. Для начала следует обзавестись оборудованием. А «рипать» диск можно с помощью того же AIMP. Он прекрасно справляется с такой задачей. Есть и специализированные программы с кучей настроек. Но они сложны и не настолько эффективны. Примером может служить Easy CD-DA Extractor. Интерфейс программы перегружен настройками, непонятными обычному пользователю. Но свое дело утилита знает. «Рипы» получаются качественными.

lossless data compression

Заключение

Итак, мы разобрали технологию Lossless. Что такое «лосслесс», уже понятно. Также вполне ясно, как использовать файлы в таком формате. Стоит только напомнить, что для воспроизведения музыки в таком формате потребуется соответствующая аппаратура. На встроенной звуковой карте и колонках-пищалках никакого различия с МР3 заметить не удастся. Нужны хотя бы хорошие наушники. Вот тогда прогресс будет заметен. А еще лучше — приобрести внешнюю звуковую карту. Но это уже совсем другая история.

НОУ ИНТУИТ | Лекция | Сжатие аудиоинформации без потерь

Аннотация: Эта лекция посвящена форматам сжатия аудиоинформации без потерь.

Сжатие без потерь

Кодеки, сжимающие звук без потерь, стали пользоваться популярностью в мире портативных MP3-плееров сравнительно недавно. Дело в том, что этим кодекам не под силу такие огромные степени сжатия, которыми могут похвастаться кодеки, сжимающие звук с потерями качества. Большие объемы памяти стали широко доступны пользователям MP3-плееров лишь последние года три-четыре – и с приходом больших объемов памяти в MP3-плееры, сжатие музыки без потерь стало популярным. Конечно, те, кто хотел слушать музыку без потерь качества, делали это всегда (например, с помощью Audio CD-проигрывателей), а в наше время все желающие (естественно, при наличии поддержки соответствующих кодеков их плеерами) могут попробовать Lossless-кодеки в действии.

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

Ситуация с поддержкой Lossless-кодеков в настоящее время такова, что наиболее широко распространена поддержка кодека ALAC, который имеет непосредственное отношение к фирме Apple и ее плеерам. Остальные же кодеки поддерживаются пока немногими плеерами, иногда для того, чтобы плеер поддерживал кодек, требуется перепрошивка плеера, причем, пожалуй, наиболее известная прошивка для плееров, поддерживающая Lossless-кодеки, RockBox – это альтернативная, а никак не официальная прошивка.

В ходе работы с Lossless-кодеками вам могут встретиться так называемые Cue-файлы или индексные карты файлов. Cue-файлы распространяются, например, вместе с FLAC или APE-файлами, реже – с MP3 и WAV-файлами, которые представляют собой один большой (порядка 300 Мб) файл, в котором хранится целый альбом. Cue-файл – содержит в себе информацию о разбиении большого файла на треки и о названиях этих треков. С отдельными файлами работать удобнее, однако, даже если к вам в руки попадет, скажем, большой FLAC-файл с CUE-файлом, на основе информации, содержащейся в CUE-файле, исходный файл можно разделить на отдельные треки – мы рассмотрим ПО, которое может решить эту задачу.

Начнем описание форматов сжатия данных без потерь с популярного формата FLAC.

FLAC

FLAC (Free Lossless Audio Codec) – это формат сжатия аудиоданных без потерь, который разработала Xiph.Org Foundation. Это абсолютно бесплатный формат, которым могут пользоваться все желающие.

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

Формат FLAC разрабатывался как поточный – информация во FLAC-файле разбита на фреймы (кадры), каждый из которых может быть раскодирован отдельно от других фреймов.

Как правило, FLAC способен сжать исходный файл, например, Audio CD-качества на 40-50%. В итоге битрейт полученной записи оказывается равным порядка 800 Кбит/c.

В формате FLAC предусмотрена возможность сохранения CD-дисков таким образом, что при необходимости можно полностью воссоздать исходный диск – это очень удобно для тех, кто хочет создать цифровые копии своих CD с возможностью последующего восстановления.

Скорость кодирования и декодирования FLAC-файлов неодинакова. Скорость кодирования зависит от уровня сжатия и от скорости системы – на высоких уровнях сжатия она может быть достаточно медленной. Однако раскодирование ведется очень быстро – с ним без труда могут справиться современные MP3-плееры.

За счет возможности бесплатного свободного использования, с FLAC можно работать на базе практически любой современной ОС, все больше MP3-плееров поддерживают этот формат.

Кодирование в формат FLAC

Скачать утилиту для кодирования FLAC-файлов можно на http://flac.sourceforge.net/download.html/. Она включает в себя сам кодек и так называемый Frontend – программную оболочку для кодека. Размер дистрибутива занимает порядка 2,5 Мб. Работа с кодеком проста: вы добавляете интересующие вас файлы в окно программы (рис. 4.1.) с помощью кнопки Add Files (Добавить файлы), настраиваете опции кодирования и нажимаете кнопку Encode (Кодировать) – программа создает FLAC-файл.


Рис. 4.1. Окно FLAC Frontend

Давайте рассмотрим наиболее значимые установки кодека. Для начала остановимся на группе параметров Encoding Options (Параметры кодирования)

Параметр Level (Уровень) отвечает за уровень сжатия данных. Он может изменяться от 0 до 8. Чем больше уровень сжатия, тем, соответственно, меньше готовый файл, но больше время, необходимое для кодирования файлов. На быстрых компьютерах разница между Level 0 и Level 8 при кодировании, скажем, 30-мегабайтного WAV-файла может составить несколько секунд. Размер отличается примерно на 10% от исходного размера файла. Вам стоит поэкспериментировать с этим параметром на вашем ПК – возможно, если вы будете кодировать несколько сотен файлов, вы предпочтете меньший уровень сжатия большей скорости работы.

Параметр Verify (Проверить) предписывает кодеру проверку выходных файлов.

Параметр Add tags (Добавить теги) добавляет в готовый файл теги (например, они могут содержать название композиции, автора и т. д.) – настроить их можно, нажав на кнопку Tag Conf. (Настройка тегов).

Параметр Replaygain (Уровень проигрывания) добавляет в файлы параметр, указывающий на уровень громкости файла. Если установлен параметр Treat input files as one album (Обрабатывать входные файлы как один альбом) – все записи в альбоме будут звучать с одинаковой громкостью.

Группа параметров General Options (Общие параметры) содержит два параметра. Пожалуй, здесь следует отметить параметр OGG-Flac. Если этот параметр сброшен, то FLAC-данные упаковываются в стандартный FLAC-контейнер. Если вы планируете лишь прослушивать полученные FLAC-файлы, этот параметр можно не устанавливать, а если ваши планы на эти файлы более обширны – например, вы планируете редактировать их, использовать их для вставки в видеофильмы, лучше всего включить параметр Ogg-FLAC.

Параметр Output Directory (Выходная директория) содержит путь к директории, где будут содержаться выходные файлы.

В группе параметров Decoding options (Опции декодирования) есть параметр Dec. Through errors (Декодировать несмотря на ошибки) – установите его, если хотите декодировать какой-либо файл даже в том случае, если при декодировании возникают ошибки. Декодирование – процесс обратный кодированию – то есть декодировать вы можете FLAC-файлы, превратив их в WAV-файлы. Для декодирования, естественно, вам придется добавить в окно программы FLAC-файлы.

После того, как все настроено, достаточно нажать на кнопку Encode (Кодировать) для создания FLAC-файлов, либо, если вы хотите декодировать существующие FLAC-файлы – нажмите кнопку Decode (Декодировать).

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


Рис. 4.2. Кодируем FLAC-файлы с помощью ImTOO Audio Encoder

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

Что интересно, программа не поддерживает кодирование из формата FLAC – даже если упаковать FLAC-данные в поддерживаемый программой контейнер OGG, она, на этапе кодирования, сообщит об ошибке. Однако, как вы знаете, декодировать FLAC-файлы можно с помощью вышеописанной программы.

Разбиваем большие файлы на отдельные треки

Выше мы упоминали о том, что вам могут встретиться альбомы различных форматов, закодированные единым файлом с прилагающимся к этому файлу CUE-файлом, содержащим информацию о треках. Удобнее всего для использования разбивать такие файлы на отдельные треки (хотя и связка, например, FLAC+CUE вполне жизнеспособна). Для этого можете воспользоваться программой Cue Splitter. Это абсолютно бесплатная программа, которую можно скачать на http://www.enfis.it/. Размер дистрибутива – чуть больше 1 Мб. Программа (рис. 4.3.) имеет русифицированный интерфейс, вы без труда освоите ее.


Рис. 4.3. Cue Splitter

Главное, что нужно сделать, разрезая большой файл на части – это открыть файл командой Файл_Открыть CUE, после чего можно сразу же нажимать на кнопку Разрезать, либо сделать это чуть позже, предварительно настроив имена файлов.

Lossless — сжатие видео без потери качества


Вы, наверное, не раз слышали такой термин, как сжатие видео без потери качества. В англоязычной литературе такой тип сжатия называется — lossless compression.
Lossless compression-кодирование без потери качества. Видео сжатое lossless кодеком полностью идентично оригиналу. Грубо говоря, закодированное видео можно раскодировать и все будет, как и было. Ни один байт не потеряется.

Недостатком lossless компрессии является требование к месту на диске. Если исходное видео было 50 MB, то сконвертировав его с помощью lossless кодека вы получите несколько сотен мегабайт.

Как вы успели догадаться, помимо сжатия без потери качества, есть еще сжатие с потерей качества (Lossy compression). Таким способом жмут видеопоток все популярные кодеки (xvid, divx, x264 и многие другие).

Lossy compression — кодирование с потерей качества. По сжатому видео невозможно восстановить исходное. Информация о кадре потеряна. Фарш невозможно провернуть назад.

Для чего нужно сжатие без потери качества

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

  1. С помощью сторонней утилиты сконвертируем исходное видео в формат понятный для видеоредактора (например в mp4). Но в этом случае есть шанс потерять в качестве, так как любое (почти любое) преобразование видео из одного формата в другой ведет к ухудшению картинки, даже если вы отвели под это гигантский битрейт. Этот вариант нам не подходит, так как информация с телескопа ценная и вот так просто разбрасываться качеством картинки мы не имеем права. То есть, в данном случае мы отказываемся от Lossy кодека.
  2. Давайте преобразуем это видео не в широкораспространенный формат (mp4), а в другой. В тот, который сохранит все наши данные в первозданном виде. А полученное видео мы скормим видеоредактору. Для этого возьмем кодек Huffyuv. Как говорит Wikipedia этот кодек сжимает без потерь и сжатое видео полностью совпадает с исходным. Как вы уже поняли, Huffyuv относится к семейству Lossless кодеков, а это именно то, что нам нужно.

Как сжать видео без потери качества

Для того чтобы сконвертировать наше видео при помощи кодека Huffyuv мы возьмем самые распространенные бесплатные программы ffmpeg и mencoder. Они поддерживает кучу экзотических форматов и конечно же смогут закодировать кодеком Huffyuv.

FFmpeg

Что такое FFmpeg, где его скачать и как его установить я подробно расписал в этом руководстве.

После установки необходимо проверить поддерживает ли, скачанный вами ffmpeg кодек Huffyuv. Для этого выполните:

ffmpeg -codecs

Если на выходе будут вот такие строки:

DEV..S ffv1                 FFmpeg video codec #1
DEVI.S ffvhuff              Huffyuv FFmpeg variant

значит можно приступать к кодированию.

ffmpeg.exe -i input.mp4 -c:v huffyuv output.avi

Mencoder

Краткая информация об MEncoder приводится здесь. Свежую сборку под Windows можно найти на Sourceforge: http://mplayerwin.sourceforge.net/downloads.html

Проверим, поддержку кодека Huffyuv нашим mencoder.exe:

mencoder.exe -ovc help
C:\Users\admin\Downloads>mencoder.exe -ovc help
MEncoder Redxii-SVN-r38055-6.2.0 (x86_64) (C) 2000-2018 MPlayer Team
Using FFmpeg N-90642-gd64183ea5d (2018-04-10 02:36:11 +0200)
Compiled on 2018-04-10 09:11:12 EDT (rev. 1)

Available codecs:
   copy     - frame copy, without re-encoding. Doesn't work with filters.
   frameno  - special audio-only file for 3-pass encoding, see DOCS.
   raw      - uncompressed video. Use fourcc option to set format explicitly.
   nuv      - nuppel video
   lavc     - libavcodec codecs - best quality!
   xvid     - XviD encoding
   x264     - H.264 encoding

В отличии от ffmpeg, mencoder не показал нам наличие строки huffyuv в запросе на поддерживаемые кодеки. Но зато он выдал вот такую строчку:

lavc - libavcodec codecs - best quality!

А это то что нам надо, ибо huffyuf кодек сидит в библиотеке lavc. Поэтому можно кодировать mencoder’ом используя кодек huffyuv:

mencoder.exe input.mp4 -o output.avi -ovc lavc -lavcopts vcodec=huffyuv:format=422P -oac pcm

У неискушенного читателя может возникнуть вопрос. Зачем проверять ffmpeg и mencoder на поддержку тех или иных кодеков (в нашем, случае huffyuv)? Ведь эти инструменты объявлены универсальными и утверждается, что они поддерживают все возможные форматы кодирования мультимедиа. Дело в том, что существует много различных сборок ffmpeg и mencoder. Какие-то сборки поддерживают один кодек, но не поддерживают другой, другие наоборот. Можно собрать ffmpeg и mencoder таким образом, что они будут работать только с одним форматом данных (например h.265). Соответственно они  будут иметь очень маленький размер. Для чего это нужно? Ну может для всяких встраиваемых систем, типа Raspberry Pi или на WEB серверах (вдруг захочется свой YouTube запилить 🙂 ).

Сравнение

Попробуем сжать следующее видео без потери в качестве изображения:



Волны были выбраны не случайно, потому что для видеокодека нет ничего сложнее чем движение по всему кадру и наличие мелких частиц, хаотично летающих по всем направлениям.
Но прежде чем закодировать это видео с помощью кодека Huffyuv (сжатие видео без потери качества), мы сначала сделаем, кое что еще.
Бытует мнение, что если использовать стандартный Lossy кодек, например x264, но сказать ему использовать сколько угодно большой битрейт (пусть ни в чем себе не отказывает), то мы получим сжатие без потери качества. Давайте проверим:
ffmpeg -i Wave.mp4 -c:v libx264 -crf 0 -preset veryslow Wave-libx264-crf-0-ffmpeg.mp4

Здесь ключ «-crf 0» указывает на то, что для кодирования видеопотока кодек волен брать любой битрейт. В результате получили файл Wave-libx264-crf-0-ffmpeg.mp4 размером 600 MB. Размер полученного видео увеличился в 30 раз.

После этого сразу запустим кодирование с помощью huffyuv, чтобы получить видео без потери качества (Lossless кодирование):

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

А теперь сравним, полученные видео с оригиналом.

Сделаем cкриншот видео на 5-ой секунду и из всего кадра вырежем квадратик размером 256×256.


Исходное видео20MB
Для нахождения разницы между изображениями воспользуемся Imagemagick (мощный консольный редактор изображений):
magick.exe composite img1.png img2.png -compose difference diff.png

в данном случае мы вычли img2.png из img1.png и результат записали в diff.png

 

x264 -crf 0 lossy
Lossy с неограниченным битрейтом (libx264)800MB
huffyuv кодек
Lossless (huffyuv)1300MB
отличие оригинала от x264 кодека
diff = orig — libx264
отличие оригинала от x264 кодека
diff = orig — huffyuv

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

Huffyuv выступил на отлично. Черный квадрат указывает, что различия отсутствуют и оригинальная и закодированная картинки полностью идентичны.

Заключение

Подитожим вкратце основные преимущества/недостатки Lossless сжатия (сжатие видео без потери качества), на примере кодека Huffyuv:

  • работает быстро;
  • требует много места на диске 20MB mp4 превращаются в 1.3GB hufyyuv;
  • необходим для работы с ценными данными;
  • подходит для обмена данными между программами обработки видео, когда невозможно настроить frameserver (когда один видеоредактор передает несжатое видео другому видеоредактору без промежуточной записи на диск).

FLAC вам в руки!

10 лет назад 12 октября 2009 в 15:45