goMusicTagFixer - простая утилита на go для правки mp3-тэгов - Zhbert's Home Нажмите "Enter", чтобы перейти к контенту

goMusicTagFixer — простая утилита на go для правки mp3-тэгов

Вот бывало у вас такое, что давно уже зудит где-то на краю сознания идея утилитки, но руки все не доходят? У меня вот да — где-то примерно с 2012 года.

goMusicTagFixer — консольная утилита для быстрой правки тэгов в mp3 файлах на название директории, в которой они лежат. И да, она написана на Go.

Как я к этому пришел? Все просто. Когда-то в далеком-далеком 2012 году, когда у меня на работе поя… Хотя стоп. Это было еще раньше, где-то в 2010, когда я купил себе iPod Classc на 160Гб и впервые в жизни вляпался в iTunes.

Как и у многих, у меня помимо «полных» дискографий исполнителей в коллекции музыки есть каталоги, куда навалено кучей всего подряд в одном примерно стиле, и назвается это все «Разное» или «В машину», или «Для тренировки».. Ну и так далее. Поскольку файлы там набраны из совершенно различных источников, в тэгах творится абы что, а если даже и не абы что, то они все разные в плане исполнителя и названия альбома. Впервые я в это вляпался, когда залил в тунца свою любимую в тот момент директорию с файлами и обнаружил, что вместо одной «папки» в библиотеке создалось 300 исполнителей с одном альбомом и одной песней в нем. При заливке этого всего в плеер получилась такая же вакханалия, что не придало совершенно никакого удобства пользованию им.

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

Да да, есть всякие комбайны для правки тэгов, но у меня тогда возникла идея именно простой утилиты с одной кнопкой «сделать зашибись». И вот я наконец дошел до того, чтобы ее сделать.

Тем более, что я давно хотел посмотреть на язык Go.

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

Скриншот goMusicTagFixer

Итак, в утилите есть всего пара команд.

  • scandir — рекурсивно сканирует каталог, откуда была запущена (да, достаточно просто прийти туда в терминале и запустить утилиту из любого места прямой ссылкой) и показывает результаты в виде «дерева». Эдакое «tree» из DOS, о котором я до сих пор вспоминаю с теплотой. Писал скорее ради фана, а не из-за необходимости. Ниже пример выхлопа на тестовой директории с файлами.
Starting program at 22:26:38 05-10-2020
Please enter the command:
scandir
Starting the folder scan at 22:26:41 05-10-2020
Temp
├─ 02 - Театр одного актера.mp3
├─ 03 - Последняя искра.mp3
├─ 04 - Шкатулка.mp3
├─ 05 - В последний раз.mp3
├─ 1983 - Rebel Yell
│  ├─ 01 - Rebel Yell.mp3
│  ├─ 02 - Daytime Drama.mp3
│  ├─ 03 - Eyes Without A Face.mp3
│  ├─ 04 - Blue Highway.mp3
│  ├─ 05 - Flesh For Fantasy.mp3
│  ├─ 06 - Catch My Fall.mp3
│  ├─ 07 - Crank Call.mp3
│  ├─ 08 - (Do Not) Stand In The Shadows.mp3
│  ├─ 09 - The Dead Next Door.mp3
│  ├─ Covers
├─ 1987 - Hot Track
│  ├─ 01 - Love Hurts.mp3
│  ├─ 02 - Shanghai'd in Shanghai.mp3
│  ├─ 03 - Carry Out Feelings.mp3
│  ├─ 04 - Razamanaz.mp3
│  ├─ 05 - Hair of the Dog.mp3
│  ├─ 06 - I Want to (Do Everything for You).mp3
│  ├─ 07 - This Flight Tonight.mp3
│  ├─ 08 - Broken Down Angel.mp3
│  ├─ 09 - Born to Love.mp3
│  ├─ 10 - My White Bicycle.mp3
│  ├─ 11 - Go Down Fighting.mp3
│  ├─ 12 - Vancouver Shakedown.mp3
│  ├─ Covers
├─ Космические Рейнджеры - Longway.mp3
├─ Космические Рейнджеры - Пробуждение.mp3
├─ Космические Рейнджеры 1 - Бой.mp3
├─ Космические рейнджеры 1 - Космический ветер.mp3
─────────────────────────────────────────
Scanning complete at  22:31:30 05-10-2020
Founded  49  mp3 files in  5  folders.

Почему-то форматирование здесь разукрашивает пример кода в вообще радужные цвета, но, надеюсь, это не помешает бегло глянуть на пример =)

  • deepscan — аналогичная первой, только дополнена для каждого mp3 файла информацией о его тэгах: исполнитель, альбом, название. Освновная задача — посмотреть, что там есть из коробки, а потом убедиться, что все сработало как надо. Выхлоп цветной, тэги визуально отличаются от дерева.
