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. Или я ошибаюсь?
ССЫЛКИ:
- https://www.baeldung.com/linux/mp3-metadata-get-command-line
- https://www.linux.org.ru/forum/multimedia/17559694