Архивы: по дате | по разделам | по авторам

Грабим и режем

Архив
автор : Петр Семилетов   06.08.2003

Превратить свою фонотеку, состоящую из компакт-дисков, в коллекцию аудиофайлов — задача вроде бы тривиальная, но и здесь есть множество подводных камней. Поговорим о том, как треки с аудио-CD быстро и оптимально конвертировать в формат сжатого звука и записать на болванку CD-R/RW — причем проделать все это в Linux.

Превратить свою фонотеку, состоящую из компакт-дисков, в коллекцию аудиофайлов — задача вроде бы тривиальная, но и здесь есть множество подводных камней. Поговорим о том, как треки с аудио-CD быстро и оптимально конвертировать в формат сжатого звука и записать на болванку CD-R/RW — причем проделать все это в Linux.

Чем потрошить?

Первый этап — извлечение музыки с носителя. Обычно эта процедура называется «грабить» (от английского глагола to grab — хватать) или «рипать» (to rip — потрошить). Суть «рипания» в том, чтобы преобразовать звуковые дорожки, взятые с аудио-CD, в знакомые каждому wav-файлы аналогичного качества (те же 16 бит, 44,1 кГц). Ими проще оперировать при конвертировании в другой формат или записи на CD.

В каждый дистрибутив Линукса входят две консольные утилиты, предназначенные для «потрошения» музыкальных CD, — cdda2wav и cdparanoia1. Первая несколько проще, но так как сdparanoia — наследница cdda2wav, основанная на ее же коде, я не вижу причин использовать более старый софт. Поэтому в качестве основного рабочего инструмента выберем именно cdparanoia (рис. 1). Дабы не пересказывать документацию, я покажу способы работы с программой на конкретных примерах2. Чтобы получить базовую информацию о вставленном в устройство /dev/cdrom диске, достаточно выполнить команду
cdparanoia -Q.
После этого на экран будет выведена таблица с описанием содержимого CD — количество треков, длительность каждого из них и т. п. Обратите внимание на регистр параметра Q (именно большая буква).
Предположим, нужно быстро сграбить дорожку номер 2:
cdparanoia -B -S 40 -Z 2.
Параметр B нужен для того, чтобы утилита записывала каждую дорожку в отдельный файл. Параметр S задает скорость чтения (в нашем случае 40х), а Z отключает дополнительные возможности cdparanoia по восстановлению поврежденного аудио (царапины и пр.). Зачем отключает? Для повышения скорости работы. Наконец, последняя опция представляет собой число — это номер дорожки, которую мы хотим сграбить.
Допустим, мы хотим проделать то же с дорожками от 2 до 6 включительно. Тогда команда примет следующий вид:
cdparanoia -B -S 40 -Z 2-6.
А если нужно сграбить диск целиком:
cdparanoia -B.
По умолчанию работают алгоритмы, которые позволяют cdparanoia прочитать музыку с сильно поцарапанных дорожек. Плейер на таких дорожках обычно перескакивает на другой трек (плейеры под Windows вообще могут при этом подвесить систему)
3. А cdparanoia эту дорожку прочтет, только в выходном файле будет слышен щелчок — от которого, впрочем, нетрудно избавиться в мало-мальски развитом волновом редакторе, применив к порченному фрагменту операцию интерполяции4. С незапамятных времен у меня лежал один диск в состоянии настолько жутком, что я опасался крутить его даже на пальце, не то что в дисководе CD-ROM. Так вот, cdparanoia умудрилась вытянуть из него всю музыку! Однако эти алгоритмы ощутимо замедляют процесс. Так, на граббинг дорожки длительностью 2:44 с помощью команды cdparanoia -B -S 40 2 (то есть с детекцией царапин) я потратил две минуты, а используя команду cdparanoia -B -Z -S 40 2 — всего 34 секунды. Разница существенная. Поэтому если вы «потрошите» нормальный диск, качеству которого целиком доверяете, то отключайте функции по борьбе с царапинами.
С этапом потрошительства/грабительства мы разобрались. Следующий!

