Reparar codificação de tags ID3


12

Eu herdei cerca de 2000 arquivos MP3. Para a maioria deles, suas tags ID3 são exibidas ilegíveis no Amarok. Preciso de um software que atualize as tags ID3 para o tipo v2.4 $03(ou seja, codificação UTF-8), remova quaisquer tags v1 e também seja inteligente em descobrir a codificação original caso a caso (provavelmente uma das Windows-1252, UTF-16 ou GB18030 sem BOM).

Antes de começar a programar isso sozinho sobre o TagLib, já existe uma solução tão completa que eu poderia usar?

Não recomendo o Musicbrainz - ele é fortemente influenciado pelas músicas publicadas nos Estados Unidos e quase inútil para mim. Não recomendo o software geral de identificação ID3 sem testá-lo primeiro contra meus requisitos - a maioria deles

  • não suporta v2.4
  • francamente, dissemos idéias retardadas sobre a codificação de caracteres
  • não possui recursos de automação (não quero gastar meu tempo editando manualmente).

Também não estou interessado apenas em software de limpeza de tags, renomeação em massa ou categorização; Primeiro, realizo o passo de normalização acima mencionado.

Respostas:


9

Você deseja o Ex Falso, o editor de tags incluído no projeto Quod Libet . Picard (o criador de tags MusicBrainz) pode usar a mesma biblioteca de tags, mas a QL a originou.

Em particular, você deseja a biblioteca de marcação Mutagen , que suporta o id3v2.4 (e por "suporte", quero dizer "aplicar" ... militarmente ...). Ele também é excelente, com codificação de caracteres, e inclui um tagger básica de comando programável ( mid3v2). No que diz respeito à sua etapa de normalização, o Mutagen salva apenas tags no ID3v2.4. Certamente é capaz de converter todo o texto em UTF-8, mas você pode precisar fazer o script por conta própria (acredito que os mid3v2padrões da ferramenta são manter a codificação atual sempre que possível, e não sei se é possível salvá-la. tudo em uma codificação específica). Mutagen é escrito em Python.

Ex Falso é uma interface gráfica agradável e limpa, e suporta a maioria dos principais recursos de retag de vários arquivos que você esperaria. Eu não acho que isso faça muita coisa na busca da Internet e não sei como é a arte do álbum - Quod Libet pode apoiar isso; O Ex Falso pode fazer isso com um plug-in, caso exista, embora não exista. Eu nunca precisei dessa funcionalidade - eu uso a EF e mid3v2em conjunto para lidar com minhas necessidades de nova marcação.

Ex Falso, parte do projeto Quod Libet


mid3v2é apenas metade da solução. Depois de tentar, definitivamente não é bom com as codificações mal identificadas das quais estou sofrendo, ou seja, uma tag ID3 atualizada ainda é exibida incorretamente no Amarok. O mutagênico falha na minha exigência de "inteligente em descobrir a codificação original"; ele assume alegremente Latin1/ Windows-1252, que é compatível com o padrão, mas inútil para o mundo real confuso. Estou inclinado a não aceitar esta resposta agora; Darei mais alguns dias para outras respostas. Se nada de bom vier, você será aceito.
Daxim

perfeitamente aceitável. se você é um codificador python, considere escrever um script que use o Mutagen para a) ler a tag existente, b) executar algumas etapas de conversão inteligente (com base no que você suspeita ou sabe que a codificação de origem é) ec ) escreva uma nova tag. Parece que é principalmente a etapa de conversão que mid3v2não é muito clara e que não me surpreende ... mas acho que o python tem alguns módulos de codificação de caracteres (talvez iconvou similares) que são mais inteligentes e podem ser úteis para um DIY- er.
quack quixote

eu não sou muito um codificador python ou gostaria de ter algumas sugestões mais úteis. talvez alguém no stackoverflow tenha idéias melhores se você acabar escrevendo seu próprio script.
quack quixote

9

Não acho que você encontre um aplicativo independente que conserte sua seleção específica de codificações marcadas incorretamente. Ter uma mistura de cp1252, UTF-16 e GB-18030 é bastante incomum e não acho que o software existente possa resolvê-lo automaticamente.

Então, eu baixava o Mutagen e escrevia um script Python personalizado para automatizar suas próprias decisões sobre como corrigir codificações desconhecidas. Por exemplo:

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()

O script acima faz algumas suposições:

  1. Somente as tags marcadas como codificando 0 estão incorretas. (Codificar ostensivamente 0 é ISO-8859-1, mas na prática geralmente é uma página de código padrão do Windows.)

  2. Se uma tag estiver marcada como sendo na codificação UTF-8 ou UTF-16, será considerada correta e simplesmente convertida em UTF-8, se ainda não estiver. Pessoalmente, nunca vi ID3s marcados como UTF (codificações 1-3) antes. Felizmente, a codificação 0 é fácil de recuperar em seus bytes originais, pois ISO-8859-1 é um mapeamento direto de 1 para 1 dos valores de bytes ordinais.

Quando uma tag de codificação 0 é alcançada, o script tenta reformulá-la primeiro como GB18030; depois, se não for válida, retornará à página de códigos 1252. Codificações de byte único como cp1252 tenderão a corresponder à maioria das seqüências de bytes, por isso é melhor colocá-las. no final da lista de codificações para tentar.

Se você tiver outras codificações como cp1251 cirílico ou muitos nomes de arquivos cp1252 com vários caracteres acentuados em uma linha, que se confundem com GB18030, precisará de algum tipo de algoritmo de adivinhação mais inteligente. Talvez veja o nome do arquivo para adivinhar que tipo de caracteres provavelmente estará presente.


+1, bom exemplo de script e uma boa explicação sobre o que faz e quais suposições. eu os divido para torná-los mais óbvios; Espero que você não se importe.
quack quixote

0

Que tal o Mp3Tag com o Wine ?

Recursos (entre outros):

Edição de tags de lote Grave tags ID3v1.1, ID3v2.3, ID3v2.4 , MP4, WMA, APEv2 e comentários Vorbis em vários arquivos de uma só vez.

Importar da Amazon, discogs, freedb, MusicBrainz Salve a digitação e importe tags de bancos de dados online como Amazon, discogs, freedb, MusicBrainz e muito mais.

Substituir caracteres ou palavras Substitua cadeias de caracteres em tags e nomes de arquivos (com suporte para Expressões regulares).

Suporte completo a Unicode A interface do usuário e a marcação são totalmente compatíveis com Unicode.



-1

há também EasyTag

O EasyTAG é um utilitário para visualizar e editar tags para MP3, MP2, MP4 / AAC, FLAC, Ogg Vorbis, MusePack, arquivos de áudio e WavPack do Monkey. Sua interface GTK + simples e agradável facilita a marcação no GNU / Linux ou Windows.

você também pode querer saber que o id3v2.3 geralmente é o formato preferível, porque o Windows Media Player não suporta 2.4


pessoas que insistem em seguir a especificação v2.4 geralmente não estão interessados em que o Windows Media Player faz ou não suporta ...
quack quixote
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.