Делаем MP3 в Linux

VSL аватар

MP3 Logo

Создание файлов MP3 в Linux.

Довольно часто перед пользователем компьютера встает вопрос кодирования музыки с треков CD-диска в сжатый формат (mp3, ogg, aac, wma). Несмотря на то, что пользователям Linux доступен по умолчанию очень неплохой формат Ogg Vorbis (ogg), по ряду позиций превосходящий mp3 и к тому же полностью свободный (кодер oggenc), а при установке дополнительных кодеров (например faac), можно получать формат файлов aac (он же m4a), иногда бывает необходимо получить формат mp3, для воспроизведения музыки на устройствах не понимающих других форматов. Вот и у меня возникла такая задача, решением которой решил поделиться. Делается все достаточно просто.

Для начала устанавливаем один из лучших кодеров lame, в дистрибутивах dabian или ubuntu с подключением к интернет это делается очень просто, в консоли нужно дать команду:

sudo apt-get install lame

оболочка попросит дать пароль админа (все таки это установка программы), у меня в данный момент установлена версия 3.97, размер утилиты невелик.
В других дистрибутивах можно применить аналог команды (например для дистрибутивов, использующих систему yum, нужно дать команду yum install lame предварительно войдя в режим суперпользователя через команду su) для установки кодера из репозитария или скачать и установить программу отдельно.

Проверяем установлена ли утилита с забавным названием cdparanoia (как правило она уже установлена). Данная утилита обеспечивает полностью цифровое снятие информации треков с диска, без потерь и без использования аудио.

cdparanoia --version

(в данный момент у меня версия III release 10pre0 (August 29, 2006)).

Если она не установлена, ставим аналогичной командой: sudo apt-get install cdparanoia

Примечание: Поскольку для дальнейшей работы нам не нужны права root, которые мы получили при помощи sudo, после установки программ рекомендуется дать команду sudo -K и продолжить работу в терминале с правами простого пользователя. Несмотря на то, что настройки sudo через некоторое время сами "обнулят" пароль, рекомендуется сделать это принудительно в целях минимизации возможного доступа к системным настройкам операционной системы. Если Вы (касается системы Ubuntu) работаете из под обычной учетной записи, созданной отдельно после установки операционной системы и не имеющей (по умолчанию) прав администрирования системы (работа из под такой учетной записи рекомендуется), то возможно для установки утилит Вам будет необходимо войти в систему под учетной записью пользователя, зарегистрированного при инсталляции системы.

Теперь необходимые утилиты установлены, начинаем граббить:
Для начала полезно (но не обязательно) дать команду 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] <infile> <outfile>

Даем команду и наслаждаемся выводом процесса преобразования:

  1. lame track01.cdda.wav 1.mp3
где
track01.cdda.wav - файл, полученный после работы утилиты cdparanoia,
1.mp3 - файл, который мы создаем.

По умолчанию кодер lame кодирует файлы звука с постоянным битрейтом 128 kbps и частотой дискретизации 44,1 кГц. Дополнительными опциями можно менять данные параметры, например можно использовать другой постоянный битрейт (режим CBR):

  1. 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 95...135
-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

Команда выглядит так

  1. 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 файлы.