Во что кодировать?

Грамотно сжатые в MP3 или OggVorbis звуковые дорожки на слух ничем не отличаются от оригиналов, но занимают во много раз меньше места. Формат MP3, или, выражаясь более научно, MPEG 1 Layer III, — давно и заслуженно пользуется всенародной любовью и признанием. О нем уже столько написано, что я ограничусь лишь вопросом о конвертации звука в этот формат под Линуксом.

Разумеется, нам нужен кодер — программа, которая умеет конвертировать wav-файлы в MP3. Я перепробовал много различных кодеров под Windows и Linux. К моему удивлению, классический кодек от Fraunhofer IIS (разработчик MP3 и один из владельцев патента на этот алгоритм) в итоге производил звук с большими искажениями, нежели другие кодеры. Кстати, внимательный читатель наверняка спросит: почему я использую термины «кодер» и «кодек», разве это не одно и то же? Нет. Кодек — это кодер/декодер, то есть он работает в обоих направлениях, а кодер — только в одном, на сжатие информации. Некоторые утилиты могут быть только кодерами, иные же — кодеки. Поэтому когда я говорю «кодер», это означает, что я рассматриваю некий продукт именно как программу для сжатия звука, оставляя ее декодирующие способности (если они есть) в стороне.

Есть еще один популярный кодек — Xing, но когда я опробовал его, то картина получилась довольно противоречивая: на воспроизведение Xing работал отлично, но обратный процесс, кодирование, мне не понравился — звук искажался даже больше, чем в «Фраунхофере». Искажения звука обычно называются артефактами. Это, например, знакомое всем «хлюпанье» при низких битрейтах сжатия (особенно заметно, когда в музыке много перкуссионных инструментов). В альтернативных кодерах таких артефактов, как правило, меньше, поэтому MP3 получаются с более чистым на слух звуком, с более широким диапазоном частот (известно, что иногда частоты попросту «рубятся» кодером на определенном пороге) и т. д.

Под Windows я использовал (пока не перешел на OggVorbis) BladeEnc (bladeenc.mp3.no), в Linux же рекомендую LAME. Эта рекомендация основана не только на субъективной оценке качества звучания, но и на анализе спектра звука, получаемого в результате работы программ, которые я тестировал.


1 (назад)Кстати, последняя входит в состав фриварного граббера для Windows — CDEx (cdexos.sourceforge.net).
2 (назад) Подробную информацию по cdparanoia можно получить, задав в консоли команду man cdparanoia.
3 (назад) Чаще в этом виноват привод CD-ROM и его драйвер, нежели плейер. — С. Л.
4 (назад) Есть и специальный софт для удаления в звуковом материале помех, вызванных царапинами, — например, DART Pro.

