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 достаточно ввести команду без параметров с указанием только входного файла.
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) могут использовать сжатие как с потерями, так и без потерь.
Легко доказывается теорема.
|
Доказательство. Не ограничивая общности, можно предположить, что уменьшился файл 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
Такая подстановка является префиксным кодом, то есть обладает такой особенностью: если мы запишем сжатую строку без пробелов, мы всё равно сможем расставить в ней пробелы — а значит, восстановить исходную последовательность. Наиболее известным префиксным кодом является код Хаффмана.
Большинство алгоритмов сжатия без потерь работают в две стадии: на первой генерируется статистическая модель для входящих данных, вторая отображает входящие данные в битовом представлении, используя модель для получения «вероятностных» (то есть часто встречаемых) данных, которые используются чаще, чем «невероятностные».
Статистические модели алгоритмов для текста (или текстовых бинарных данных, таких как исполняемые файлы) включают:
Алгоритмы кодирования через генерирование битовых последовательностей:
Список примеров в этом разделе не основывается на авторитетных источниках, посвящённых непосредственно предмету статьи или её раздела.Добавьте ссылки на источники, предметом рассмотрения которых является тема настоящей статьи (или раздела) в целом, а не отдельные элементы списка. В противном случае раздел может быть удалён. |
Полный список смотрите в Категория:Сжатие данных
Многоцелевые[править | править код]
- Кодирование длин серий — простая схема, дающая хорошее сжатие данных, которые содержат много повторяющихся значений
- 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-формат был известен еще в девяностых прошлого столетия. Но тогда он использовался только профессионалами: студийными звукорежиссерами, «звукачами» на радиостанциях и федеральных телеканалах. Такая узкоспециальная распространенность данной технологии связана с тем, что в те времена домашние компьютеры были большой редкостью. Редкостью очень дорогой и весьма слабенькой. Мощностей стандартного ПК 90-х не хватило бы даже на то, чтобы проиграть такой файл. Не говоря уже о кодировании. Широкое распространение Lossless получил после буйных «нулевых».
Формат FLAC
Вероятно, это самый популярный контейнер для такой штуки, как Lossless-формат. Связано это с тем, что FLAC является полностью свободным от лицензий. Кодек выполнен на базе свободного программного обеспечения. Это делает его применение неограниченным. Это самый популярный формат Lossless. Что такое «самый популярный»? Это значит, что подавляющее количество музыки в формате без потери качества на торрент-трекерах находится именно во FLAC. Это ли не показатель популярности? Прелесть этого формата заключается в том, что он обеспечивает точно такое же качество звука, как и пресловутый WAV, но отличается от него гораздо меньшими размерами. Проще говоря, FLAC занимает меньше места на жестком диске, в отличие от WAV. И это делает его наиболее приемлемым для создания музыкальной библиотеки.
Формат ALAC
А вот эта штука будет знакома только владельцам устройств от компании Apple. Именно этот производитель создал сей формат и заставил своих клиентов использовать только его в iPhone и MacBook. Его главное отличие от FLAC заключается в том, что распространяется он только по лицензии от «яблочников». А это накладывает определенные ограничения в его использовании. А по качеству звука различий нет, так как используется практически идентичный алгоритм кодирования. Он не настолько популярен, как наш предыдущий герой, именно потому, что является проприетарным форматом Lossless. Что такое «проприетарный»? Это значит, распространяемый по лицензии от конкретного производителя с определенным количеством ограничений.
Формат APE
Этот формат можно уже назвать устаревшим, так как он в последние годы перестал развиваться. Назвать его свободным нельзя, так как он тоже распространяется по проприетарной лицензии. Главным недостатком этого кодека является то, что нормально он поддерживается только на ПК или ноутбуках под управлением операционной системы «Виндовс» от «Майкрософт». А вот многие дистрибутивы «Линукс» не умеют читать музыку в АРЕ. Только после установки определенных «костылей» можно воспроизвести сей формат. Возможно, именно поэтому АРЕ и не стал настолько популярным, как два предыдущих формата.
Чем читать Lossless?
Lossless-музыка, конечно, звучит превосходно. Но у многих владельцев ПК и ноутбуков возникает вполне закономерный вопрос о том, чем читать такой экзотический формат. Проблем с этим нет. По крайней мере, на «Виндовс». Наиболее качественно получается воспроизвести FLAC, ALAC или АРЕ с помощью плеера Foobar 2000. Он правильно воспроизводит файлы и адекватно считывает теги. Однако его минималистический и строгий интерфейс может отпугнуть среднестатистического пользователя. К тому же русского языка «из коробки» нет. Обычному юзеру нужно что-нибудь попроще. И такой вариант есть. Всеми любимый и нереально популярный AIMP тоже весьма успешно справляется с форматами без потери качества. С этим плеером нет ничего проще, чем воспроизвести Lossless. Программа автоматически разобьет образ диска на отдельные файлы при помощи файла CUE и правильно отобразит все теги.
На операционных системах семейства «Линукс» формат без потери качества может читать практически любой проигрыватель после установки дополнительных «костылей» (для АРЕ). Без всяких добавок читает сей неудобный формат только «всеядный» DeadBeef. Но с остальными форматами проблем нет. Такие комбайны, как «Клементин», Audacious и другие запросто с ними справляются. Даже те проигрыватели, что входят в состав дистрибутива, умеют работать с лосслесс-форматами.
Что касается МакОС, то здесь выбор невелик. Все форматы без потери качества читает только VOX. Остальные плееры зациклены на проприетарном ALAC. Такова политика компании из Купертино. Проиграть FLAC или WAV стандартными системными средствами не получится. Однако в AppStore есть некоторое количество приложений сторонних разработчиков, которые могут сделать МакОС «всеядной». К таким приложениями и относится небезызвестный VOX, который напоминает сразу и AIMP и Winamp. Последний, конечно, легенда, но под МакОС его нет. Как и под «Линукс».
Lossless в видео
Lossless-музыка — это хорошо. Но как быть любителям качественных фильмов и тем, у кого имеется целый домашний кинотеатр? С этим тоже проблем нет. Современные технологии вполне могут позволить записать звуковую дорожку фильма в формате без потери качества. Только технология немного другая. Да и формат тоже. В качественных фильмах на Blu-Ray (или их «рипах») используется формат звука DTS. От вышеперечисленных форматов он отличается тем, что может содержать в себе неограниченное количество каналов. Именно поэтому он используется в киноиндустрии. Там важен полноценный объемный звук. Так что в кино Lossless-формат тоже используется. Если бы не использовался — это выглядело бы как минимум странно.
Сегодня многие плееры запросто воспроизводят фильмы с таким звуком. На «Виндовс» самыми популярными решениями являются КМР, «ПотПлеер», «ГОМ плеер» и другие. Под «Линуксом» все проигрыватели справляются с этой задачей: VLC, SMPlayer и так далее. Под МакОС тоже есть огромное количество плееров такого типа. Включая стандартный, поставляющийся с самой операционной системой. Из бытовых проигрывателей адекватно справляются с этой задачей только «Блю-Рэй»-плееры. Обычные ДВД здесь никак не подойдут. Однако они и не нужны. Современные телевизоры (даже без системы «Смарт ТВ») способны считать файл с таким фильмом прямо с USB-накопителя или внешнего жесткого диска. Причем со звуком все будет в порядке.
Чем можно «рипнуть» диск в Lossless?
Извлекать полную информацию из аудиодиска умеют многие программы, но нужна соответствующая аппаратура для формата Lossless. Сжатие без потерь возможно только при наличии звуковой карты хотя бы среднего уровня. Встроенные «пищалки» никак не подойдут: налицо передискретизация, всевозможные искажения, неправильная сцена и прочее. Для начала следует обзавестись оборудованием. А «рипать» диск можно с помощью того же AIMP. Он прекрасно справляется с такой задачей. Есть и специализированные программы с кучей настроек. Но они сложны и не настолько эффективны. Примером может служить Easy CD-DA Extractor. Интерфейс программы перегружен настройками, непонятными обычному пользователю. Но свое дело утилита знает. «Рипы» получаются качественными.
Заключение
Итак, мы разобрали технологию 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 — кодирование с потерей качества. По сжатому видео невозможно восстановить исходное. Информация о кадре потеряна. Фарш невозможно провернуть назад. |
Для чего нужно сжатие без потери качества
Сжатие без потери качества необходимо в том случае, если нужно перенести видео из одной программы в другую. Представьте ситуацию, вам прислали видео с телескопа, который записал его в хитром формате и ваш любимый видеоредактор не может его открыть. Тут возможны два варианта:
- С помощью сторонней утилиты сконвертируем исходное видео в формат понятный для видеоредактора (например в mp4). Но в этом случае есть шанс потерять в качестве, так как любое (почти любое) преобразование видео из одного формата в другой ведет к ухудшению картинки, даже если вы отвели под это гигантский битрейт. Этот вариант нам не подходит, так как информация с телескопа ценная и вот так просто разбрасываться качеством картинки мы не имеем права. То есть, в данном случае мы отказываемся от Lossy кодека.
- Давайте преобразуем это видео не в широкораспространенный формат (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
Lossy с неограниченным битрейтом (libx264)800MB | Lossless (huffyuv)1300MB |
diff = orig — libx264 | diff = orig — huffyuv |
На этих картинках мы видим, что Lossy кодек, как и ожидалось, теряет в качестве при кодировании, несмотря на то, что мы разрешили кодеку брать сколь угодно большой битрейт. Серые разводы на левой картинке указывают на то, что исходная и оригинальная картинки различаются.
Huffyuv выступил на отлично. Черный квадрат указывает, что различия отсутствуют и оригинальная и закодированная картинки полностью идентичны.
Заключение
Подитожим вкратце основные преимущества/недостатки Lossless сжатия (сжатие видео без потери качества), на примере кодека Huffyuv:
- работает быстро;
- требует много места на диске 20MB mp4 превращаются в 1.3GB hufyyuv;
- необходим для работы с ценными данными;
- подходит для обмена данными между программами обработки видео, когда невозможно настроить frameserver (когда один видеоредактор передает несжатое видео другому видеоредактору без промежуточной записи на диск).
FLAC вам в руки!
10 лет назад 12 октября 2009 в 15:45 1214
К ак бы там ни злобствовали правообладатели, а копировать AudioCD мы не перестанем – хотя бы потому, что не хочется лишний раз изнашивать лицензионный диск. Хранить музыку на аналоговых носителях себе дороже: винил и магнитные ленты довольно быстро портятся, да и «сидюки» имеют свойство царапаться или вовсе разрушаться в дефектных приводах. То, что уже скопировано (оцифровано), в большинстве случаев представляет собой всенародно любимые MP3-файлы (реже – OGG или, еще реже, WMA). При этом большинство граждан не задумываются о самом настоящем глумлении над звуком, имеющем место при конвертировании музыки в сжатые форматы. Оптимальный вариант – хранение любимых произведений в неизмененном виде.
Если воспользоваться CD-риппером и приказать ему извлекать звуковые треки в файлы формата WAV, то в конечном итоге мы получим то, что изначально было записано на AudioCD (разумеется, мы не учитываем ошибки чтения диска). Но размер! Даже теперь, когда стоимость жестких дисков объемом 1 Тбайт опустилась ниже $100, никак не удается забыть о том, что объем WAV-файлов, «сграбленных» с AudioCD, доходит до 700 Мбайт. Теперь вернемся к временам, когда жесткий диск на 10 Гбайт считался признаком роскоши, и поймем мотивацию создателей сжатых форматов. Но какой ценой добились они столь впечатляющих результатов? И где та грань, которую лучше не переходить, для того чтобы сохранить максимально качественное звучание? Об этом мы и поговорим. Но сначала немного теории…
Алгоритмы кодирования принято подразделять на две группы: с потерями информации и без. Преимущество последних в том, что сигнал будет извлечен в том же виде, что и до компрессии.
«Цифра» vs «аналог»
Цифровые записи не подвержены изменениям, от которых страдают аналоговые носители звука. Треки хранятся в двоичной форме и передаются в виде электрических импульсов, имеющих лишь две величины, «1» или «0» – сигнал есть или отсутствует. При появлении помех, даже если они могут повлиять на сигнал, схемы цифрового оборудования, тем не менее, смогут определить его наличие («1») или отсутствие («0»). Это и составляет главное преимущество цифровой технологии по сравнению с аналоговой: «цифра позволяет неограниченно долго хранить и тиражировать записи безо всякой потери качества.
Оцифровка звука, подаваемого на линейный вход звуковой карты, происходит в три этапа. На первом (дискретизация) сигнал дробится на многие миллионы элементов, количество которых зависит от частоты дискретизации, которая измеряется в килогерцах (кГц). Например, частота дискретизации в 48 кГц означает, что каждая секунда аналогового сигнала была разделена на 48 000 отрезков. Чем выше частота дискретизации, тем на большее число элементов будет разбит исходный аналоговый звуковой сигнал, тем точнее будет выполнено преобразование и тем выше окажется качество оцифрованного звука.
На втором этапе (квантование) каждому элементу дискретизированного сигнала присваивается определенное числовое значение, соответствующее его амплитуде. Это число может изменяться в определенных пределах, например от 0 до 16 535. При таком квантовании возможно 16 535 уровней сигнала (подобный вид квантования именуется 16-разрядным, или 16-битным (16 535 = 216). Числа, получающиеся в результате квантования, являются не двоичными, а десятичными. Каждое десятичное число сохраняется в памяти компьютера в двоичной форме: например, число «1» как «00000001», а «2» как «00000010». Такой способ оцифровки звука называют «импульсно-кодовой модуляцией» (Pulse Code Modulation, PCM), поскольку звуковой сигнал представляется в виде серии импульсов постоянной частоты, амплитуда которых кодируется десятичными числами, то есть цифровым способом.
Наконец, третий этап – кодирование (сжатие). В ходе него полученная последовательность чисел архивируется по определенному алгоритму. Самый популярный на сегодняшний день цифровой формат сжатия звука – это разработанный Институтом им. тов. Фраунгофера (Fraunhofer IIS, www.iis.fraunhofer.de/amm) MPEG Layer3, или, более привычно, MP3. При высоком качестве кодирования отдельных блоков (битрейт до 320 Кбит/с) в нем применяются только математические алгоритмы сжатия. Качество при этом не страдает, но и размер файла уменьшается всего в четыре раза, то есть мы имеем такой коэффициент сжатия, какой дал бы обычный архиватор.
При снижении скорости кодирования до 256 Кбит/с и ниже подключаются алгоритмы удаления «ненужных» звуков (в соответствии с так называемой психоакустической моделью), которые обычный человек якобы не слышит. Вообще не только МР3-кодек, но и большинство других кодеков выбрасывают звуки, которые не воспринимает человеческое ухо. Но, как известно, люди неодинаковы, и те, кто в состоянии различить именно эти частоты, частенько сетуют на потерю качества звучания, тогда как среднестатистическое большинство этого не замечает.
Звуковая аналогия
Во многих домах до сих пор живут бытовые устройства для звукозаписи, такие как музыкальный центр с кассетным магнитофоном. Любая радио- или телепередача с радостью запишутся на магнитную ленту, но в большинстве случаев полученный результат будет далек от идеала. Причиной этого являются разнообразные помехи, которые, как рыбы-прилипалы, всегда сопровождают запись на магнитную ленту и снижают качество исходного сигнала. Подверженность помехам – основной недостаток любого аналогового звука. Зато цифровая технология записи звука полностью лишена такого недостатка. Именно благодаря этому она так оперативно и повсеместно вытеснила «аналог».
Коренное различие между аналоговым и цифровым звуком состоит в том, что первый записывается в виде электрических колебаний, которые без труда могут быть отображены в виде синусоиды. Таким образом, в аналоговой форме звук представляет собой некую кривую уровня напряжения, подающегося, например, на звуковую колонку, в которой, в свою очередь, электрический сигнал преобразуется в колебания мембраны динамика, в результате чего мы и слышим звук.
А почему, собственно, такой звук назван аналоговым? В рассмотренном нами случае электрический сигнал в зависимости от уровня громкости и частотных характеристик записанного звука изменяет свои характеристики. Такие изменения и способствовали появлению термина «аналоговый». Но напомню, что главной проблемой аналоговой записи является ее беззащитность перед помехами, которые снижают качество электрического сигнала и значительно ухудшают качество записанного тем же магнитофоном звука. Добавим сюда естественный шумовой фон от трения магнитной ленты или винилового диска, после чего о точном соответствии записанного сигнала оригинальному звуковому источнику скорее всего придется забыть.
Терять или не терять?
Все алгоритмы кодирования звука принято подразделять на две группы: с потерями информации (lossy) и без (lossless). Преимущество последних неоспоримо: цифровой сигнал будет извлечен из «упаковки» в том же виде, что и до компрессии, – бит в бит. К такому способу уплотнения прибегают в тех случаях, когда восстановление исходного качества данных весьма актуально. Например, после сведения звука в студии звукозаписи, когда информацию необходимо сохранить в оригинальном качестве для возможного последующего использования.
Наш с вами выбор – высокий уровень коррекции ошибок
Существующие сегодня алгоритмы кодирования без потерь (например, Monkey s Audio) позволяют значительно сократить занимаемый данными объем, но при этом обеспечивают стопроцентное восстановление информации из материала, полученного после сжатия. Подобные кодеры действуют как специализированные архиваторы, предназначенные для сжатия именно аудиопотока. Ниже мы познакомимся с наиболее распространенными алгоритмами кодирования (которые зачастую именуются форматами кодирования), которых в настоящее время существует огромное множество, – только не нужно путать такие форматы с файловыми.
Перед «выдиранием» звуковых дорожек с AudioCD настройте аудиограббер Exact Audio Copy должным образом
Для того чтобы понять сущность lossy, достаточно вспомнить историю MP3: в свое время программисты почесали головы да и засели за работу, главным результатом которой должен был стать некий формат, при помощи которого можно было бы существенно уменьшить размер звукового файла при сохранении приемлемого качества звучания. И все бы хорошо, но, увы, объективная реальность оказалась сильнее. К сожалению, любое преобразование аналогового сигнала в цифровой и обратно неизбежно связано с потерей части информации, поскольку, так или иначе, выполняется приблизительно. Далее, этот код трансформируется с целью достижения наименьшего размера файла. Для этого часть «маловажной» информации, как мы уже сказали выше, просто-напросто удаляется. Избежать этого можно и нужно. Но, перед тем как приступить к практической стороне дела, необходимо подготовить «сырье» в виде WAV-файлов, или, другими словами, грамотно «выдрать» звуковые треки с AudioCD.
Точность – вежливость королей
В этом нам поможет программа Exact Audio Copy (в дальнейшем – EAC). Она славится (в числе прочего) необычайно педантичным механизмом извлечения звуковых треков («выдирание» оных происходит с особой тщательностью) и автоматическим исправлением ошибок чтения носителя. Загрузив CD в привод и получив названия треков с CDDB, не торопитесь приступать к делу. Сначала проверьте, включена ли опция «Добавлять зазор к предыдущему треку» в меню «Действия». Затем, вызвав окно настроек (F9), на вкладке «Извлечение» включите чекбоксы «Заполнять отсутствующие из-за смешения (offset) сэмплы тишиной» и «Выполнять синхронизацию между треками». В списке «Уровень коррекции ошибок» в обязательном порядке выберите параметр «Высокий» – нам требуется исключительно высокая точность.
Exact Audio Copy 0.99 prebeta 4
- Программа: Exact Audio Copy 0.99 prebeta 4
- Тип: аудиограббер / аудиокодер
- Разработчик: Andre Wiethoff
- ОС: Windows 9x / ME / NT / 2000 / XP / 2003 / Vista
- Объем дистрибутива: 4,15 Мбайт
- Русификация интерфейса: есть
- Адрес: www.exactaudiocopy.de
Чтобы не тратить время на ручное обращение к базе CDDB, включите чекбоксы «При загрузке неопознанных CD» > «Автоматически запрашивать базу данных freedb» на вкладке «Общие». Следующий этап – группа «Разное», где достаточно активировать чекбоксы «Использовать информацию CD-Техt при генерировании Cue Sheet» и «Автоматически сохранять отчет после извлечения звуковых данных». И не забудьте указать папку для размещения полученных дорожек (вкладка «Папка»). В настройках привода (F10) по умолчанию включены оптимальные параметры, задействуйте лишь опцию «Дисковод поддерживает чтение информации CD-Text» в меню «Смещение и скорость».
Обратите внимание, что мы не трогаем параметры сжатия – нам важно максимально точно извлечь аудиотреки в формате WAV. Теперь выделите нужные композиции, нажмите F4 для определения зазоров между дорожками, после чего в меню «Действия» скомандуйте «Создать индексную карту (Cue Sheet)» > «С текущими настройками зазоров». В результате вы получите крохотный файл с наверняка знакомым многим расширением *.cue. Теперь можно начинать извлечение клавишей F6. Учтите, что EAC «выдирает» файлы дольше, чем аналогичные программы: точность требует жертв. Не отвергайте предложение о создании отчета и переходите к кодированию. Вот и все. Терпеливые дождутся результата в виде файлов WAV совершенно возмутительного размера. При желании можно сразу указать в настройках EAC внешний кодировщик, но мы будем вкушать котлеты и мух по отдельности (смайл). Рассмотрим несколько наиболее популярных lossless-кодеков.
Долгое время извлечения треков окупится качеством исходного материала
Мартышкин кодек
Выше мы упоминали про архивирование несжатого звука. Типичными средствами для этого являются архиватор WAVeZip (www.gadgetlabs.org) и WinRAR с функцией мультимедиакомпрессии (несжатые мультимедийные файлы «прессуются» специальными алгоритмами, учитывающими структуру исходных данных). Но засада в том, что файлы, сжатые этими архиваторами, нельзя воспроизводить без предварительной распаковки. Вот «если бы губы Никанора Ивановича да приставить к носу Ивана Кузьмича», то бишь совместить в одном флако… простите, формате степень компрессии не хуже, чем у WinRAR, отсутствие потерь качества звука и возможность воспроизведения запакованных файлов, то о лучшем и мечтать не нужно.
Monkey s Audio 4.05
- Программа: Monkey s Audio 4.05
- Тип: аудиокодер / аудиодекодер
- Разработчик: Matthew T. Ashland
- ОС: Windows 9x / ME / NT / 2000 / XP / 2003 / Vista
- Объем дистрибутива: 1 Мбайт
- Русификация интерфейса: нет
Но природа, как известно, не терпит пустоты: встречайте формат Monkey s Audio (www.monkeysaudio.com) и одноименную бесплатную программу-конвертор. Для идеологов OpenSource-софта грустная весть: несмотря на открытый исходный код, Monkey s Audio не является свободным, так как его лицензия накладывает значительные ограничения на использование. Изначально «мартышкин кодек» заточен под Windows, но неофициальные сборки можно использовать в Linux, BeOS и Mac OS X (например, supermmx.org/linux/mac).
Со слов разработчиков, сжатие в формат Monkey s Audio позволяет уменьшить размер WAV-файлов в среднем на 30-50% (готовый результат имеет расширение *.ape). Более того, в зависимости от сложности звукового материала возможна даже многократная компрессия. Этот кодек поддерживает работу с моно- и стерео-WAV-файлами с любыми частотами дискретизации и 8-, 16- или 24-битным квантованием. Самое главное в том, что «мартышкина» компрессия не только не приводит к потере качества оригинального контента, но и позволяет сохранять дополнительную служебную информацию, хранящуюся в исходном файле. Что и говорить, настоящий звуковой архиватор.
Для кодирования предлагаются пять степеней сжатия, от минимальной (Fast) до максимальной (Insane), но мы рекомендуем использовать параметр Extra High – при степени Insane нагрузка на процессор становится весьма высокой. В списке Processing Priority раздела настроек Processing настоятельно советуем выбрать параметр Full Verify Always (performs a full decompression) и самостоятельно решить, нужны ли вам исходные WAV`ы (оставьте, пригодится для последующих экспериментов с другими форматами сжатия).
Дальнейшие действия очень просты: в меню Mode выбираем режим Compress и добавляем в пустой пока список либо отдельные файлы, либо каталог с исходниками. После этого нажимаем кнопку Compress и буквально через минуту получаем вожделенные сжатые файлы. Результат: вместо 334 Мбайт исходников мы имеем 206 Мбайт готовых к употреблению треков (компрессия – 38%). Насколько существенна экономия в 128 Мбайт, решать вам. К тому же компактность музыкального архива, как это ни удивительно, зависит от его содержимого. Так, например, оригинальный трек St. James Infirmary в исполнении Л. Армстронга «весит» 48,8 Мбайт, а после компрессии размер APE-файла равнялся всего 13,5 Мбайт. Нетрудно подсчитать, что степень сжатия джазовой композиции составила почти 72%!
Наверняка вы уже сталкивались не с набором APE-файлов, а с одним большим архивом (снабженным вспомогательным CUE-файлом), при воспроизведении которого в плеере отображается список треков. Так вот, для получения такого единого APE-архива какого-либо AudioCD нужно приказать EAC «Скопировать образ диска и создать индексную карту (Cue Sheet)» > «В несжатом виде» (F7). Затем полученный WAV-файл «скармливаем» Monkey s Audio и правим индексную карту в любом доступном текстовом редакторе: в строке вида FILE “Название_альбома.wav” WAVE изменяем расширение WAV на APE (должно выглядеть так: FILE “Название_альбома.ape” WAVE). Понятно, что хранить два файла гораздо удобнее, чем все треки альбома по отдельности.
Теперь о том, что делать с APE-файлами. Набор треков в данном формате воспроизводят большинство плееров, например AIMP2, Media Player Classic, foobar2000 в базовой поставке, Winamp с дополнительным модулем и, как ни странно, системный WMP. Если вы планируете записать музыку на болванку, перекодируйте ее обратно в WAV посредством режима Decompress программы Monkey s Audio (Ctrl + 2). По умолчанию WAV-файлы сохраняются в том же каталоге. Если APE-образ диска снабжен CUE-файлом, после перекодирования в WAV не забудьте внести изменение в индексную карту (см. выше).
Понятно, что идеал в этом мире практически недостижим: APE-кодек, несмотря на высокую скорость кодирования и гибкость настроек, не поддерживает многоканальное и потоковое звучание, а также не дружит с бытовыми устройствами воспроизведения (надеемся, что в будущем этот казус исправят).
Wavepack
В отличие от «мартышкиного» кодека, свободный и кроссплатформенный Wavepack 4.50 (www.wavpack.com) поддерживает потоковый звук и многоканальные треки. На его официальном сайте предлагается загрузка не только консольной версии (336 Кбайт), но и плагинов для плееров Winamp и Apollo. Кодек славится безупречной работой, полным отсутствием ошибок сжатия и поддержкой ID3-тэгов. Есть и фирменная особенность в виде смешанного режима: вместо одного большого файла создаются небольшой файл высокого качества с потерей информации (с расширением *.wv) и корректирующий файл (*.wvc), который позволит при необходимости восстановить оригинальный контент. Кроме этого можно создавать самораспаковывающиеся архивы.
WavPack frontend 2.0
- Программа: WavPack frontend 2.0
- Тип: графическая оболочка кодека
- Разработчик: Speek
- ОС: Windows 9x / ME / NT / 2000 / XP / 2003 / Vista
- Объем дистрибутива: 24 Кбайт
- Русификация интерфейса: нет
- Адрес: members.home.nl/w.speek/wavpack.htm
Вряд ли вам понравится производить кодирование WAV-файлов в командной строке, поэтому советуем следующий вариант: распакуйте архив с файлами консольной версии в отдельную папку, после чего туда же выложите файлы графической оболочки. Для работы WavPack frontend потребуется установленный Visual Basic 6 Runtime.
С кодированием WAV-файлов разберется любой: исходный материал добавляется кнопкой Add Files, а для запуска процесса упаковки служит кнопка Go. Заявленная степень сжатия данным кодеком – от 30 до 70%. В нашем случае скорость кодирования оказалась сравнимой с той, что показал кодек Monkey s. Размер 334-мегабайтного в прошлом альбома составил 211 Мбайт, т. е. на 5 Мбайт больше, чем при сжатии «мартышкиным» кодеком. Упоминавшуюся выше «удачную» джазовую композицию удалось «умять» до 14,4 Мбайт.
В первом приближении достигнутую в обоих вышеописанных случаях степень компрессии можно считать одинаковой. Однако преимущества Wavepack далеко не исчерпываются упомянутыми в начале главы. Если вам интересны музыкальные архивы с «гибридным» расширением *.iso.wv, куда можно запаковать в числе прочего и обложки альбомов, советуем ознакомиться с плодами народной мудрости, например, здесь: netlab.e2k.ru/forum/index.php?showtopic=73396.
FLAC
Название данного кодека – аббревиатура от «Free Lossless Audio Codec». Все просто и понятно: кроссплатформенный кодек абсолютно свободен и позволяет сжимать звук без какой-либо потери качества оригинала. FLAC обладает всеми достоинствами Wavepack, за исключением «гибридного» режима, но этот изъян с лихвой компенсируется отличной реализацией софтверной и «железной» поддержки – звуковые файлы, сжатые данным кодеком, можно прослушивать на портативных плеерах (например, Cowon iAUDIO F2, Ritmix RF-9200 и BBK Q35N) и в автомобиле (магнитола URAL CDD).
FLAC for Windows 1.2.1b
- Программа: FLAC for Windows 1.2.1b
- Тип: кодек + графическая оболочка
- Разработчик: Josh Coalson, Speek
- ОС: Windows 9x / ME / NT / 2000 / XP
- Объем дистрибутива: 2,6 Мбайт
- Русификация интерфейса: нет
- Адрес: flac.sourceforge.net
Дистрибутив кодека содержит графическую оболочку, весьма напоминающую ту, что предлагается для кодека Wavepack. Но она позволит не только кодировать WAV-файлы (кнопка Encode), но и приводить сжатые дорожки в исходный вид (кнопка Decode). К тому же после установки кодека, в поставку которого входит плагин для Winamp, не придется мудрить с файлами.
Альтернативная бесплатная программа FLACdrop (www.rarewares.org/files/lossless/flacdrop.zip, 260 Кбайт) состоит из единственного исполняемого файла, который нужно скопировать в папку с файлами кодека (по умолчанию это Program FilesFLAC). Принцип работы софтины ясен из названия: исходный WAV-файл нужно перетащить в программное окно и дождаться окончания процесса. Изначально предлагается высшая степень компрессии и сохранение сжатого файла (с расширением *.flac) в папке, приютившей оригинальный материал.
Все настройки программы расположены в контекстном меню. Время кодирования тестового альбома в WAV-формате оказалось чуть дольше, но всего на 1 мин. Скорость распаковки столь же высока, как и в двух предыдущих случаях, – не более 30 с. Размер сжатого тестового альбома составил 213 Мбайт, а джазовая композиция заняла 14,7 Мбайт. Как видите, результат практически тот же, что показал Wavepack, но при сравнении с Monkey s преимущество на стороне последнего. Однако не будем забывать об аппаратной поддержке FLAC (flac.sourceforge.net/links.html#hardware) и о том, что плееры AIMP2 и foobar2000 опознают данный формат по умолчанию.
Туда-сюда-обратно
Для распаковки (читай – декодирования) файлов, сжатых lossless-кодеками, можно использовать бесплатный плеер foobar2000 (www.foobar2000.org), о котором мы уже рассказывали. Более того, этот проигрыватель способен конвертировать lossless-форматы не только в исходный WAV, но и, например, в MP3 (только с битрейтом 320 Кбит/с), AIFF или AU (SND). Делается это так: нужно загрузить в плеер нужный файл и в контекстном меню выбрать команду Convert to, после чего указать желаемый кодек. Не думаю, что затею конвертации WV или APE во FLAC можно назвать разумной, но в качестве выходного формата можно указать и его. Нет сомнений в том, что ваше желание записать полученные lossless-файлы на оптический носитель вполне оправданно и законно (смайл). По нашему разумению, для этого достаточно бесплатного приложения ImgBurn и CUE-файла, который и нужно указать прожигалке в качестве образа. Софтина проанализирует содержимое индексной карты и в лучшем виде создаст полноценный AudioCD не хуже оригинального. Разумеется, не забудьте о предварительной конвертации материала в WAV.
Троекратное IMHO
Мы рассказали лишь о трех lossless-кодеках по причине их высокой популярности у компьютеризированных граждан. В действительности существует еще как минимум десять кодеков, позволяющих сжимать звуковые файлы без потерь качества. Вот лишь некоторые из них: TAK (thbeck.de/Tak/Tak.html), OptimFROG (www.losslessaudio.org), ALAC (он же Apple Lossless Encoder, http://www.apple.com/ru и Windows Media Audio 9 Lossless, разработанный Microsoft и используемый в ее же продуктах. Но, как известно, народ не может ошибаться: все они в той или иной мере уступают Monkey s Audio, Wavepack и FLAC, которые вскоре смогут смело претендовать на звание «народных любимцев».
Независимо от наших субъективных предпочтений ситуация с применением lossless-файлов такова: APE- и WV-архивы пользуются заслуженной любовью на подавляющем большинстве файлообменных ресурсов (меломаны предпочитают именно такие релизы), а FLAC (будем надеяться) в конце концов найдет широкое применение в бытовых устройствах. Пользователи, равнодушные к качеству звука, вряд ли станут коллекционировать альбомы в lossless-форматах и вполне удовлетворятся MP3, воспроизводимыми интегрированной звуковой картой («дубасит – и ладно»). Если же вы способны критически оценить звуковой поток, льющийся из своих колонок, то еще раз взгляните на название статьи.
ImgBurn 2.4.2.0
На свободу с чистой совестью
Формат OGG Vorbis (www.vorbis.com) распространяется по лицензии LGPL, а исходные тексты – как модуля кодирования, так и самого кодировщика – полностью открыты и доступны всем желающим. Разработчик формата – некоммерческая организация Xiph Org Foundation, она же осуществляет его поддержку. Первоначально инициатором и спонсором проекта была компания iCast, занимавшаяся трансляцией музыки в формате МР3 через Сеть. По условиям патентных соглашений 2% ее прибыли принадлежали обладателю патента на сам стандарт МР3, поэтому переход на открытый формат сулил iCast существенную экономию. Было принято решение о создании собственного метода компрессии. Правда, потом компания распалась, но ее деньги не были потрачены напрасно.
Помимо открытости исходного кода следует отметить кроссплатформенность OGG. Кодировщик совместим почти со всеми операционными системами. По утверждениям разработчиков OGG, в этом стандарте использована собственная психоакустическая модель (хотя злые языки намекают, что она «позаимствована» у Fraunhofer IIS). Отметим, что создание подобной модели требует очень серьезных исследований особенностей человеческого слуха.
Данный кодер сжимает звук только с переменной скоростью кодирования (VBR), что позволяет существенно уменьшить размер файла при незначительной потере качества. Также он поддерживает частоту дискретизации от 8 до 48 кГц, любые значения скорости потока в диапазоне от 8 до 512 Кбит/с и практически произвольное количество каналов – вплоть до 255, а не два, как обычно! Спецификация формата позволяет даже включать в музыкальный (вернее, уже «гибридный») файл тексты любого размера и сложности, а также изображения (обложки альбомов). Вот вам и бесплатный формат!
Конвертация музыки в формат FLAC с использованием CUDA / Habr
Недавно я наткнулся на энкодер, работающий с форматом FLAC и перекладывающий часть процесса кодирования на GPU, используя CUDA. Программа называется FlaCuda и взять её можно здесь. Несмотря на то, что написана с использованием .NET, она прекрасно работает при участии Mono. Во всяком случае, никаких трудностей с её использованием на Ubuntu 9.10 amd64 у меня не возникло.Программка работает довольно шустро, при сжатии одного и того же аудиофайла flac, flake и flacuda показали следующие результаты (amd x2 4200+, geforce 9800 GT):
программа | время кодирования | размер конечного файла |
flac | 127 с. | 425.3 Мб |
flake | 106 с. | 425.9 Мб |
flacuda | 24 c. | 424.1 Мб |
Уровень сжатия у всех программ ставился 8. Получаем солидный пятикратный прирост в скорости. Правда, такого выигрыша можно добиться лишь на длинных файлах. На 3-6-минутных записях время кодирования сокращается примерно вдвое.
Программа умеет брать данные из стандартного ввода и выводить на стандартный вывод, что позволяет воткнуть её в конвейер. Например, я вполне успешно модифицировал cue2tracks для работы с flacuda.
Теперь о минусах. Программа построена на основе кодека flake, поэтому 24-битный звук сжимать не умеет. Очень обидно. Больше недочётов не заметил.
Сам автор предупреждает, что программа всё ещё находится в стадии альфа, поэтому желательно перепроверять полученные файлы. Например, можно полученный .flac перегнать обратно в .wav и сравнить его с исходным, посчитав контрольную сумму того и другого. За развитием можно следить форуме www.hydrogenaudio.org, и там же можно связаться с автором.
Ну и напоследок — бонус для пользователей linux, изменённый скрипт cue2tracks, в который добавлена поддержка FlaCuda. Для работы скрипта нужно поместить исполняемый файл «CUETools.FlaCuda.exe» в «/usr/bin» под именем flacuda, а dll-библиотеки — в «/usr/lib».
Upd. Для пользователей Gentoo powerman добавил пакеты для flacuda и изменённого cue2tracks в оверлей powerman.
Скачать скрипт.