Данный вывод скопирован после работы команды

  1. lame --preset standard track02.cdda.wav 1.mp3
  2.  
  3. user@ubuntu-desktop:~/Музыка/1$ lame --preset standard track02.cdda.wav 1.mp3
  4. LAME 3.97 32bits (<a href="http://www.mp3dev.org/" title="http://www.mp3dev.org/">http://www.mp3dev.org/</a>)
  5. CPU features: MMX (ASM used), SSE, SSE2
  6. Using polyphase lowpass filter, transition band: 18671 Hz - 19205 Hz
  7. Encoding track02.cdda.wav to 1.mp3
  8. Encoding as 44.1 kHz VBR(q=2) j-stereo MPEG-1 Layer III (ca. 7.3x) qval=3
  9.     Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA
  10.   9894/9894  (100%)|    0:23/    0:23|    0:23/    0:23|   11.223x|    0:00
  11.  32 [ 204] %********
  12.  40 [   2] *
  13.  48 [   4] *
  14.  56 [   2] *
  15.  64 [   2] *
  16.  80 [   1] *
  17.  96 [   5] %
  18. 112 [  21] *
  19. 128 [ 116] %****
  20. 160 [1606] %%%%%%%%*****************************************************
  21. 192 [3599] %%%%%%%%%%%%%%%%%%%%%%%%%%%********************************************
  22. 224 [2693] %%%%%%%%%%%%%%%%%%%%%%%%%%***********************************
  23. 256 [1321] %%%%%%%%%%%%%%%**********************************
  24. 320 [ 318] %%%%%%*******
  25. ----------------------------------------------------------------------------------
  26.    kbps        LR    MS  %     long switch short %
  27.   203.8       21.6  78.4        90.0   6.1   3.9
  28. Writing LAME Tag...done
  29. ReplayGain: -4.9dB
  30.  
  31. =================================================

Создание тегов
При желании Вы сможете задать теги в создаваемые вам файлы, сделать это можно с помощью следующих опций:

--tt "Имя композиции"
--ta Исполнитель
--tl Альбом
--ty Год (4 цифры)
--tn номер трека

Если тело тега содержит пробелы, то заключите его в кавычки.

Создание конвейера

Однако выше были описаны только базовые операции, теперь более интересно:
Путем образования конвейера можно автоматизировать процесс кодирования. В частности для того, что бы избавиться от записи промежуточных wav файлов можно применить следующую команду:

cdparanoia -B 1 - | lame --preset cbr 192 - name.mp3

Данный конвейер снимает с диска трек посредством утилиты cdparanoia и автоматически передает результат ее работы утилите lame. В данной записи мы получим файл name.mp3 с постоянным битрейтом 192 kbps с трека № 1 CD-диска.
Символы тире перед метасимволом | и после команды lame (указанный после пресета) указывают на то, что вывод работы утилиты cdparanoia должен осуществляться не в файл, как рассматривалось в предыдущих примерах, а в канал вывода stdout, а входными данными для утилиты lame должен быть канал ввода stdin.

Кодируем весь диск одной командой

Больший интерес представляет обработка всех треков диска посредством дачи одной команды. Это возможно с применением сценариев. Рассмотрим следующий сценарий:

  1. cdparanoia -Q
  2. for i in `seq 1 10`
  3. do
  4. cdparanoia $i - | lame --preset extreme - /home/user/Музыка/mp3/$i.mp3
  5. done
  6. # --preset medium   (режим VBR, 145...185 kbps)
  7. # --preset standard (режим VBR, 170...210 kbps)
  8. # --preset extreme  (режим VBR, 220...260 kbps)
  9. # --preset N (режим ABR, где N - значение среднего битрейта)
  10. # --abr N (режим ABR, где N - значение среднего битрейта)
  11. # --preset cbr N (режим CBR, где N - значение постоянного битрейта) N=32 40 48 56 64 80
  12. #   96 112 128 160 192 224 256 320
  13. # --preset insane (постоянный максимальный битрейт = 320 kbps, получаемые файлы
  14. #   будут иметь максимальный размер).
  15. # --preset -Vx (режим VBR, где x - значение параметра 0...9, смотри таблицу)
  16. # --preset x -v (режим VBR, где x - значение параметра качества hifi, cd, studio и т.п.,
  17. #   смотрите таблицу)
  18. #
  19. #   рекомендуются первые 3 режима, в зависимости от требуемого качества и объема
  20. #   файлов.
  21. #   вторая строка указывает первый и последний треки CD диска.
  22. #   для запуска сценария введите в консоли bash skript_mp3 и нажмите на Enter.

Создаем текстовый файл, например с именем skript_mp3, в который помещаем данный текст и сохраняем файл. Расположение файла важно с точки зрения удобства работы. Если папка, в которой вы расположите скрипт, не попадет в описание переменной окружения $PATH, и при этом ваша консоль будет открыта в другом каталоге то при попытке запуска консоль даст сообщение о том, что сценарий не найден. Кроме того расположение файла в другом каталоге может быть связано с требуемым изменением прав на редактирование файла и папки, в которой он размещен. Учитывая, что при запуске консоли последняя как правило открывается с адресом домашнего каталога, удобно расположить файл именно в нем, т.е. в домашнем каталоге.

Первая строка сценария выводит содержание CD-диска на экран.
Вторая задает переменную i для количества треков диска, в данном случае 10. (Если указать к примеру `seq 5 8` в кавычках, то будут ограбблены с 5-го по 8-й треки, если указать к примеру seq 1 2 5 без кавычек, то будут ограбблены треки 1, 2 и 5. Эти опции однако вряд ли нужны, дабы не испортить скрипт, к тому же чаще всего кодят диск целиком).
Третья - пятая строки организуют цикл, выполняемый i количество раз, соответственно по одному разу для каждого трека.
Шестая и последующие строки закомментированы и служат напоминанием наиболее удобных режимов.
При заданных в данном случае параметрах кодирования получаемые файлы будут обработаны с переменным битрейтом в границах 220-260 kbps и будут записаны в папку /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 kbps 5,2 Мб, при кодировании со среднезаданным битрейтом (режим abr) 160 kbps 4,2 Мб.
При кодировании композиции Криса Кельми "Ангел завтрашнего дня" продолжительностью 4 мин 5 сек в режиме standard был получен файл размером 5,2 мБ, в режиме extreme размером 6,4 Мб, в режиме medium размером 4 Мб. Видно, что размер файла получается разным в зависимости не только от продолжительности трека и метода кодирования, но и от особенностей музыкального материала.

Данное описание составлено после относительно краткого знакомства с утилитой lame, на этом ее возможности не ограничиваются, она способна делать многое, однако это уже отдельное чтение описания утилиты, ее пресетов и оценок специалистов. Единственное, на чем я не заострял внимание, в силу ограниченности времени и пока относительно слабого знания команд Linux, это автоматическое определение количества треков диска и соответственно передача их в сценарий, а так же автоматический поиск через интернет текстового контента к получаемым файлам. Это возможно и в принципе довольно удобно, но не всегда нужно, к тому же на мой взгляд в данном случае получилось оптимальное сочетание качества и удобства работы.

Описанные утилиты свободны в распространении.

Материалы:
Использование пресетов mp3 кодера Lame
Из описания к кодеку lame
Lame

Выражаю благодарность Исакову А.Н. за помощь, оказанную в написании данного материала.

Ваша оценка: Ничего Средняя оценка: 9.5 (11 votes)

Спасибо! =)
Да прибудет с вами сила

Чудесная статья, спасибо! А как насчет такой же статьи, но о OGG ? Этот формат получше, чем MP3, и юридически более свободен, имхо.

И заодно практический вопрос по MP3. Как у каждого из нас, у меня тоже есть коллекция любимых мптришников, рассортированных по исполнителям по их папкам - /Меладзе, /Виагра, /Кузьмин и т.д.
Как обычно, все записи шалят насчет стандартного уровня - бывает, одни едва слышны, другие бьют по ушам своей дикой громкостью.
Знаю, что есть утилитка для нормализации звука

Ой, нечаянно нажал Enter

Да, так вот - знаю, что есть консольные утилитки для нормализации звука - normalize, normalize-mp3, normalize-ogg, которыми можно легко нормализовать уровень звука музыкальных файлов.

Проблема в чем - как сделать, чтобы она обработала не одну песенку, а сразу группу песен, т.е. вот те самые папки исполнителей с их песнями? Так будет быстрее и удобнее: указал их общую корневую папку - и можно отдыхать, пока не обработаются все песни всех исполнителей.

Это первый, наверно, простой вопрос, и вот второй, посложнее: как лучше нормализовать песенки - в исходном MP3 (OGG) формате? Или сначала эти форматы перевести в несжатый (WAV) формат, нормализовать, а потом снова перевести в сжатый?

Понятно, что и в том, и в другом случае неизбежны потери в качестве звука, и поэтому интересует, какой из этих вариантов внесет наименьшие искажения.

Заранее спасибо!

VSL аватар

По поводу формата OGG - согласен, этот формат лучше, его и сам предпочитаю, в последнее время жму больше как раз в него. 8) Такой подробной статьи я не писал, однако можете посмотреть по этой ссылке усеченный вариант. Кроме того в OGG можно жать программой "Звуковыжималка" (программа копирования звуковых CD), которую можно поставить из репозитария. Имя пакета - sound-juicer или просто juicer, не помню уже. К сожалению качество/битрейт из интерфейса эта программа не регулирует, хотя это возможно сделать из центра настройки KDE. По умолчанию жмет в mp3 с довольно низким битрейтом, к тому же по моему постоянным, в OGG жмет с битрейтом 160, что наряду с более высоким качеством самого формата уже неплохо.

По поводу нормализации - никогда этим не занимался, поэтому просто не подскажу. Пакет называется normalize-audio, можно поставить из репы. Данный пакет универсальный, может работать с файлами mp3, ogg и wav. Опции можете посмотреть по командам normalize-audio --help или man normalize-audio. Не исключено что с использованием конвейера можно запустить как вы желаете "весь фильм".

Что касается переформатирования - могу только предполагать, что лучше работать в своем формате без переконвертировки.

Спасибо! Никак не мог найти нужный кодек для mp3 Теперь доволен

Вы чо, в натуре? Какие еще мп3 с огг в 21 веке? Все реальные люди давно уже на lossless перешли. Вы бы еще RealAudio вспомнили!

http://poplinux.ru/node/20 тебе сюда. А форматы mp3 и ogg никуда не делись и думаю еще долго не куда не денуться.

RSS-материал