Кодируем opus в Linux, часть вторая - mp3pus

debianeach

Опубликован:  2020-04-21T08:18:11.903504Z
Отредактирован:  2020-04-21T08:17:13.082375Z
2300
Продолжим разговор о прикладных задачах для десктопа на каждый день, и в частности, о кодировании аудио-данных. В этом обзоре рассмотрим простой способ получения группы файлов opus из группы файлов mp3 с сохранением исходных метаданных. Героем этого исследования станет утилита командной строки mp3pus, я покажу её установку в Debian buster и очевидные способы использования.

1. О задаче

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

У нас есть формат opus - достаточно молодой, но уже сейчас понятно, что он обеспечивает максимальное сжатие и при этом минимальную деградацию аудиоданных. По результатам слепых прослушиваний opus всегда держит пальму первенства даже на дефолтном, достаточно низком битрейте (96 kbps).

Коллекции mp3, которые сегодня доступны в сети в совершенно непостижимых объёмах, как правило содержат файлы с максимальным для этого формата битрейтом - 320 kbps, и как следствие файлы mp3 имеют неудобный для мобильных устройств размер файла. Ничего не поделать, mp3 - формат древний и крайне неэффективный.

Полученный из файла mp3 файл opus за счёт низкого и переменного битрейта будет иметь существенную разницу в меньшую сторону в размере, при этом качество звучания такого файла в мобильном плеере будет практически неотличимым от качества звучания оригинального mp3 файла. Для мобильных устройств разница в размера коллекции может оказаться значимой, поэтому некоторые пользователи хотели бы перекодировать свои коллекции mp3 в opus, но не знают, как это сделать.

Преобразование из одного формата в другой формат в сущности достаточно просто реализуется, но вот перенос метаданных из одного формата в другой может принести оператору компьютера достаточное количество головной боли. Программа mp3pus, о которой пойдёт речь далее, избавит оператора от трудностей и даст возможность получить из группы файлов mp3 группу файлов opus с уже заполненными метаданными и в одно действие.

Этот обзор полностью посвящен утилитарному средству для борьбы с головной болью - программе mp3pus, Дебианыч расскажет, где эту программу можно скачать, покажет, как её установить на Debian buster, и научит правильно её использовать.

2. Подготовка к установке mp3pus

Итак, в моём распоряжении есть великолепный десктоп Debian buster с рабочим столом LXDE.

SpqksAOQd3.png

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

mp3pus использует lame и opusenc для преобразования данных из одного формата в другой, поэтому необходимо установить эти инструменты.

sudo apt install lame opus-tools

fh7KEr2hBu.png

Кроме этого, в зависимостях у mp3pus два модуля Питона: mutagen и chardet, их нужно установить заранее из официальной репы Debian.

sudo apt install python3-mutagen python3-chardet

IX2aiBjrTJ.png

Поскольку на текущий момент исходный код mp3pus доступен только в Git-репозитории программы, а установить его можно только при помощи pip, необходимо установить git и pip.

sudo apt install python3-pip git

qKogZ7IrWD.png

Все перечисленные инструменты безусловно можно установить одной командой с перечислением всех необходимых для правильной работы mp3pus пакетов.

sudo apt install -y python3-pip python3-mutagen python3-chardet lame opus-tools git

Сразу после завершения установки всех запрошенных пакетов система готова к установке собственно mp3pus.

Для справки: для удобной работы с метаданными файлов mp3 и opus крайне рекомендую установить дополнительно следующие пакеты: eyed3, puddletag, audacious.

3. Загрузка и установка mp3pus

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

mkdir workspace
cd workspace

ut7F7AQclO.png

На текущий момент mp3pus доступен только в Git и в сущности находится в процессе тестирования, тем не менее уже сейчас программа набрала достаточный для повседневного использования функционал. Для установки программы достаточно клонировать Git-репозиторий mp3pus.

git clone https://github.com/newbie-c/mp3pus.git

8Xi2pDENGm.png

Теперь нужно зайти в базовый каталог программы - mp3pus.

cd mp3pus

7JkY6t76fi.png

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

sudo pip3 install .

fPXZx2oQFV.png

Следует обратить внимание на точку в конце команды, в данном случае она обозначает текущий рабочий каталог и обязательна.

Замечание: установка пакетов с помощью pip непосредственно в систему не всегда приветствуется, но в некоторых случаях оправдана, в случае с mp3pus никакого урона операционной системе не наносится, у программы отсутствуют компилируемые модули, а установка заключается только в копировании файлов и создании линка в одном из каталогов переменной окружения PATH.

Всё, mp3pus установлен и готов к работе.

ie4rkPq8sf.png

Как видно на снимке экрана, у программы есть минимальная справка, которую можно получить прямо в командной строке вызовом mp3pus с ключом -h или --help.

4. Использование mp3pus

Как уже было сказано, программа mp3pus при перекодировании данных из формата mp3 читает и сохраняет метаданные файлов в формат opus. Поскольку mp3 довольно древний формат, он поддерживает несколько базовых версий тегов: ID3v1, ID3v2.3, ID3v2.4 etc. В общем-то метаданные в mp3 - это полная катастрофа для программиста.

mp3pus отлаживался и тестировался с несколькими загруженными из сети (rutracker.org) mp3-альбомами и умеет качественно читать теги форматов ID3v2.3 и ID3v2.4 кодировок UTF-16 и UTF-8. Если метаданные ваших mp3-файлов читаются программами eyed3 или puddletag, то у mp3pus тоже не будет проблем с их сохранением.

