- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF99:WavPack
Материал из Linuxformat.
Содержание |
WavPack Cжатие: с потерями, но без потерь
- WavPack: Не иди на компромисс!
- Убеждены, что отношение качества аудиозаписи к размеру содержащего ее файла - величина постоянная? Александр Супрунов готов сломать этот стереотип.
С ростом мощностей компьютеров, увеличением емкости жестких дисков и благодаря широкому распространению DVD начали набирать популярность так называемые lossless-кодеки для сжатия звука. Другими словами, уже можно переставать мириться с потерями форматов MPEG Layer 3 или Ogg Vorbis и перейти на следующий уровень, применяя для аудиоданных сжатие без потерь.
На сегодня существует достаточно большое семейство lossless-кодеков: FLAC (Free Lossless Audio Codec), Monkey’s Audio, WavPack и даже WMA9. Записи, сжатые такими кодеками, имеют больший размер. По крайней мере, так считалось, пока не появился гибридный режим WavPack, позволяющий использовать сжатие с потерями, ничего не теряя! О нем сегодня и пойдет речь.
Пока вы еще не успели окончательно запутаться, поясню терминологию: lossy-кодеки сжимают с потерями (при кодировании отбрасывается часть информации, которую вы не в состоянии услышать согласно выбранной психо-акустической модели), lossless-кодеки оставляют качество оригинала без изменений.
Что это?
WavPack – бесплатный открытый аудиокодек, разработанный Дэвидом Брайантом [David Bryant] и распространяющийся по лицензии BSD. Изначально WavPack был сугубо lossless-кодеком, но позднее в нем появилась уникальная возможность, резко выделяющая его из череды других решений – гибридный режим.
При кодировании в этом режиме создаются два файла – один сжат по принципу lossy (.wv) и несет все преимущества такого сжатия (имеет минимальный размер) и второй – корректирующий (.wvc). Он используется при восстановлении потерянных данных с помощью утилиты WvUnpack – что позволяет бескомпромиссно решить вечную проблему выбора между качеством и количеством.
WavPack поддерживает высокие частоты дискретизации и позволяет сжимать 8/16/24/32-битные аудиофайлы. В lossless-режиме WavPack работает подобно стандартному архиватору вроде Zip, не приводит к деградации записей, как это происходит в форматах MP3 или Ogg и является идеальным способом архивирования аудиоконтента. Степень сжатия зависит от музыкального материала: композиции с более широким динамическим диапазоном сжимаются сильнее. В среднем, при lossless-режиме можно рассчитывать на 50%. В гибридном режиме lossy-файл будет лишь слегка превосходить по размерам файлы вездесущего MP3.
Прежде чем углубляться в сферу практического использования WavPack, давайте рассмотрим основные преимущества кодека. Это, в первую очередь, быстрое сжатие (существует возможность кодировать симметрично/асимметрично, что позволяет влиять на время декомпрессии), открытый исходный код, гибридный режим, поддержка многоканального звука, аппаратная поддержка (iRiver H10/H1xx/H3xx, iAudio X5, Apple iPod, Toshiba Gigabeat), мультиплатформенность, ReplayGain (технология, уравнивающая громкость разных файлов при воспроизведении) и много чего другого. Хотелось бы еще раз подчеркнуть очень быстрое сжатие – в несколько раз более быстрее, чем сжатие в MP3 кодеком Lame.
Приступим к делу
Ну что же, давайте попрактикуемся. Вероятно, кодек WavPack уже есть в вашем дистрибутиве (в моем ALT Linux 4.0 – точно), если же нет – ищите соответствующие RPM/Deb-пакеты или скачивайте исходные коды. Официальный сайт кодека – http://www.wavpack.com, но вы также можете найти WavPack на нашем DVD. Сборка из исходных текстов не вызывает сложностей и ограничивается стандартными
./configure (можете указать ключ --enable-mmx для использования MMX-инструкций вашего процессора), make и make install.
Следующий вопрос – откуда взять неискаженный звук? Можно, например, «оцифровать» CD. Этот вопрос я оставлю на самостоятельное изучение, скажу лишь, что для решения задачи существуют как графические (KAudioCreator), так и консольные утилиты. Важно лишь иметь возможность получить на выходе файл в формате WAV. В дальнейшем я буду предполагать, что он называется forest.wav.
Перейдите в консоль и наберите WavPack. В окне терминала отобразятся ключи, которые можно использовать при кодировании, и синтаксис команды:
wavpack [-options] [@]infile[.wav]|- [...] [-o [@]outfile[.wv]|
В простейшем случае достаточно указать оригинальный файл и название выходного файла в формате WavPack (.wv), используя ключ -o:
wavpack forest.wav -o forest.wv
В результате будет создан файл forest.wv, сжатый lossless-кодеком. В моем случае его размер файла уменьшился с 24,1 МБ до 10,9 МБ, и заметьте – без деградации аудиоматериала. Пожелав улучшить (или ухудшить) этот результат, я мог бы воспользоваться следующими ключами:
- -bn Включает гибридный режим. Значение n указывает число бит на сэмпл (от 2.0 до 23.9).
- -c Создает корректирующий файл (.wvc) для гибридного режима;
- -cc обеспечивает максимальную (для гибридного же режима) степень сжатия.
- -f Быстрый режим: повышает скорость работы, понижает степень сжатия.
- -h Опция, обратная -f. Сжимает медленно, но верно. Если же вам и этого мало, используйте -hh: качество и степень сжатия будут очень высокими, но использовать такой файл в портативном проигрывателе не рекомендуется.
- -x Увеличивает скорость декодирования в будущем за счет замедления кодирования в настоящм.
Полный список ключей можно получить, набрав wavpack --help.
Высший пилотаж
Настало время активировать самый интересный, гибридный режим. За него отвечают ключи -b и -c. Если не использовать -с, то корректирующий файл создан не будет и вы получите обычное lossy-сжатие без возможности восстановить оригинал. Например, набрав
wavpack -b2.0 forest.wav -o forest.wv
вы получите ролик наихудшего возможного качества и отсутствие корректирующего файла. Можете считать это аналогом MP3. В варианте
wavpack -b16 forest.wav -o forest.wv
качество будет повыше, но и размер выходного файла, соответственно, увеличится.
Но мы, помнится, собрались здесь вовсе не для того, чтобы сжимать аудио lossy-кодеком. Давайте создадим корректирующий файл, способный вернуть оригинальное звучание без потерь. Для это пригодится ключ -с:
wavpack -cb16 forest.wav -o forest.wv
В результате будет создан выходной файл forest.wv и корректирующий файл forest.wvc. Оптимальный, на мой взгляд, результат дает строка вида:
wavpack -chhdb16 forest.wav -o forest.wv
Она создает корректирующий файл и одновременно удаляет оригинальный. При таком раскладе размер файла уменьшается с 24 МБ до 3,4 МБ (forest.wv), а корректирующий файл forest.wvc занимает 8,4 МБ.
Но в вашей аудиоколлекции наверняка будет больше одного файла. Чтобы разобраться с ними скопом, используйте команду вида
wavpack -chdb2.0 *.wav -o /home/suprunov/music/
Остается последний вопрос: на чем прослушать эту новенькую,только что сконвертированную в коллекцию «.wv + .wvc»? О, здесь изобилие вариантов: поддержка WavPack добавлена в FFmpeg и xine-lib, а значит, доступна через большинство популярных оболочек. Попробуйте Amarok, Audacious, Quod Libet, XMMS... А удовлетворившись программными проигрывателями, присмотритесь к аппаратным. Забудьте MP3, живите в XXI веке, используйте lossless-кодеки, Linux, бластеры и флаеры. Будущее не остановить! LXF