Відновлення кодування тегів ID3


12

Я успадкував близько 2000 файлів MP3. Для більшості з них їх теги ID3 відображаються в Amarok. Мені потрібне програмне забезпечення, яке модернізує теги ID3 до типу v2.4 $03(тобто кодування UTF-8), видаляє будь-які теги v1, а також розумно розбирається в оригінальному кодуванні для кожного конкретного випадку (швидше за все, одного з Windows-1252, UTF-16 або GB18030 без вмісту BOM).

Перш ніж я самостійно розпочати програмування на TagLib, чи є вже таке повне рішення, яке я можу використати?

Не рекомендую Musicbrainz - він сильно упереджений публікується музикою в США і майже непотрібний для мене. Не рекомендую загальне програмне забезпечення для маркування ID3, не спершу тестуючи його на мої вимоги - більшість із них

  • не підтримують v2.4
  • мають, чесно кажучи, тихі відсталі уявлення про кодування символів
  • не мають функцій автоматизації (я не хочу витрачати свій час на редагування вручну).

Я також не (ще) не зацікавлений лише у чищенні тегів, масовому перейменуванні чи категоризації програмного забезпечення; Я спершу зробив вищезазначений крок нормалізації.

Відповіді:


9

Ви хочете Ex Falso, редактор тегів, включений до проекту Quod Libet . Picard (тег MusicBrainz) може використовувати ту саму бібліотеку тегів, але QL створила її.

Зокрема, ви хочете, щоб бібліотека тегів Mutagen, яка підтримує id3v2.4 (а під "підтримкою" я маю на увазі "примусити" ... у військовому відношенні ...). Він також відмінний з кодуваннями символів і включає в себе основний тег командного рядка для написання сценарію ( mid3v2). Що стосується вашого етапу нормалізації, Mutagen зберігає теги лише в ID3v2.4. Це, безумовно, здатне перетворити весь текст у UTF-8, але вам може знадобитися сценарій цього самостійно (я вважаю, що за mid3v2замовчуванням інструменту є збереження поточного кодування, де це можливо, і я не знаю, чи можна сказати, щоб зберегти все в певному кодуванні). Мутаген написаний на Python.

Ex Falso - це приємний чистий графічний інтерфейс, який підтримує більшість основних функцій повторного розміщення тегів, які ви очікуєте. Я не думаю, що це робить багато на шляху пошуку в Інтернеті, і я не знаю, як це з творами альбому - Quod Libet це може підтримати; Ex Falso може зробити це за допомогою плагіна, якщо він існує, хоча він може не існувати. Мені ніколи не була потрібна ця функціональність - я використовую EF і mid3v2узгоджено, щоб вирішити свої потреби в перезаписі.

Ex Falso, частина проекту Quod Libet


mid3v2- це лише половина розчину. Після спроби це, безумовно, непогано з неправильно визначеними кодуваннями, від яких я страждаю, тобто оновлений тег ID3 все ще відображається неправильно в Amarok. Мутаген не відповідає моїй вимозі про «розумний розбір оригінального кодування»; це дуже припускає Latin1/ Windows-1252, що є стандартним, але марним для брудного реального світу. Я схильний не приймати цю відповідь зараз; Я дам можливість ще кілька днів для інших відповідей. Якщо нічого доброго не приходить, вас приймають.
daxim

цілком прийнятно. якщо ви кодер python, ви можете розглянути можливість написання сценарію, який використовує Mutagen, щоб: a) читати в існуючому тезі; b) виконувати кілька розумних кроків перетворення (виходячи з того, що ви підозрюєте чи знаєте кодування джерела), і c ) написати новий тег. звучить так, що це в основному крок перетворення, який mid3v2не надто яскравий, і це мене не дивує ... але я думаю, що в python є деякі модулі кодування символів (можливо, iconvабо подібні), які розумніші і можуть бути корисними для DIY- е.
хитати кіхот

Я не дуже сильний кодер пітона, або я маю ще кілька корисних пропозицій. можливо, хтось із stackoverflow матиме кращі ідеї, якщо ви закінчите писати власний сценарій.
хитаючий кіхот

9

