Заполнение mp3-тегов скриптом

Довелось скачать саундтрек к игре в виде кучи файлов без тегов вообще.

Захотелось на скорую руку заполнить хотя бы названия и номера треков (альбом/год/жанр — одинаковые для всех, с этим все сильно проще).

Для начала из имени каждого файла нужно вычленить название трека. Используем sed в однострочном цикле для разделения имени файла на три блока. Блоки в sed выделяются экранированными скобками: начало — \(, конец — \)

 
 
  1.                                                        вычленяем блок №2
  2.                                                         |             |
 
 
  1. for file in *.mp3; do name=$(sed "s/\(^.*_.\{1,3\}_\)\(.*\)\(\.mp3\)/\2/" <<< $file); echo $name ; done;
 
 
  1.                                           |                     |    
  2.            блок №1: начало строки, любые символы,          блок №3: .mp3
  3.                     подчеркивание, 1-3 любых символа,
  4.                     подчеркивание

Вывод:

 
 
  1. chat_thiscouldbeAWESOME
  2. lab sewers
  3. chat_downthe
  4. ...

(да, если вы решаете проблему с помощью регулярных выражений — у вас уже 2 проблемы, но в данном случае это отличное решение).

Убедившись что имена получаются корректные, меняем echo $name на редактор тегов mid3v2

 
 
  1. for file in *.mp3; do name=$(sed "s/\(^.*_.\{1,3\}_\)\(.*\)\(\.mp3\)/\2/" <<< $file); mid3v2 -t "$name" "$file" ; done;

Самое сложное сделано. Теперь номера треков (всего их 46, так что это число я подставляю вручную):

 
 
  1. i=1; for file in *.mp3; do mid3v2 -T  "${i}/46" "$file" ; ((i+=1)); done;

Все одинаковые для треков теги заполняются совсем просто, например год:

 
 
  1. for file in *.mp3; do mid3v2 -y 2010  "$file" ; done;

PS: утилита mid3v2 (рекомендуется как полностью поддерживающая v2/utf8-теги) входит в питоновский пакет mutagen и ставится примерно так (для debian/ubuntu)

 
 
  1. apt install python3-mutagen

или так (установка в пользовательский профиль из репозитория pypi)

 
 
  1. pip3 install --user mutagen

Помойка из музыки — не наш метод

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

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

Наглядная демонстрация ниже, но все происходящее можно описать в три шага:

  1. Далеко не всем нужный шаг, но если музыка в lossless-формате и не порезана на отдельные файлы (напр. cue flac) — в первую очередь их нужно порезать. Это потребуется и для обработки файлов впоследствии, и для беспроблемного проигрывания их на мобилках, чьи плееры как правило ужасно поддерживают работу с cue-таблицами. Для шинковки я использую k3b, которая у меня просто есть под рукой, но под виндой сойдет любой аудиоконвертер, тем более что их зачастую встраивают в плееры.
  2. Полученный после порезки, или изначально скаченный в таком виде набор файлов следует сгрузить в софтину musicbrainz picard (есть под винду и линух), которая распознает набор файлов и проставит все причитающиеся теги. До того как я открыл для себя этот софт, я долго и безуспешно воевал с треками группы «Megadeath», альбомом «Black Album» Металлики и прочими такими вещами.
  3. Последний довольно важный шаг — проставить для наших файлов теги ReplayGain. Как правило эту функцию поддерживают плееры и аудиоконвертеры, а суть ее в том, что софт определяет громкость каждого файла и прописывает тег, который позволяет плееру внести поправку в громкость при его воспроизведении. Таким образом, все файлы с этим тегом будут звучать в плеере с одинаковой громкостью, и не придется ее вечно подкручивать взад-вперед.

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

И под конец демонстрация процесса.