ID3tag: CLI way vs GUI easytag way

ID3tag: CLI way vs GUI easytag way


mid3v2, id3v2, lltag, id3tool, id3info, mid3iconv

Линуксоид должен стремиться уметь всё делать в консоли - мне прочно вьелась в мозг эта максима. Но должен признаться, что годы не удавалось следовать ей в полной мере. Есть куча костылей инструментов, но все либо ломаются, либо не работают. И вот в очередную итерацию поисков, когда меня припекло снова, я нашёл решение, надеюсь, его не сломают. 


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


Небольшая предыстория


Я храню музыку только локально и принципиально не пользуюсь стримминговыми сервисами, чтобы не зависеть от интернет соединения и правозабирателей. В любой момент в мире 1984 могут что-то отменить, не поделить права, и вот у вас в библиотеке опять никогда не было то, что вы слушали ещё вчера. А ещё я старый пират и принципиально не желаю отстёгивать стримминговым помойкам деньги. Думаю после событий 2014, 2022го годов многие поняли, на какие грабли они наступили, храня свои коллекции у добрых буржуинских дядь. Оставшись без своих денег, без оплаченных игр, фильмов, музыки, просто потому, что они русские или граждане РФ и на сервис для белых господ их больше не пускают.


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


В силу исторических причин, далеко не всегда id3tag указаны верно или вообще имеются. Особенно это актуально для старых аудиокниг и редких исполнителей. Чаще всего я использовал GUI easytag как наиболее удобную программу с логичным интерфейсом и возможностью заполнить у выделенных файлов отдельный тэг общим значением. Но меня всегда тяготило это, что я не могу сделать это в консоли без камлания с бубном.


Я слушаю музыку в консоли в плеере cmus, он к сожалению не умеет редактировать тэги, но хотелось бы править их не покидая консоли. А также заполнять тэги у множества файлов используя find. Вжик, и готово, и не надо грузить GUI софт, кликать мышью и копипастить. Вот и вся предыстория и мотивация, зачем мне mp3 и именно CLI решение.





Обзор утилит




mid3v2 — Я сразу привожу это лучшее решение, потом остальные. Вот этой конструкции достаточно, чтобы ввести основные теги: артист, альбом, трек. Для удобства восприятия написал её в три строки со слешами-разделителями:


mid3v2 -a  "ARTIST" /path/to/file.mp3 ; \
mid3v2 -A "ALBUM" /path/to/file.mp3 ;  \
mid3v2 -t "SONG/TITTLE" /path/to/file.mp3


Для универсального использования, чтобы не редактировать каждую строку, лучше использовать такую конструкцию:

FILE=""; ART=""; ALB=""; TIT=""; \
mid3v2 -a "$ART" -A "$ALB" -t "$TIT" "$FILE"

Например:

FILE="Технология - Всё, что ты хочешь.mp3"; \
ART="Технология"; ALB="Нажми на кнопку"; TIT="Всё, что ты хочешь."; \
mid3v2 -a "$ART" -A "$ALB" -t "$TIT" "$FILE"






Это было решение на базе библиотеки python-mutagen. Остальные утилиты работают на id3lib и с ними большие проблемы.





id3v2 — с ней я провозился сутки, пока мне не рассказали, что его опять сломали. " id3v2 в арче не будет работать с не-латинскими тегами, т. к. он сломан. Точнее, сломано в апстриме, но в дебиане его основательно пропатчили, а в арче нет.)" То есть у меня в Manjaro Linux он нормально не работает, но у вас на дебиане вероятно заведётся.

id3v2 -2 -a  "ARTIST" /path/to/file.mp3 ; \
id3v2 -2 -A "ALBUM" /path/to/file.mp3 ;  \
id3v2 -2 -t "SONG/TITTLE" /path/to/file.mp3

После выполнения у меня в тэгах в плеере cmus вместо букв кракобябры. Это можно исправить, применив после:


