Довольно часто перед пользователем компьютера встает вопрос кодирования музыки с треков CD-диска в сжатый формат (mp3,ogg, aac, wma). Несмотря на то, что пользователям Linux доступен по умолчанию очень неплохой формат OggVorbis (ogg), по ряду позиций превосходящий mp3 и к тому же полностью свободный (кодер oggenc), а при установке дополнительныхкодеров (например faac), можно получать формат файлов aac (он жеm4a), иногда бывает необходимо получить формат mp3, для воспроизведения музыки на устройствах не понимающих других форматов.Вот и у меня возникла такая задача, решением которой решил поделиться. Делается все достаточно просто.
Для начала устанавливаем один из лучших кодеров lame, в дистрибутивах dabian или ubuntu с подключениемк интернет это делается очень просто, в консоли нужно дать команду:
sudo apt-get install lame
оболочка попросит дать пароль админа (все таки это установка программы), у меня в данный момент установлена версия 3.97,размер утилиты невелик.
В других дистрибутивах можно применить аналог команды (например для дистрибутивов, использующих систему yum, нужно дать команду yuminstall lame предварительно войдя в режим суперпользователя через команду su) для установки кодера из репозитария илискачать и установить программу отдельно.
Проверяем установлена ли утилита с забавным названием cdparanoia (как правило она уже установлена). Даннаяутилита обеспечивает полностью цифровое снятие информации треков с диска, без потерь и без использования аудио.
cdparanoia --version
(в данный момент у меня версия III release 10pre0 (August 29, 2006)).
Если она не установлена, ставим аналогичной командой:
sudo apt-get install cdparanoia
Примечание: Поскольку для дальнейшей работы нам не нужны права root, которые мы получили при помощи sudo, послеустановки программ рекомендуется дать команду sudo -K и продолжить работу в терминале с правами простогопользователя. Несмотря на то, что настройки sudo через некоторое время сами "обнулят" пароль, рекомендуется сделать это принудительнов целях минимизации возможного доступа к системным настройкам операционной системы.
Теперь необходимые утилиты установлены, начинаем граббить:
Для начала полезно (но не обязательно) дать команду
cdparanoia -Q
она выведет таблицу треков cd-диска, включая продолжительность треков и общее время воcпроизведения.
Далее без сжатия снимаем треки с диска, получая файлы формата wav:
Даем команду:
cdparanoia -B -S 24 -Z 1-5 /home/user/muzic/artist/
Опция B дает пояснение утилите о необходимости записи каждого трека отдельным файлом.
Опция S задает скорость чтения (в данном случае 24). Данную опцию можно не указывать.
Опция Z дает пояснение утилите о ненужности восстановления поврежденного аудио (царапины на диске и т.п.) в целях увеличенияскорости работы. Данную опцию можно так же отпустить.
Опция 1-5 дает пояснение утилите о том, что нужно выполнить работу только для треков с 1-го по 5-й. Если ее отпустить, торабота будет проведена для всего диска.
Опция /home/user/muzic/artist/ задает путь, по которому нужно записать файлы. Если опцию отпустить, то файлы будут по умолчаниюзаписаны в домашний каталог.
В простейшем случае, например снятие треков отдельными файлами со всего диска, команда может выглядеть так:
cdparanoia -B
Теперь стоит вторая задача, получение файлов mp3 из только что снятых wav файлов. Для этого используется утилита-кодерlame. Для проведения операций удобно перейти в текущий для выполнения работы каталог, что бы каждый раз не указывать путь.Сделать это можно командой:
cd /home/user/muzic/artist/
Общий вид команды lame:
lame [options]
Даем команду и наслаждаемся выводом процесса преобразования:
lame track01.cdda.wav 1.mp3
где
track01.cdda.wav - файл, полученный после работы утилиты cdparanoia,
1.mp3 - файл, который мы создаем.
По умолчанию кодер lame кодирует файлы звука с постоянным битрейтом 128 kbps и частотой дискретизации 44,1 кГц. Дополнительнымиопциями можно менять данные параметры, например можно использовать другой постоянный битрейт (режим CBR):
lame --preset cbr 192 track01.cdda.wav 1.mp3
В данном случае мы получим файл 1.mp3 с постоянным битрейтом 192 kbps
битрейт можно указать любой из данного ряда значений 32 40 48 56 64 80 96 112 128 160 192 224 256 320
Можно использовать переменный битрейт, например так (режим VBR):
lame --preset standard track01.cdda.wav 1.mp3
в результате чего получим файл с переменным битрейтом 170...210 kbps.
При использовании ключа medium (вместо standard) мы получим файл с переменным битрейтом 145...185, а прииспользовании ключа extreme получим файл с переменным битрейтом 220...260 kbps.
Вместо обозначений standard, extreme, medium можно использовать и расширенные ключи по названию режима (-V):
Ключ | Текстовый аналог | Цель kbps | Разброс битрейта kbps | ||
---|---|---|---|---|---|
-b 320 | --preset insane | 320 | 320 CBR | ||
-V 0 --vbr-new | --preset fast extreme | 245 | 220...260 | ||
-V 0 | --preset extreme | 245 | 220...260 | ||
-V 1 --vbr-new | 225 | 200...250 | |||
-V 1 | 225 | 200...250 | |||
-V 2 --vbr-new | --preset fast standard | 190 | 170...210 | ||
-V 2 | --preset standard | 190 | 170...210 | ||
-V 3 --vbr-new | 175 | 155...195 | |||
-V 3 | 175 | 155...195 | |||
-V 4 --vbr-new | --preset fast medium | 165 | 145...185 | ||
-V 4 | --preset medium | 165 | 145...185 | ||
-V 5 --vbr-new | 130 | 110...150 | |||
-V 5 | 130 | 110...150 | |||
-V 6 --vbr-new | 115 | 95...135 | |||
-V 6 | 115 |
| |||
-V 7 --vbr-new | 100 | 80...120 | |||
-V 7 | 100 | 80...120 | |||
-V 8 --vbr-new | 85 | 65...105 | |||
-V 8 | 85 | 65...105 | |||
-V 9 --vbr-new | 65 | 45...85 | |||
-V 9 | 65 | 45...85 |
Команда выглядит так
lame -V0 track02.cdda.wav 1.mp3
Использование режима fast ускорит выполнение работы, но не рекомендуется по причине снижения качества. Кроме того по неподтвержденнымданным использование альтернативных ключей (второй столбец таблицы) дает более высокое качество кодирования, чем использованиеключей первого столбца.
Примерно режим с переменным битрейтом можно указывать и иначе, согласно данной таблицы:
phone | 16 kbps | Телефонная линия |
phon+ | 24 kbps | Качественная телефонная линия |
lw | 24 kbps | Радиотрансляция на ДВ |
mw-eu | 24 kbps | Радиотрансляция на СВ по европейскому стандарту |
sw | 24 kbps | Радиотрансляция на КВ |
mw-us | 40 kbps | Радиотрансляция на СВ по американскому стандарту |
voice | 56 kbps | Оптимизирован для хранения записи речи |
fm | 112 kbps | УКВ (FM) радиоприемник |
radio | 128 kbps | Качественный УКВ (FM) радиоприемник |
tape | 128 kbps | Звучание бытового кассетного магнитофона |
hifi | 160 kbps | Звучание качественного кассетного магнитофона |
cd | 192 kbps | Звучание бытового проигрывателя компакт-дисков (CD) |
studio | 256 kbps | Звучание качественного проигрывателя компакт-дисков (CD) |
Команда при этом выглядит так:
lame --preset hifi -v track02.cdda.wav 1.mp3
Среди экспертов однако есть мнение, что применение данных ключей не особо желательно. Причина в отключении адаптивногофильтра высоких частот в режимах cd и studio, из-за чего воспроизведение файлов может сопровождаться зашумлением из спектравысоких частот.
Существует режим ABR получения файлов со среднезаданным битрейтом, данный режим производит кодирование с заданным битрейтом,но автоматически производит отклонение битрейта в случае необходимости (нечто среднее между режимами cbr и vbr), командаможет выглядеть так:
lame --preset 128 track01.cdda.wav 1.mp3
другой вид той же команды:
lame --abr 128 track02.cdda.wav 1.mp3
в данном случае средний битрейт будет задан в 128 kbps. Значение среднего битрейта можно выбрать любым (к примеру ткнувпальцем в воздух 151).
По мнению экспертов для большинства случаев оптимально применение пресета --preset standard, однако если у вас хорошийслух и аппаратура, возможно оправданным будет использование пресета --preset extreme. Если вы хотите получить максимальноенизкое сжатие файлов и готовы отказаться от лишней экономии дискового пространства, то используйте пресет --preset insaneдля получения файлов с постоянным битрейтом 320 kbps. Эксперты однако склоняются к мнению, что применение данного режимане оправдано не только по причине неэкономичности расходования дискового пространства, но и из-за некоторых свойств звука,проявляющихся при прослушивании, поскольку специальные режимы standard и extreme подгонялись под наиболее оптимальное звучание,учитывающее психоакустическую модель системы человек-звук. В целом именно эти режимы (standard и extreme) рекомендованыдля использования с утилитой lame. Однако конечно в первую очередь самому пользователю предоставлен выбор разных режимови ключей для нахождения им индивидуально наиболее приемлемого варианта исходя из особенностей своего слуха, аппаратуры, восприятиямузыки и т.п.
При выборе режима необходимо учитывать на какой аппаратуре вы собираетесь воспроизводить музыку, поскольку не каждая аппаратураспособна воспроизводить mp3 файлы любого битрейта. К тому же, например, некоторые образцы воспроизводящей техники устаревшихобразцов возможно не смогут понять режим переменного битрейта.
Режим medium вы можете попробовать с целью экономии емкости накопителя, для воспрооизведения с носимых плееров, однако намой взгляд в данном случае полезно произвести кодирование и в режиме extreme, записав файлы на другой диск, на случай ихвоспроизведения на аппаратуре высокого класса.
В заключении удаляем с винчестера исходные wav файлы.
Данный вывод скопирован после работы команды
lame --preset standard track02.cdda.wav 1.mp3
user@ubuntu-desktop:~/Музыка/1$ lame --preset standard track02.cdda.wav 1.mp3
LAME 3.97 32bits (http://www.mp3dev.org/)
CPU features: MMX (ASM used), SSE, SSE2
Using polyphase lowpass filter, transition band: 18671 Hz - 19205 Hz
Encoding track02.cdda.wav to 1.mp3
Encoding as 44.1 kHz VBR(q=2) j-stereo MPEG-1 Layer III (ca. 7.3x) qval=3
Frame | CPU time/estim | REAL time/estim | play/CPU | ETA
9894/9894 (100%)| 0:23/ 0:23| 0:23/ 0:23| 11.223x| 0:00
32 [ 204] %********
40 [ 2] *
48 [ 4] *
56 [ 2] *
64 [ 2] *
80 [ 1] *
96 [ 5] %
112 [ 21] *
128 [ 116] %****
160 [1606] %%%%%%%%*****************************************************
192 [3599] %%%%%%%%%%%%%%%%%%%%%%%%%%%********************************************
224 [2693] %%%%%%%%%%%%%%%%%%%%%%%%%%***********************************
256 [1321] %%%%%%%%%%%%%%%**********************************
320 [ 318] %%%%%%*******
----------------------------------------------------------------------------------
kbps LR MS % long switch short %
203.8 21.6 78.4 90.0 6.1 3.9
Writing LAME Tag...done
ReplayGain: -4.9dB
=================================================
Однако выше были описаны только базовые операции, теперь более интересно:
Путем образования конвейера можно автоматизировать процесс кодирования. В частности для того, что бы избавиться от записипромежуточных wav файлов можно применить следующую команду:
cdparanoia -B 1 - | lame --preset cbr 192 - name.mp3
Данный конвейер снимает с диска трек посредством утилиты cdparanoia и автоматически передает результат ее работы утилитеlame. В данной записи мы получим файл name.mp3 с постоянным битрейтом 192 kbps с трека № 1 CD-диска.
Символы тире перед метасимволом | и после команды lame (указанный после пресета) указывают на то, что вывод работы утилитыcdparanoia должен осуществляться не в файл, как рассматривалось в предыдущих примерах, а в канал вывода stdout, а входнымиданными для утилиты lame должен быть канал ввода stdin.
Больший интерес представляет обработка всех треков диска посредством дачи одной команды. Это возможно с применением сценариев.Рассмотрим следующий сценарий:
cdparanoia -Q
for i in `seq 1 10`
do
cdparanoia $i - | lame --preset extreme - /home/user/Музыка/mp3/$i.mp3
done
# --preset medium (режим VBR, 145...185 kbps)
# --preset standard (режим VBR, 170...210 kbps)
# --preset extreme (режим VBR, 220...260 kbps)
# --preset N (режим ABR, где N - значение среднего битрейта)
# --abr N (режим ABR, где N - значение среднего битрейта)
# --preset cbr N (режим CBR, где N - значение постоянного битрейта) N=32 40 48 56 64 80
# 96 112 128 160 192 224 256 320
# --preset insane (постоянный максимальный битрейт = 320 kbps, получаемые файлы
# будут иметь максимальный размер).
# --preset -Vx (режим VBR, где x - значение параметра 0...9, смотри таблицу)
# --preset x -v (режим VBR, где x - значение параметра качества hifi, cd, studio и т.п.,
# смотрите таблицу)
#
# рекомендуются первые 3 режима, в зависимости от требуемого качества и объема
# файлов.
# вторая строка указывает первый и последний треки CD диска.
# для запуска сценария введите в консоли bash skript_mp3 и нажмите на Enter.
Создаем текстовый файл, например с именем skript_mp3, в который помещаем данный текст и сохраняем файл. Расположениефайла важно с точки зрения удобства работы. Если папка, в которой вы расположите скрипт, не попадет в описание переменнойокружения $PATH, и при этом ваша консоль будет открыта в другом каталоге то при попытке запуска консоль даст сообщение отом, что сценарий не найден. Кроме того расположение файла в другом каталоге может быть связано с требуемым изменением правна редактирование файла и папки, в которой он размещен. Учитывая, что при запуске консоли последняя как правило открываетсяс адресом домашнего каталога, удобно расположить файл именно в нем, т.е. в домашнем каталоге.
Первая строка сценария выводит содержание CD-диска на экран.
Вторая задает переменную i для количества треков диска, в данном случае 10. (Если указать к примеру `seq5 8` в кавычках, то будут ограбблены с 5-го по 8-й треки, если указать к примеру seq 1 2 5 без кавычек, то будут ограббленытреки 1, 2 и 5. Эти опции однако вряд ли нужны, дабы не испортить скрипт, к тому же чаще всего кодят диск целиком).
Третья - пятая строки организуют цикл, выполняемый i количество раз, соответственно по одному разу для каждого трека.
Шестая и последующие строки закомментированы и служат напоминанием наиболее удобных режимов.
При заданных в данном случае параметрах кодирования получаемые файлы будут обработаны с переменным битрейтом в границах 220-260kbps и будут записаны в папку /home/user/Музыка/mp3/ (/user/ нужно заменить на реальное имя пользователя).
Перед использованием скрипта нужно конечно создать папку, предназначенную для получения mp3 файлов и соответственно отредактироватьпуть, указанный в скрипте (если путь не будет указан, файлы будут записываться в домашний каталог). Делается это один раз.
Далее, перед снятием треков с конкретного диска, на обложке диска смотрим количество треков (или это можно сделать, вставивдиск в привод, командой cdparanoia -Q), редактируем вторую строку сценария (вместо цифры 10 нужно поставить реальное количествотреков) и жмем кнопку "сохранить файл" текстового редактора. Это единственная ручная операция, исключая запуск в работу самогосценария.
Для запуска сценария необходимо открыть консоль (по умолчанию она открывается с адресом домашней папки) и выполнить команду:
bash skript_mp3
Далее просто ожидаем получения готовеньких файлов, время зависит от мощности вашей машины, процесс кодирования демонстрируетсяв консоли, хотя пока он не закончился можно послушать уже откодированные файлы, порыться в инете или позаниматься другимизадачами. Если однако ваш компьютер принадлежит одному из прошлых поколений и не блещет производительностью, то лучше подождатьокончания работы сценария. Все просто. Перед работой конечно чистим папку назначения файлов и при необходимости задаем требуемыепараметры кодирования, описанные выше.
Если кодирование треков CD дисков в формат mp3 придется делать более-менее часто, то можно выполнить еще пару операций,которые упростят работу. Во первых, на рабочий стол можно вывести символическую ссылку (говоря языком windows это ярлык)на файл сценария. Во вторых, команде запуска сценария можно присвоить короткий и понятный псевдоним.
Для создания символической ссылки выполним команду:
ln -s /home/user/skript_mp3 /home/user/"Рабочий стол"/"Делаем mp3"
Ссылку можно создать и с помощью файлового менеджера, дав из контекстного меню команду "Создать ссылку", однако в этомслучае ее придется переименовать и переместить на рабочий стол.
В данном случае мы получим сивмолическую ссылку с именем "Делаем mp3", расположенную на рабочем столе. Для наведения шикаи придания большей наглядности желательно средствами файлового менеджера через контекстное меню - вкладку "свойства" назначитьярлыку подходящее "музыкальное"изображение или подобрать что-то из музыкальных иконок, лежащих в каталоге /usr/share/icons/.
Теперь для корректировки сценария (изменения количества треков и при необходимости изменения режима кодирования) не нужнобудет отыскивать файл сценария в нередко загроможденной файлами домашней папке, а лишь дважды кликнуть по созданной ссылке,расположенной на рабочем столе.
Создадим псевдоним команды bash skript_mp3. Для этого в своей домашней папке средствами файлового менеджера (нужно включитьрежим отображения скрытых файлов) нужно найти файл .bashrc и вписать в него следующую строку:
alias mp3='bash skript_mp3'
Сохраняем файл. Изменения должны вступить в силу при запуске командной оболочки bash.
Команда alias создает псевдоним команде bash skript_mp3 с именем mp3. В данном случае система запомнит, что вводу командыmp3 фактически будет соответствовать команда bash skript_mp3. Теперь для запуска сценария в консоли нужно будет ввести лишьимя псевдонима mp3 и нажать Enter.
При кодировании композиции "Bringing me down to my knees" с альбома Room Service группы Roxette продолжительностью 3 мин48 сек в режиме standard был получен файл размером 5,9 мБ, в режиме extreme размером 7,3 Мб, в режиме medium размером 4 Мб.В режиме с постоянным битрейтом 128 kbps 3,5 Мб, с постоянным битрейтом 160 kbps 4,4 Мб, с постоянным битрейтом 192 kbps5,2 Мб, при кодировании со среднезаданным битрейтом (режим abr) 160 kbps 4,2 Мб.
При кодировании композиции Криса Кельми "Ангел завтрашнего дня" продолжительностью 4 мин 5 сек в режиме standard был полученфайл размером 5,2 мБ, в режиме extreme размером 6,4 Мб, в режиме medium размером 4 Мб. Видно, что размер файла получаетсяразным в зависимости не только от продолжительности трека и метода кодирования, но и от особенностей музыкального материала.
Данное описание составлено после относительно краткого знакомства с утилитой lame, на этом ее возможности не ограничиваются,она способна делать многое, однако это уже отдельное чтение описания утилиты, ее пресетов и оценок специалистов. Единственное,на чем я не заострял внимание, в силу ограниченности времени и пока относительно слабого знания команд Linux, это автоматическоеопределение количества треков диска и соответственно передача их в сценарий, а так же автоматический поиск через интернеттекстового контента к получаемым файлам. Это возможно и в принципе довольно удобно, но не всегда нужно, к тому же на мойвзгляд в данном случае получилось оптимальное сочетание качества и удобства работы.
Описанные утилиты свободны в распространении.
Материалы:
Использование пресетов mp3 кодера Lame
Из описания к кодеку lame
Lame