Я не думаю, що ви збираєтеся знайти автономне додаток, яке виправить ваш конкретний вибір неправильно позначених кодувань. Маючи суміш cp1252, UTF-16 та GB-18030 - це зовсім незвично, і я не думаю, що існуюче програмне забезпечення не зможе це вирішити автоматично.

Тому я скачу Mutagen і напишу користувальницький сценарій Python, щоб автоматизувати власні рішення щодо того, як виправити невідомі кодування. Наприклад:

musicroot= ur'C:\music\wonky'
tryencodings= 'gb18030', 'cp1252'

import os
import mutagen.id3

def findMP3s(path):
    for child in os.listdir(path):
        child= os.path.join(path, child)
        if os.path.isdir(child):
            for mp3 in findMP3s(child):
                yield mp3
        elif child.lower().endswith(u'.mp3'):
            yield child

for path in findMP3s(musicroot):
    id3= mutagen.id3.ID3(path)
    for key, value in id3.items():
        if value.encoding!=3 and isinstance(getattr(value, 'text', [None])[0], unicode):

            if value.encoding==0:
                bytes= '\n'.join(value.text).encode('iso-8859-1')
                for encoding in tryencodings:
                    try:
                        bytes.decode(encoding)
                    except UnicodeError:
                        pass
                    else:
                        break
                else:
                    raise ValueError('None of the tryencodings work for %r key %r' % (path, key))
                for i in range(len(value.text)):
                    value.text[i]= value.text[i].encode('iso-8859-1').decode(encoding)

            value.encoding= 3
    id3.save()

Наведений вище сценарій робить кілька припущень:

  1. Неправильні лише теги, позначені як кодування 0. (Нібито кодування 0 є ISO-8859-1, але на практиці це часто кодова сторінка Windows за замовчуванням.)

  2. Якщо тег позначено як UTF-8 або кодування UTF-16, він вважається правильним і просто перетворюється на UTF-8, якщо його ще немає. Особисто я раніше не бачив помилок ID3, позначених як UTF (кодування 1-3). На щастя, кодування 0 легко відновити у вихідні байти, оскільки ISO-8859-1 - це пряме відображення порядкових значень байтів 1 на 1.

Коли дотримується тег кодування 0, скрипт намагається спершу переробити його як GB18030, тоді, якщо він недійсний, повертається до кодової сторінки 1252. Однобайтові кодування типу cp1252 будуть, як правило, відповідати більшості байтових послідовностей, тому краще розмістити їх в кінці списку кодувань, які слід спробувати.

Якщо у вас є інші кодування, такі як кирилиця cp1251, або безліч назви файлів cp1252 з декількома символами наголосом поспіль, які помиляються на GB18030, вам знадобиться розумніший алгоритм відгадування. Можливо, подивіться на ім’я файлу, щоб здогадатися, які символи можуть бути присутніми?


+1, хороший приклад сценарію та хороше пояснення того, що він робить і які припущення робить. я розділив їх, щоб зробити їх більш очевидними; сподіваюся, ви не заперечуєте.
хитаючий кіхот

0

Як щодо Mp3Tag з вином ?

Особливості (серед інших):

Пакетні теги Редагування запису ID3v1.1, ID3v2.3, ID3v2.4 , MP4, WMA, APEv2 Метка і Vorbis Коментарі до декількох файлів одночасно.

Імпорт з Amazon, дискотек, freedb, MusicBrainz Збережіть набравши та імпортуйте теги з онлайн-баз даних, таких як Amazon, discogs, freedb, MusicBrainz тощо.

Заміна символів або слів Замініть рядки тегами та назви файлів (з підтримкою регулярних виразів).

Повна підтримка користувальницького інтерфейсу та теги повністю сумісні з Unicode.



-1

також є EasyTag

EasyTAG - це утиліта для перегляду та редагування тегів для MP3, MP2, MP4 / AAC, FLAC, Ogg Vorbis, MusePack, аудіо-файлів і файлів WavPack. Його простий і приємний інтерфейс GTK + полегшує тегнення в GNU / Linux або Windows.

також, можливо, ви хочете знати, що id3v2.3 є переважно кращим форматом, оскільки медіаплеєр Windows не підтримує 2.4


люди, які наполягають на дотриманні специфікації v2.4, як правило, не зацікавлені в тому, що Windows Media Player робить чи не підтримує ...
хитає кіхот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.