mid3iconv "/path/to/file.mp3"

...но лучше использовать исправную утилиту выше.






lltag — пишет почему-то только в id3v1, там кириллицу низзя, помещается с ошибками. Ключ -2 отсутствует, ключи --mp3read=2, --mp3v2, --id3v2 не работают, или заточены для другого. Как записать в id3v2 непонятно.



lltag --yes -a  "ARTIST" /path/to/file.mp3 ; \
lltag --yes -A "ALBUM" /path/to/file.mp3 ;  \
lltag --yes -t "SONG/TITTLE" /path/to/file.mp3

mid3iconv после не спасает.




id3tool — кажется изначально заточен только под id3v1, и пишет в id3v1 в кодировке cp1251 и его лучше вообще не использовать.

id3toll -r  "ARTIST" /path/to/file.mp3 ; \
id3tool -a "ALBUM" /path/to/file.mp3 ;  \
id3tool -t "SONG/TITTLE" /path/to/file.mp3






Просмотр и чистка тэгов





Следует отметить схожесть ключей id3v2 и mid3v2.


Удаление тэгов:

mid3v2 -s /path/to/file.mp3   # удалить тэги v1
mid3v2 -d /path/to/file.mp3  # удалить тэги v2
mid3v2  --delete-all /path/to/file.mp3  # удалить оба: v1 и v2
mid3v2  -D /path/to/file.mp3  # краткая запись --delete-all

Просмотреть имеющиеся в файле тэги обоих версий:


mid3v2 -l /path/to/file.mp3


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


Назначить тэг по его коду:


mid3v2 --TPE1="Белка" /path/to/file.mp3
mid3v2 --TPE2="и Стрелка" /path/to/file.mp3


Удалить тэг по его коду:

mid3v2 --delete-frames=TPE3


mp3info — работает и довольно криво только с id3v1 тэгами, поэтому даже не буду приводить её примеры. Её функционал делает любая нормальная утилита.




Вспомогательные утилиты






mid3iconv — конвертация id3v1 в формат unicode в id3v2. Помогает в случае кракозябр, когда плеер не поддерживает старые досовые тэги и русскеи буквы там.


Простое перекодировывание:

mid3iconv /path/to/file.mp3


Явно указать, в какой кодировке файл, и после удалить id3v1 тэги.

mid3iconv -e CP1251 --remove-v1 /path/to/file.mp3


mp3unicode — Эта утилита может перекодировывать из одной кодировки в другую и удалять тэги


Удаление всех тэгов, v1 и v2:

mp3unicode -s utf8 -1 none -2 none /path/to/file.mp3


Перекодировать id3v1 тэги в кодировке cp1251 в id3v2 тэги в кодировку unicode:

mp3unicode --source-encoding cp1251 \
--id3v1-encoding none --id3v2-encoding unicode /path/to/file.mp3


Кстати это удобно заворачивать в find для "массовых репрессий".






Групповые операции над файлами






Пример массовой обработки с mp3unicode:


find . -type f -iname "*.mp3" -print -exec mp3unicode --source-encoding cp1251 \
--id3v1-encoding none --id3v2-encoding unicode {} \;


В текущем каталоге назначить всем mp3 тег артиста:

find . -maxdepth 1 -type f -iname "*.mp3" -print -exec mid3v2 -a "ARTIST" {} \;


Рекурсивно удалить у всех mp3 второй тэг TPE2:

find . -type f -iname "*.mp3" -print -exec mid3v2 --delete-frames=TPE2 {} \;





Заключение



Я тут с удивление узнал, что в id3v1 не должно быть ничего, кроме латиницы. Хотя не должно не значит нет, ведь есть русские буквы в старых тэгах id3v1. Или я ошибаюсь?



ССЫЛКИ:



  1. https://www.baeldung.com/linux/mp3-metadata-get-command-line
  2. https://www.linux.org.ru/forum/multimedia/17559694




Report Page