В моём хозяйстве есть пара mp3 альбомов, на их примере я и продемонстрирую работу mp3pus. Давайте взглянем на первый файл каждого из этих альбомов с помощью eyeD3.

DAQE7lMAhp.png

Ka31Pghy5Z.png

Как видно на снимках экрана выше, файлы отличаются друг от друга версией ID3 тегов и составом тегов. Синим на снимках экрана подчёркнуты текстовые поля метаданных, в которых обычно сохраняют комментарии, mp3pus умеет сохранять только такие два типа комментариев. Красным подчёркнуты поля с картинками, mp3pus умеет читать и сохранять первый найденный в метаданных FRONT_COVER.

Приступим к практическому применению программы. Как видно из справки программы, mp3pus имеет два обязательных ключа:

  • ключ -i задаёт имя каталога, в котором хранятся исходные файлы mp3;
  • ключ -d задаёт имя каталога, в который будут сохранены полученные в результате кодирования файлы opus.

Заданные этими ключами каталоги должны существовать. Таким образом вызов программы будет выглядеть следующим образом:

mp3pus -i 2005\ Массква/ -d ~/opus

Нажимаем enter, программа приступает к кодированию и выдаёт на экран последовательно имя каждого файла mp3 из исходного каталога и имя полученного файла opus.

63UBjX1zJ5.png

Следует дождаться завершения кодирования всех файлов, а затем заглянуть в каталог назначения.

y6aiww9nuY.png

Давайте посмотрим на полученный в итоге первый файл из каталога назначения.

FuMgLNBhlV.png

Как видно на снимке экрана, метаданные полученных файлов opus соответствуют метаданным исходных файлов mp3, но не содержат картинку. Чтобы сохранить картинку, у mp3pus имеется ключ -p.

mp3pus -i 2005\ Массква/ -d ~/opus -p

eSScVUqPvr.png

Если открыть полученные таким образом файлы opus в плеере, будет очевидно, что теперь картинка в метаданных присутствует.

RWhFkon8F2.png

Достаточно часто бывает, что альбом mp3 содержит картинку в каталоге с файлами, а в метаданных картинка отсутствует, в этом случае картинку можно сохранить с помощью соответствующей опции энкодера, её можно задать ключом -o.

mp3pus -i 2010\ Май\ Ворлд/ -d ~/opus -o "--picture 3||'front cover'||'2010 Май Ворлд/folder.jpg'"

0sw4LroAuT.png

В этом случае используется ключ opusenc - --picture и определённая в man opusenc спецификация файла картинки. И в итоге все полученные файлы opus будут иметь эту картинку.

98uL8nmd8M.png

Опции энкодера следует рассмотреть отдельно и более детально, об этом далее...

5. Опции энкодера mp3pus

Для кодирования файлов opus программа mp3pus использует стандартный энкодер opusenc, который в свою очередь позволяет достаточно гибко определять параметры полученных файлов. Опции энкодера в программе mp3pus можно задать с помощью ключа -o, который даёт возможность перечислить желаемые опции opusenc в двойных кавычках. Например:

mp3pus -o "--bitrate 64" -i ~/audio/2010\ Май\ Ворлд/ -d ~/opus/

omckYH0rLF.png

Программа mp3pus принимает и транслирует следующие опции энкодера:

  • --bitrate N.nnn, где N может принимать значения в интервале от 16 до 256 включительно и допускает десятичные дроби;
  • --vbr или --cvbr или --hard-cbr;
  • --downmix-mono;
  • --framesize N, где N может принимать одно из следующих значений 2.5, 5, 10, 20, 40, 60;
  • --comp N, где N может быть целым числом от 0 до 10 включительно;
  • --max-delay N, где N может быть целым числом от 0 до 1000;
  • --picture в соответствии с определённой в man opusenc спецификацией заданного файла картинки.

Все остальные переданные пользователем опции энкодера будут автоматически отсеены специальным алгоритмом. Особенность opusenc - энкодер пишет заданные пользователем опции в метаданные полученного файла.

bvNWStYmL8.png

Следует иметь ввиду, что попытка передать энкодеру неверные опции не увенчается успехом, а исполнение mp3pus в этом случае будет прервано с ошибкой, например:

mp3pus -o "--bitrate 258" -i ~/audio/2010\ Май\ Ворлд/ -d ~/opus/

Команда содержит недопустимое значение битрейта, на терминале будет следующий выхлоп.

Cl7FlFxzzt.png

6. Заключение

Программа mp3pus разрабатывается под лицензией GNU GPLv3, имеет открытый исходный код и доступна для скачивания всем желающим. На текущем этапе разработки функционал mp3pus подтверждён и достаточен, но в перспективе не исключено, что программа будет совершенствоваться.

Если у вас есть предложения и пожелания относительно функционала mp3pus, пишите в комментариях, я обязательно их учту. Если есть желание принять участие в разработке программы, такую возможность тоже можно предусмотреть, исходник открыт и доступен всем.

Начальная стадия разработки mp3pus детально описана в соседнем блоге серией статей:

  1. Пишем на Питоне конвертер mp3 в opus для Linux;
  2. Пишем на Питоне конвертер mp3 в opus для Linux, установка с pip;
  3. Пишем на Питоне конвертер mp3 в opus для Linux, обработка исключений;
  4. Пишем на Питоне конвертер mp3 в opus для Linux, сохраняем картинку.

Исходный код программы доступен в моём профиле на github.com.

Комментарии: