На первых порах для Linux (и других систем тоже) предлагалось несколько
кодеков позволяющих кодировать в MP3: Lame (Lame Ain’t an MP3 Encoder)
, gogo, bladeenc, mp3enc, xingmp3enc, l3enc и другие. Со временем
большинство проектов прекратило развитие, и сейчас в репозитариях
дистрибутивов из всего разнообразия предлагаются обычно lame и gogo.
Кстати последний также берет свое начало от lame, но написан на языке
assembler и по скорости кодирования немного обходит lame.
Все параметров которые можно установить при кодировании эта утилита
имеет множество, все они описаны в документации, также узнать о или
узнать их можно набрав lame -? (–help – для короткого варианта),
остановлюсь на наиболее интересных. Поддерживается кодирование с
постоянным и переменным битрейтом от 32 до 320 кбит/сек.
Самым простым
вариантом использования будет просто набрать в командной строке lame
audio.wav и в результате на выходе получим файл audio.wav.mp3,
закодированный c постоянным битрейтом 128 кбит/сек. Музыку записанную с
таким качеством можно слушать только на компактных проигрывателях, в
любом другом случае лучше указать больший битрейт воспользовавшись
параметром -b, заодно вторым параметром лучше указывать и имя
выходного файла:
$ lame -b 256 audio.wav audio.mp3
Кодирование с постоянным битрейтом приводит к нерациональному
использованию дискового пространства и потере качества в местах
особенно насыщенной части мелодии. Поэтому в последнее время
практически все кодеки позволяют кодировать с переменным битрейтом
(variable bitrate – VBR), а проигрыватели в том числе и аппаратные уже
различают такие файлы.
Для кодирования с использованием VBR используем параметр -v и в
параметре -V цифра указываем дополнительно качество кодирования. По
умолчанию качество установлено в 4. Высшему качеству соответствует 0 –
(результирующий файл больше), а 9 – соответствует низшему качеству
(файл меньше). Альтернативно при помощи -b и -B указываетя минимальный
и максимальный битрейт соответственно.
$ lame -v -V 0 audio.wav audio.mp3
Кодек Lame поддерживает еще один режим называемый – average bitrate
(ABR), это что-то среднее между constant bitrate CBR и VBR. При
кодировании указывается среднее значение и при необходимости программа
сама его увеличивает или уменьшает. Для кодирования с использованием
ABR используется параметр –abr битрейт:
$ lame –abr 224 -b 64 audio.wav audio.mp3
Файл закодированный такой строкой получается на 10% меньше чем
кодированный с 256 постоянным битрейтом, а качество отличить трудно. По
умолчанию lame на нижних битрейтах (до 160 kb/s) для кодирования стерео
сигналов использует режим Joint stereo, при этом левый и правый каналы
кодируются вместе, но один канал кодируется полностью, а второй как
разносная информация то есть отличие первого от второго.
Есть несколько
стандартов представления информации joint stereo, но всех их
объединяет существенный недостаток: плохая передача стерео эффектов.
Качество можно изменить задав режим при помощи ключа -m, при этом
возможен вариант: (m)ono, (s)tereo (кодируется два канала, но кодер
может выделить при необходимости больше места одному из них –
оптимальный вариант) и (j)oin. На высоких битрейтах используется
по-умолчанию режим Stereo.
Для каждого битрейта используется свой фильтр, но его можно изменить в
ручную с помощью -q <arg>, где <arg> число от 0 до 9. По
умолчанию используется 5, рекомендуется –q 2 (эквивалент –h). Режим -f
(-q 7) отключает психоаккустические фильтры, что делает звук чище на
высоких битрейтах, но существенно ухудшает на низких. Кстати возможна
компиляция Lame с поддержкой Ogg Vorbis, для кодирования в этот формат
следует использовать параметр –ogg.