Кодирование восстановления тегов ID3

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

Прежде чем я начну программировать это самостоятельно сверху TagLib, уже есть ли такое полное решение, которое я мог использовать?

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

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

Я также еще не заинтересован очисткой тега, массовое программное обеспечение переименования или классификации только; я сначала имею, делают вышеупомянутый шаг нормализации.

12
задан 02.01.2010, 19:52

5 ответов

Вы хотите Исключая Falso, редактор тегов, включенный в Тюрьму проект Libet. Picard (теггер MusicBrainz) может пользоваться той же библиотекой меток, но QL породил его.

В частности, Вы хотите библиотеку меток Мутагена, которая поддерживает id3v2.4 (и "поддержкой" я имею в виду, "осуществляют"... в военном отношении...). Это также прекрасно с кодировками символов и включает основной scriptable теггер командной строки (mid3v2). Насколько Ваш шаг нормализации идет, Мутаген только сохраняет теги в ID3v2.4. Это, конечно, способно к преобразованию всего текста в UTF-8, но Вы, возможно, должны написать сценарий этого сами (я полагаю что mid3v2 значения по умолчанию инструмента должны сохранить текущее кодирование, если это возможно, и я не знаю, можно ли ему сказать сохранить все в конкретном кодировании). Мутаген записан в Python.

Исключая Falso хороший, чистый GUI и поддерживает большинство главных retag-multiple-files функций, которые Вы ожидали бы. Я не думаю, что это делает много в способе интернет-поисков, и я не знаю, как это с иллюстрациями альбома - Тюрьма, Libet может поддерживать это; Исключая Falso может сделать это с плагином, должен каждый существовать, хотя нельзя было бы существовать. Мне никогда не была нужна та функциональность - я использую EF и mid3v2 на концерте для обработки моих потребностей переметок.

Ex Falso, part of the Quod Libet project

9
ответ дан 07.12.2019, 11:58

Я не думаю, что Вы собираетесь найти автономное применение, которое согласует Ваш конкретный выбор неправильно отмеченной кодировки. Имение смеси cp1252, UTF-16 и ГБ 18030 довольно необычно, и я не думаю, что существующее программное обеспечение сможет решить это автоматически.

Таким образом, я загрузил бы Мутаген и записал бы пользовательский сценарий 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, если это уже не. Лично я не видел ID3s, отмеченный как UTF (кодировка 1-3) по ошибке прежде. К счастью кодирование 0 легко восстановить в его исходные байты, так как ISO-8859-1 является 1 к 1 прямым отображением порядковых значений байта.

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

Если у Вас будет другая кодировка как cp1251 кириллица или много cp1252 имен файлов с несколькими символами с диакритикой подряд, которые приняты за GB18030, то Вам будет нужен более умный какой-то алгоритм предположения. Возможно, посмотрите на имя файла для предположения, какие символы, вероятно, будут присутствовать?

9
ответ дан 07.12.2019, 11:58

Как насчет Mp3Tag с вином?

Функции (среди других):

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

Импорт из Amazon, discogs, freedb, MusicBrainz Сохраняют ввод и импортируют теги из баз данных онлайн как Amazon, discogs, freedb, MusicBrainz, и т.д.

Символы замены или слова Строки замены в тегах и именах файлов (с поддержкой Регулярных выражений).

Полный Пользовательский интерфейс Поддержки Unicode и метки являются полностью совместимым Unicode.

0
ответ дан 07.12.2019, 11:58

Foobar имеет довольно полную поддержку меток. Это работает под вином.

-1
ответ дан 07.12.2019, 11:58

существует также EasyTag

EasyTAG является утилитой для просмотра и редактирования тегов для MP3, MP2, MP4/AAC, FLAC, Ogg Vorbis, MusePack, файлов Аудио и WavPack Обезьяны. Его простой и хороший интерфейс GTK + делает метки легче под GNU/Linux или Windows.

также Вы могли бы хотеть знать, что id3v2.3 является обычно предпочтительным форматом, потому что Windows Media Player не поддерживает 2.4

-1
ответ дан 07.12.2019, 11:58

Теги

Похожие вопросы