LINUX.ORG.RU

mid3iconv удаляет ID3v1-теги

 , mid3iconv


1

2

Беру файл с ID3v1-тегами

$ mid3iconv -eCP1251 file.mp3
Updating file.mp3
Гарантированно получаю файл без тегов, ни v1, ни v2.

Ожидаю получить файл с ID3v2-тегами в Unicode.

Это баг или так задумано? У вас всё работает?

$ mid3iconv --version
mid3iconv 0.3                                                                                                                        
Uses Mutagen 1.38
А как правильно? Мне из мана непонятно, как программа должна работать.

cast Bass

Заметил обход - опция --force-v1.

★★★

Последнее исправление: damix9 (всего исправлений: 4)

Мой опыт исчерпывается тем, что описано по ссылке.

Флаг --remove-v1 должен иметь результатом MP3-файл с тэгами лишь второй версии.

Если у тебя обновляются/удаляются тэги первой версии, но не создаются тэги второй — скорее всего, что-то не так под капотом в питоньем коде.

Код версии 1.38 здесь.

Bass ★★★★★
()
Последнее исправление: Bass (всего исправлений: 4)
Ответ на: комментарий от forest22

Потому что в CP1251 этих символов нет.

Если музыка щападноевропейская, и тэг первой версии, то ISO-8859-1 или windows-1252 (и эти две кодировки не эквивалентны).

Bass ★★★★★
()
Ответ на: комментарий от Bass

Ну вот если так сделать, у меня получается не то, что в инструкции.

--remove-v1 работает как и ожидается, но только если задан --force-v1. Иначе v1 удаляются в любом случае, а v2 не создаются.

Но в доке написано другое. Если я правильно понимаю, если v2 нет, v1 должны читаться независимо от опции --force-v1.

damix9 ★★★
() автор топика
Ответ на: комментарий от Bass

Разобрался. Это не баг. Это я давал программе файлы, в которых ID3v2-теги были, но почти пустые. Большая часть метаданных там в ID3v1. Начало одного из таких файлов в HEX:

0000:0000 | 49 44 33 03  00 00 03 71  69 1F 54 53  53 45 00 00 | ID3....qi.TSSE..
0000:0010 | 00 05 00 00  03 6D 73 6C  00 41 50 49  43          | .....msl.APIC   
Теги второй версии пишутся в начало файла, а первой - в конец. Программа пишет всегда только v2. А вот читает или v2 или v1. Если есть заголовок v2, то читает его, если нет, то читает v1. Но если передана опция --force-v1, то в любом случае читает v1.
       --force-v1
              Use an ID3v1 tag even if an ID3v2 tag is present
Use здесь в смысле read.

Но это работает на уровне заголовков, а не отдельных тегов. Получается, если заголовок v2 есть, но часть тегов пустые, прочитаются они, и так пустыми и запишутся, а значения из v1 потеряются.

Но если верить https://mutagen.readthedocs.io/en/latest/changelog.html#release-1-42-0 в версии 1.42.0 библиотеки это поменяли и теперь это решение принимается на уровне отдельных тегов.

ID3: Always read id3v1 tags and include them when no id3v2 equivalent exists. Can be disabled with the new load_v1 option, see id3.ID3.load() #pr357 (Fredrik Strupe)
Видимо, новая версия mid3iconv правильно читает даже такие кривые файлы.

forest22 dataman

damix9 ★★★
() автор топика
Ответ на: комментарий от damix9

Я запускал mid3iconv с параметрами -eCP1251 --remove-v1.

Мне бы скрипт, который «возвращает обратно» диактрические знаки в латинице.

А так, я в описанных вами тонкостях не разбираюсь.

forest22
()