По лицензионным соображениям некоторые дистрибутивы Linux не комплектуются MP3-кодерами. Где взять LAME? На сайте lame.sourceforge.net. Лучше скачать исходник и откомпилировать его самостоятельно — это нетрудно. Замечу, что трудности компиляции и вообще не очень хорошее мнение о LAME, выраженное в поставляющимся с Linux документе «The Linux MP3-HOWTO», относятся к 2001 году, когда LAME пребывал в зачаточном состоянии. В наше время это стабильный и солидный продукт.
Скачав дистрибутив (около 1 Мбайт), распаковываете его в какую-нибудь директорию5. В ней же из консоли даете команду
./configure.
Она запускает конфигурационный скрипт, который подготавливает файлы с опциями, необходимыми для компиляции/сборки продукта. Скрипт скажет вам, какие библиотеки нужны, чтобы откомпилировать LAME. Наверняка все они есть у вас в дистрибутиве Linux. Если же скрипт выдаст для чего-то значение «no» (то есть нет такой-то библиотеки), просто установите ее из дистрибутива и снова запустите конфигурационный скрипт.
Далее запускаем на выполнение команду
make.
Начнется компиляция. Ждем ее завершения, после чего устанавливаем кодек командой
make install.
LAME — консольная утилита, поэтому все команды работы с нею следует набирать в консоли, а не запускать из окошка, которое открывается по Alt+F2 в KDE. Обращаю ваше внимание, что при использовании в командной строке параметров к LAME имеют значение регистр букв и количество дефисов перед параметром: в некоторых случаях два дефиса, а в некоторых — только один.
Как конвертировать все wav-файлы в текущей директории в MP3? Простейший пример:
lame *.wav.
При этом звук будет сжат с битрейтом по умолчанию — 128 кбит/с. Для более гибких настроек можно использовать такие опции:
> -b <битрейт> — этот параметр указывает битрейт, с которым вы можете компрессировать звук. Примеры:
lame -b 320 *.wav;
lame -b 320 nirvana.wav nirvana.mp3.
В первом примере мы конвертируем в MP3 все wav-файлы в текущей директории, а во втором — файл nirvana.wav в nirvana.mp3.
> --freeformat — позволяет сжимать звук с любым битрейтом выше 8 кбит/с. С этой опцией вы можете указывать в параметре —b битрейты более чем 320 кбит/с. Главное, чтобы декодер (читайте, плейер) поддерживал выставленный вами битрейт. Например, LAME и XMMS при декодировании «держат» до 560 кбит/с, MAD — вообще 640 кбит/с (Winamp — не знаю, не пробовал). Пример:
lame --freeformat -b 560 *.wav.
> --decode — указывает на то, что входной файл надо декодировать (по умолчанию — в WAV) из MPEG. Например:
lame --decode nirvana.mp3 nirvana.wav.
Здесь файл nirvana.mp3 декодируется в nirvana.wav.
> -h — включает наивысшее качество кодирования. В ущерб скорости.
> -V <значение> — включает кодирование с переменным битрейтом и задает его значение (от 0 до 9). При использовании этой опции битрейт изменяется динамически на протяжении трека, выбор же нужного битрейта интеллектуально определяется кодером в зависимости от характеристик звука. Число, передаваемое параметру V, означает не битрейт, а качество звука. Ноль — наилучшее. Пример:
lame -h -V 0 nirvana.wav nirvana.mp3.
> --vbr-new — включает использование нового алгоритма VBR, который примерно вдвое быстрее старого (используемого по умолчанию). Пример:
lame --vbr-new -V 0 nirvana.wav nirvana.mp3.
На этом оставим MP3 и обратим взор — вернее, уши — к OggVorbis.
Утилиты для кодирования в OGG, и для Linux, и для Windows, берутся с сайта www.vorbis.com. Мы же рассмотрим oggenc, которая входит в состав пакета Vorbis Tools и включена в любой современный дистрибутив Linux.
Конвертировать все «вавчики» в текущей директории в OggVorbis очень просто:
oggenc *.wav.
Замечу, что при этом расширения выходных файлов получаются более корректными, нежели у LAME. LAME формирует имя выходного файла, просто добавляя к нему расширение mp3, поэтому если вы не указываете имя и расширение, то получаете файл вида nirvana.wav.mp3, то есть с двойным расширением. Oggenc же заменяет расширение, и на выходе вы получаете более логичное nirvana.ogg.
По умолчанию oggenc кодирует с качеством, равным трем. Основное отличие OggVorbis от других форматов в том, что при кодировании предпочтительнее не указывать битрейт явно, а использовать метаобозначение качества, выражаемое числом от –1 до 10. Чем оно больше, тем лучше звук (меньше артефактов), правда, и размер файла тоже больше. Качество задается параметром -q либо —quality. Например, зададим наивысшее качество, 10:
oggenc -q 10 nirvana.wav.
В итоге получаем файл nirvana.ogg с качеством сжатия 10. Замечу, что допустимы и дробные значения степени качества, например 3.5 или 2.2. Можно задать и битрейт — для этого используется опция, аналогичная LAME: -b <битрейт>. Например:
oggenc -b 500 nirvana.wav.
Все плейеры поддерживают OggVorbis с битрейтом 500. Чтобы задать конкретное имя выходного файла, применяется опция   -o <имя файла>. Например:
oggenc -o Come_On_Death.ogg -b 500 nirvana.wav.
Альтернативный вариант:
oggenc nirvana.wav Come_On_Death.ogg.
Если вы хотите добавить при кодировании в файл какие-нибудь теги с информацией о песне и исполнителе, следует поступить примерно так:
oggenc -t «Come On Death» -a «Nirvana» -l «from Deep Depression Part 1» -c «bootleg» -G «grunge» nirvana.wav Come_On_Death.ogg
Параметры означают следующее: t — задает имя трека, a — название группы либо имя исполнителя, l — название альбома, c — комментарий, G — жанр.
Подробную информацию обо всех параметрах oggenc вы можете получить, введя в консоли команду man oggenc.

Подводя итог всему вышесказанному, не могу обойти вниманием программу RipperX (ripperx.sourceforge.net). Это удобнейшая графическая оболочка для cdparanoia, LAME и oggenc (рис. 2). Нечто вроде центра управления. Утилита очень похожа на свой, тоже бесплатный, аналог из мира Windows — CDex. Схожи и приемы работы: выбираете треки, и они начинают грабиться сразу в нужный формат — то есть можно конвертировать с CD в Ogg либо MP3. Отличие в том, как все это происходит — тут многозадачность Линукса проявляется во всей красе. Треки отдельно грабятся и отдельно кодируются. Таким образом, RipperX может грабить трек номер 4, а кодироваться в это время будут треки 2 и 3. Большой плюс также в удобстве прописывания тегов — прямо в свойствах каждой еще не сграбленной дорожки. Подробнее останавливаться на RipperX не буду — если вы умеете работать с консольными утилитами, то легко разберетесь и с RipperX.


5 (назад) В архиве, с которым пришел LAME, лежит и документация в HTML-формате.

Как записывать?

Наконец, третий этап — запись. Раньше я писал болванки под Windows, используя Nero Burning ROM или WinOnCD, но быстро перешел под Linux, ощутив определенные преимущества.

Сначала нам предстоит подготовка и запись ISO-образа диска (ISO-образ представляет собой нечто вроде матрицы CD в виде одного здоровенного файла). Для этого традиционно используется утилита mkisofs.

Предположим, вы скопировали все файлы и директории, которые хотите записать на CD, в директорию /mnt/junk_drive. Теперь перейдите в другую директорию, в которой вы собираетесь создать ISO-образ, и дайте команду
mkisofs -v -J -r -no-iso-translate -o mycd.iso /mnt/junk_drive.
Теперь о том, что и зачем:
> -v — для того, чтобы утилита не молчала, а сообщала о ходе своей работы;
> -J — дает указание генерировать для ISO-образа расширение файловой системы, именуемое Joliet. Смысл в том, что стандартная файловая система data CD — ISO9660 — для совместимости с файлами DOS допускает имена файлов лишь в старом убогом формате 8.3, то бишь восемь символов на имя, три на расширение, а между ними точка. Joliet же поддерживает имена длиной 64 символа.
> -r — включает линуксовое расширение для ISO9660 — Rock Ridge, которое, помимо специфических для Linux атрибутов файлов, поддерживает имена длиной до 255 символов. Разумеется, вы сможете работать с таким диском и под Windows.
> -no-iso-translate — для ISO9660 символы # и ~ недопустимы в именах файлов. Однако эта опция позволяет обойти такое ограничение.
> -o имя_файла — задает имя выходного файла, то есть ISO-образ.
А сделать точную копию некоего CD вы можете простейшей командой
dd if=/dev/cdrom of=mycd.iso.
Хотите убедиться, что с образом все в порядке? В той же директории создайте пустую директорию test и подмонтируйте к ней образ командой
mount -t iso9660 -o loop mycd.iso test.
Теперь зайдите в директорию test — в ней должно быть содержимое нашего ISO-образа. Все о’кей? Замечательно, можно приступать к записи.

Мы воспользуемся программой cdrecord, которая имеется в каждом дистрибутиве Linux (рис. 3). Но для работы с нею нужны некоторые технические подробности о вашем записывающем устройстве. Чтобы их узнать, дадим команду
cdrecord -scanbus.
На экран выведется нечто подобное этому:
Cdrecord 1.11a32 (i586-mandrake-linux-gnu) Copyright (C) 1995-2002 Jorg Schilling
Linux sg driver version: 3.1.24
Using libscg version ‘schily-0.6’
scsibus0:
0,0,0 0) *
0,1,0 1) *
0,2,0 2) *
0,3,0 3) 'MITSUMI' 'CR-4804TE' '3.0D' Removable CD-ROM.
Нас интересует строка с названием пишущего устройства — в моем случае это, как видите, старый Mitsumi CR-4804TE. Для cdrecord значение имеют первые два числа из этой строки, то есть 0 и 3. У вас могут быть другие цифры. Во всяком случае, запомните их — позже мы используем их в качестве параметра, чтобы задать пишущее устройство.
Пишем образ диска командой
cdrecord -v -eject dev=0,3 speed=4 fs=16M mycd.iso.
Что это означает?
> -dev=0,3 — указывает на пишущее устройство (о чем я говорил выше). Подставьте здесь свои числа.
> -v — нужен, чтобы программа уведомляла нас о ходе своей работы. Если в Nero Burning ROM процесс записи отображается в процентах, то cdrecord делает это более логично — в мегабайтах.
> -eject — чтобы лоток CD-ROM-драйва автоматически выдвинулся по окончании записи.
> speed=4 — скорость записи. Мой Mitsumi на большее не способен.
> fs=16M — размер буфера FIFO. Этот буфер в оперативной памяти служит своего рода перевалочной базой для данных из ISO-образа перед их непосредственной записью на болванку. В приведенном примере он составляет 16 Мбайт. Буква М после числа указывает именно на мегабайты.

Тем, кто не любит консоль, советую скачать графическую оболочку к mkisofs и cdrecord под названием Eroaster (sourceforge.net/projects/eroaster). По виду и приемам работы она очень похожа на Nero (рис. 4). Для Eroaster нужен относительно быстрый компьютер, потому что эта программа выполняет процессы создания ISO-образа и его отправки на запись не последовательно, а одновременно.

Будущее за OggVorbis?

Новый формат сжатого звука понемногу вытесняет MP3. Об этом говорит хотя бы тот факт, что во многих играх (Serious Sam 2, Unreal 2) избран для озвучивания именно OggVorbis. Уже выпускаются «железные» Ogg-плейеры, а программным давно несть числа. На просторах пост-СССР этот формат еще не прижился — а зря. Хотите сами убедиться? Качайте файлы www.roxton.kiev.ua/ mp3_48.mp3 (89 Кбайт) и www.roxton.kiev.ua/ogg_45.ogg (87 Кбайт).
Это пятнадцатисекундный фрагмент композиции «Life In A Glass House» группы Radiohead. Оцифровано с «родного» CD, затем конвертировано в два формата — MP3 с битрейтом 48 кбит/с и Ogg с битрейтом 45 кбит/с. Зачем так жестоко? Ведь общеизвестно, что артефакты MP3 на столь низком битрейте просто ужасны. А теперь послушайте Ogg… При 45 он звучит, как MP3 на битрейте 128! Чудеса да и только.
Если вы пользуетесь Windows, и Linux у вас нет, — можете прослушивать OGG-файлы по крайней мере двумя способами: в Winamp 3, который их понимает, или в старом добром Winamp 2.x с помощью плагина, который можно скачать отсюда: www.roxton.kiev.ua/ in_vorbis.exe (112 Кбайт).*


* (назад)Третий способ — штатный медиаплейер Windows XP/2003. — С.Л.

© ООО "Компьютерра-Онлайн", 1997-2022
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.