CD гребер
Грабим аудио треки
Превратить свою фонотеку, состоящую из компакт-дисков, в коллекцию аудио
файлов -- задача вроде бы тривиальная, но и здесь есть множество
подводных камней.
Так как же правильно это сделать?
Вот об этом мы и поговорим.
В Linux, как принято в большинстве приложений, используемых на данной
платформе, процесс кодирования аудио разбит на два этапа: собственно
ограбление audio-CD т.е. снятие с него треков и сохранение их на диске в
формате .wav с последующим конвертированием в любой из имеющихся форматов.
Все необходимое для процесса грабления и последующей конвертации аудио
треков в дистрибутиве Linux уже есть:
cdparanoia для непосредственного грабления с CD-audio в файл wav.
lame для кодирования wav файлов в mp3.
И так приступим.
Чем потрошить?
Первый этап -- извлечение музыки с носителя. Обычно эта процедура
называется <<грабить>> (от английского глагола to grab -- хватать) или
<<рипать>> (to rip -- потрошить). Суть <<рипания>> в том, чтобы преобразовать
звуковые дорожки, взятые с аудио-CD, в знакомые каждому wav-файлы
аналогичного качества.
В каждый дистрибутив Linux входят две консольные утилиты,
предназначенные для <<потрошения>> музыкальных CD, -- cdda2wav и cdparanoia
Последняя является наследницей cdda2wav и основанная на ее же коде вот
ее и будем использовать.
Можно для этой цели воспользоваться давно не обновляемой CDDA2WAV
(ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/alpha), но если в компьютере
установлен CD-RW, то так как для его работы используется эмуляция SCSI,
дополнительно потребуется указать устройство, с которого будет
происходить считывание.
cdparanoia автоматически определяет устройства, с которыми cdda2wav
иногда работать категорически отказывается, в добавок с ней удобнее
работать и может прочитать даже низкокачественный диск.
Для получении информации о содержании диска выполним команду cdparanoia -Q
После этого на экран будет выведена таблица с описанием содержимого CD --
количество треков, длительность каждого из них и т. п. Обратите внимание
на регистр параметра Q (именно большая буква).
Командой cdparanoia -B сграбим весь диск целиком
Получившиеся в результате файлы будут иметь названия track01.cdda.wav,
track02.cdda.wav и т.д. файлы будут лежать в той директории от куда мы
запускали cdparanoia, т.е. если мы находились /home/user то файла будут
сграблены именно в этот каталог.
-B, --batch пакетная обработка -- каждый трек сохраняется в отдельный файл;
-S, --force-read-speed /n/ извлекать треки со скоростью n (относительно
1X CD-ROM);
И так с <<потрошением>> мы справились
Кодирование.
Итак, файлы у нас в руках чтобы они не занимали много места, требуется
их закодировать в какой-то подходящий для нас формат. Им будет
достаточно распространенный старичок MP3.
Ситуация интересна тем, что этот стандарт не определяет никакого точного
стандартного математического алгоритма кодирования, его разработка
целиком и полностью остается на совести разработчиков-кодеров, поэтому
существует несколько кодеков, с помощью которых можно перекодировать
файл. Все они отличаются условиями лицензирования, психоакустической
моделью (что в свою очередь влияет на качество звучания полученного
выходного .mp3-файла на различных битрейтах), а также дополнительными
возможностями вроде поддержки кодирования с переменным битрейтом.
Грамотное сжатие в mp3 формат на слух ни чем не отличается от оригинала.
Соответственно для данной операции нам нужен кодер, я рекомендую
использовать LAME.
Самый простой вариант просто набрать в командной строке lame audio.wav,
и в результате на выходе получим файл audio.wav.mp3 c постоянным
битрейтом 128Кбит/с, что не есть, по моему мнению, гуд.
С жатый файл с таким битрейдом отличается от оригинала, но при битрейде
256 кбит/с качество сжатого файла на слух не отличим от оригинала.
Ключик -b указывает с каким битрейдом будем кодировать, audio.wav файл
источник, что бы не переименовывать полученный на выходе файл
audio.wav.mp3 укажем его название audio.mp3
lame -b 256 audio.wav audio.mp3
Кодирование с постоянным битрейдом, впрочем, приводит к нерациональному
использованию дискового пространства и потере качества в особенно
насыщенных музыкальных эпизодах, но в последнее время кодеки позволяют
кодировать с переменным битрейдом, но здесь нас ждет засада в том, что
ни один из известных мне проигрывателей пока не поддерживает данного
расширения. Но зато отлично работает другой режим average bitrate (ABR),
это что-то среднее между постоянным и переменным битрейдом, при этом
указывается среднее значение, и при необходимости программа сама
увеличивает или уменьшает его. При этом файл получается в среднем на 10%
меньше чем с постоянным битрейдом. Пример:
lame --abr 224 -b 64 audio.wav audio.mp3
Теперь немного о синтаксисе команды и ее ключах (параметры).
lame < параметры> file1 file2, где
file1 - файл источник
file2 - конечный файл
-b <битрейт> -- этот параметр указывает битрейт, с которым вы можете
компрессировать звук
-V <значение> -- включает кодирование с переменным битрейтом и задает его
значение (от 0 до 9). Число, передаваемое параметру V, означает не
битрейт, а качество звука. Ноль -- наилучшее 9 - наихудшее. Пример:
lame -h -V 0 audio.wav audio.mp3
--vbr-new -- включает использование нового алгоритма VBR
-h -- включает наивысшее качество кодирования. В ущерб скорости.
-m s -- включает стерео режим.
--decode -- указывает на то, что входной файл надо декодировать, т.е.
получить из mp3 wav.
--abr <значение> -- включает кодирование со средним значение битрейда.
Если хотите знать больше, то читайте man lame.
Автоматизируем процесс.
Немного поэкспериментировав и один раз подобрав приемлемые параметры, я
счел наиболее удобным вариантом создание различных быстро запоминающихся
алиасов или скриптов. В последнем случае, поместив все команды в файл и
сделав его исполняемым, можно просто создать ярлык на рабочем столе и
перегонять диски нажатием одной единственной кнопки. Круто.
И так приступим.
Нам понадобиться небольшой исполняемый скрипт, который мы напишем сами.
Вот его листинг:
#!/bin/sh
eject -t # задвинуть лоток CD-ROM
cd /home/music # Перейти в каталог где будут лежать конечные файлы
cdparanoia -B # Грабим весь диск целиком
for i in *.cdda.wav; do # начало цикла
lame -b 256 -h -m s $i ${i:0:7}.mp3 # кодируем все wav файлы
done # конец цикла
eject # выдвигаем лоток CD-ROM
В принципе все понятно кроме двух строк кода, на которых остановимся
поподробнее.
for i in *.cdda.wav; do # начало цикла
В данной строке мы объявляем i как переменную, которая получает
различные значения, т.е. переменной i
присваиваются имена файлов в каталоги по маске cdda.wav
lame -b 256 -h -m s $i ${i:0:7}.mp3
Теперь разберемся с LAME
синтаксис команды следующий
lame < параметры> file1 file2, где
file1 - файл источник
file2 - конечный файл
параметр -b <битрейт> -- этот параметр указывает битрейт, с которым вы
можете компрессировать звук
параметр -h -- включает наивысшее качество кодирования. В ущерб скорости.
параметр -m s -- включает стерео режим.
$i -- файл источник
${i:0:7}.mp3 -- конечный файл
Так как после того как сграбим треки cdparanoia полученный файл имеет
следующий вид track01.cdda.wav, а после его кодирования lame примет вид
track01.cdda.wav.mp3, что не удобно, то мы возьмем из переменной i
только первые 7 символов и добавим расширение mp3
Дополнительная информация
Более подробно можно почитать в
man cdparanoia
man lame
bash-prog-howto
aka Crion
ivan пишет:
Не консолью единой жив линуксоид. Есть такая штука - grip, использует
внешние сдиратель и кодек, умеет опрашивать freedb.freebd.org для
получения информации о диске. Вообщем, довольно навороченная gui надстройка.
еще полезен ключ -d - собствеено в каком устройстве находится диск (не у
всех это /dev/cdrom ;) )
Исторически сложилось, что для хранения музыки я, по возможности,
использую формат ogg, так что не помешает про него рассказать.
Реальный пример:
oggenc -b 192 -m 32 -N 02 -t 'Shut Your Mouth' -d 2002 -l 'Nothing
Remains The Same' -a 'Pain' -G 'Rock' -n '%l/%n - %t.ogg' track02.cdda.wav
Производим сжатие второго трека 'Shut Your Mouth' с альбома группы
'Pain' 'Nothing Remains The Same' 2002 года в файл './Nothing Remains
The Same/02 - Shut Your Mouth.ogg' сразу с указанием необходимых тэгов
Собственно параметры обозначают:
-b 192 - средний битрейт получаемого файла 192 kbs, либо через
качество - '-q n'
-m 32 - минимальный битрейт 32, для максимального битрейта - '-M b'
-N, -t, -d -l, -a, -G - указываем как должны выглядеть теги,
полученного сжатого файла
-n pattern - шаблон для имени сжатого файла.
Как видно так приходится кодить каждый файлы по отдельности :(, хотя вся
загвоздка состоит в подстановке нужных названий песен :-/. Кстати, может
кто просветит как искать русских исполнителей на freedb.freedb.org,
какую кодировку использовать?