Please enter the command:
deepscan
Deep scan started at  22:29:25 05-10-2020
Temp
├─ 1983 - Rebel Yell
│  ├─ 01 - Rebel Yell.mp3
│     Artist:   Rebel Yell
│     Album:    Rebel Yell
│     Title:   Rebel Yell
│  ├─ 02 - Daytime Drama.mp3
│     Artist:   Rebel Yell
│     Album:    Rebel Yell
│     Title:
│  ├─ 03 - Eyes Without A Face.mp3
│     Artist:   Rebel Yell
│     Album:    Rebel Yell
│     Title:
│  ├─ 04 - Blue Highway.mp3
│     Artist:   Rebel Yell
│     Album:    Rebel Yell
│     Title:
│  ├─ 05 - Flesh For Fantasy.mp3
│     Artist:   Rebel Yell
│     Album:    Rebel Yell
│     Title:
│  ├─ 06 - Catch My Fall.mp3
│     Artist:   Rebel Yell
│     Album:    Rebel Yell
│     Title:
│  ├─ 07 - Crank Call.mp3
│     Artist:   Rebel Yell
│     Album:    Rebel Yell
│     Title:   Crank Call
│  ├─ 08 - (Do Not) Stand In The Shadows.mp3
│     Artist:   Rebel Yell
│     Album:    Rebel Yell
│     Title:   (Do Not) Stand In The Shadows
│  ├─ 09 - The Dead Next Door.mp3
│     Artist:   Rebel Yell
│     Album:    Rebel Yell
│     Title:
│  ├─ Covers
─────────────────────────────────────────
Scanning complete at  22:31:49 05-10-2020
Founded  49  mp3 files in  5  folders.
  • mp3settags — основная та самая команда «сделать зашибись». Рекурсивно пробегает по всем mp3-файлам в каталоге и прописывает им в «Исполнитель» и «Альбом» название каталога, в котором они лежат. Она же, кстати, на скриншоте.
Please enter the command:
mp3settags
Changing of mp3 tags started at  22:30:37 05-10-2020
Temp
02 - Театр одного актера.mp3  setting  Temp  album and artist name
03 - Последняя искра.mp3  setting  Temp  album and artist name
04 - Шкатулка.mp3  setting  Temp  album and artist name
05 - В последний раз.mp3  setting  Temp  album and artist name
Rebel Yell
01 - Rebel Yell.mp3  setting   Rebel Yell  album and artist name
02 - Daytime Drama.mp3  setting   Rebel Yell  album and artist name
03 - Eyes Without A Face.mp3  setting   Rebel Yell  album and artist name
04 - Blue Highway.mp3  setting   Rebel Yell  album and artist name
05 - Flesh For Fantasy.mp3  setting   Rebel Yell  album and artist name
06 - Catch My Fall.mp3  setting   Rebel Yell  album and artist name
07 - Crank Call.mp3  setting   Rebel Yell  album and artist name
08 - (Do Not) Stand In The Shadows.mp3  setting   Rebel Yell  album and artist name
09 - The Dead Next Door.mp3  setting   Rebel Yell  album and artist name
Covers
Hot Track
01 - Love Hurts.mp3  setting   Hot Track  album and artist name
02 - Shanghai'd in Shanghai.mp3  setting   Hot Track  album and artist name
03 - Carry Out Feelings.mp3  setting   Hot Track  album and artist name
04 - Razamanaz.mp3  setting   Hot Track  album and artist name
05 - Hair of the Dog.mp3  setting   Hot Track  album and artist name
06 - I Want to (Do Everything for You).mp3  setting   Hot Track  album and artist name
07 - This Flight Tonight.mp3  setting   Hot Track  album and artist name
08 - Broken Down Angel.mp3  setting   Hot Track  album and artist name
09 - Born to Love.mp3  setting   Hot Track  album and artist name
10 - My White Bicycle.mp3  setting   Hot Track  album and artist name
11 - Go Down Fighting.mp3  setting   Hot Track  album and artist name
12 - Vancouver Shakedown.mp3  setting   Hot Track  album and artist name
Covers
Космические Рейнджеры - Longway.mp3  setting  Temp  album and artist name
Космические Рейнджеры - Пробуждение.mp3  setting  Temp  album and artist name
Космические Рейнджеры 1 - Бой.mp3  setting  Temp  album and artist name
Космические рейнджеры 1 - Космический ветер.mp3  setting  Temp  album and artist name
Разное
01 - 2000 - Frozen Features - The solitude.mp3  setting  Разное  album and artist name
01 - Мир стекла.mp3  setting  Разное  album and artist name
02 - 2000 - Frozen Features - The cry of silence.mp3  setting  Разное  album and artist name
02 - Театр одного актера.mp3  setting  Разное  album and artist name
03 - Последняя искра.mp3  setting  Разное  album and artist name
04 - Шкатулка.mp3  setting  Разное  album and artist name
05 - В последний раз.mp3  setting  Разное  album and artist name
05 - О ней.mp3  setting  Разное  album and artist name
07 - Ангел.mp3  setting  Разное  album and artist name
08 - Гредят новый век.mp3  setting  Разное  album and artist name
Григорий Семенов - Музыка людей (Космические рейнджеры).mp3  setting  Разное  album and artist name
Космические Рейнджеры - Longway.mp3  setting  Разное  album and artist name
Космические Рейнджеры - Безграничный космос.mp3  setting  Разное  album and artist name
Космические Рейнджеры - Гимн.mp3  setting  Разное  album and artist name
Космические Рейнджеры - Пробуждение.mp3  setting  Разное  album and artist name
Космические Рейнджеры 1 - Бой.mp3  setting  Разное  album and artist name
Космические рейнджеры 1 - Космический ветер.mp3  setting  Разное  album and artist name
Космические рейнджеры 1 - Полетная.mp3  setting  Разное  album and artist name
Космические рейнджеры OST - Starflight(2).mp3  setting  Разное  album and artist name
Спящий - Abyssphere.mp3  setting  Разное  album and artist name
─────────────────────────────────────────
Changing complete at  22:30:37 05-10-2020
Changed  49  mp3 files in  5  folders.
  • help — показывает окно справки.

GitHub утилиты тут.