Réparer l'encodage des tags ID3

12

J'ai hérité d'environ 2000 fichiers MP3. Pour la majorité d'entre eux, leurs balises ID3 s'affichent dans Amarok. J'ai besoin d'un logiciel qui met à niveau les balises ID3 vers le type v2.4 $03(c'est-à-dire l'encodage UTF-8), supprime toutes les balises v1 et est également intelligent pour déterminer l'encodage d'origine au cas par cas (probablement l'un des Windows-1252, sans nomenclature UTF-16 ou GB18030).

Avant de commencer à programmer cela par moi-même au-dessus de TagLib, existe-t-il déjà une solution aussi complète que je pourrais utiliser?

Je ne recommande pas Musicbrainz - il est fortement biaisé pour la musique publiée aux États-Unis et presque inutile pour moi. Je ne recommande pas le logiciel de marquage ID3 général sans le tester d'abord par rapport à mes besoins - la plupart d'entre eux

  • ne supporte pas la v2.4
  • ont, franchement dit, des idées discrètes sur le codage des caractères
  • n'ont pas de fonctionnalités d'automatisation (je ne veux pas passer mon temps à éditer manuellement).

Je ne suis pas non plus (encore) intéressé par le nettoyage de balises, le renommage en masse ou les logiciels de catégorisation uniquement; J'ai d'abord fait l'étape de normalisation susmentionnée.

daxim
la source

Réponses:

9

Vous voulez Ex Falso, l'éditeur de balises inclus dans le projet Quod Libet . Picard (le tagueur MusicBrainz) peut utiliser la même bibliothèque de tags, mais QL l'a créée.

En particulier, vous voulez la bibliothèque de marquage Mutagen , qui prend en charge id3v2.4 (et par «support», je veux dire «appliquer» ... militairement ...). Il est également excellent avec les encodages de caractères et comprend un tagueur de ligne de commande scriptable de base ( mid3v2). En ce qui concerne votre étape de normalisation, Mutagen enregistre uniquement les balises dans ID3v2.4. Il est certainement capable de convertir tout le texte en UTF-8, mais vous devrez peut-être l'écrire vous-même (je crois que les mid3v2valeurs par défaut de l' outil sont de conserver l'encodage actuel dans la mesure du possible, et je ne sais pas si on peut lui dire d'enregistrer tout dans un encodage particulier). Mutagen est écrit en Python.

Ex Falso est une interface graphique agréable et propre, et prend en charge la plupart des principales fonctionnalités de retag-multiple-files que vous attendez. Je ne pense pas que cela fasse beaucoup de recherches Internet et je ne sais pas comment c'est avec les illustrations d'album - Quod Libet peut le supporter; Ex Falso peut le faire avec un plugin, s'il en existe un, même s'il n'en existe pas. Je n'ai jamais eu besoin de cette fonctionnalité - j'utilise EF et mid3v2de concert pour gérer mes besoins de repérage.

Ex Falso, partie du projet Quod Libet

Quack Quichotte
la source
mid3v2n'est que la moitié de la solution. Après l'avoir essayé, il n'est certainement pas bon avec les encodages mal identifiés dont je souffre, c'est-à-dire qu'une balise ID3 mise à niveau s'affiche toujours mal dans Amarok. Mutagen échoue à mon exigence de «savoir comment comprendre l'encodage d'origine»; il suppose allègrement Latin1/ Windows-1252, qui est conforme au standard, mais inutile pour le monde réel désordonné. Je suis enclin à ne pas accepter cette réponse pour le moment; Je vais donner quelques jours de plus pour d'autres réponses. Si rien de bon ne vient, vous êtes accepté.
daxim
parfaitement acceptable. si vous êtes un codeur python, vous pourriez envisager d'écrire un script qui utilise Mutagen pour a) lire dans la balise existante, b) effectuer des étapes de conversion intelligentes (en fonction de ce que vous soupçonnez ou connaissez le codage source), et c ) écrire une nouvelle balise. semble que c'est principalement l'étape de conversion qui mid3v2n'est pas trop brillante, et cela ne me surprend pas ... mais je pense que python a des modules d'encodage de caractères (peut iconv- être ou similaires) qui sont plus intelligents et pourraient être utiles à un bricolage- euh.
Quack Quichotte
je ne suis pas vraiment un codeur python moi-même ou j'aurais des suggestions plus utiles. peut-être que quelqu'un sur stackoverflow aurait de meilleures idées si vous finissiez par écrire votre propre script.
Quack Quichotte
9

Je ne pense pas que vous allez trouver une application autonome qui corrigera votre sélection particulière d'encodages mal étiquetés. Avoir un mélange de cp1252, UTF-16 et GB-18030 est assez inhabituel et je ne pense pas que les logiciels existants seront capables de résoudre cela automatiquement.

Je téléchargerais donc Mutagen et j'écrirais un script Python personnalisé pour automatiser vos propres décisions sur la façon de corriger les encodages inconnus. Par exemple:

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

Le script ci-dessus fait quelques hypothèses:

  1. Seules les balises marquées comme étant dans l'encodage 0 sont incorrectes. (Le codage ostensiblement 0 est ISO-8859-1, mais en pratique, il s'agit souvent d'une page de codes par défaut de Windows.)

  2. Si une étiquette est marquée comme étant en UTF-8 ou en encodage UTF-16, elle est supposée être correcte, et simplement convertie en UTF-8 si ce n'est pas déjà fait. Personnellement, je n'ai jamais vu d'erreur ID3 marqués comme UTF (encodages 1-3). Heureusement, le codage 0 est facile à récupérer dans ses octets d'origine car ISO-8859-1 est un mappage direct 1 à 1 des valeurs d'octets ordinaux.

Lorsqu'une balise d'encodage 0 est rencontrée, le script tente d'abord de la refondre en GB18030, puis si elle n'est pas valide, revient à la page de code 1252. Les codages à un octet comme cp1252 auront tendance à correspondre à la plupart des séquences d'octets, il est donc préférable de les mettre à la fin de la liste des encodages à essayer.

Si vous avez d'autres encodages comme cp1251 cyrillique, ou beaucoup de noms de fichiers cp1252 avec plusieurs caractères accentués d'affilée, qui se trompent pour GB18030, vous aurez besoin d'un algorithme de devinette plus intelligent. Peut-être regardez le nom du fichier pour deviner quel type de caractères sont susceptibles d'être présents?

bobince
la source
+1, bel exemple de script et une bonne explication de ce qu'il fait et de ses hypothèses. je les ai séparés pour les rendre plus évidents; j'espère que cela ne vous dérange pas.
Quack Quichotte du
0

Que diriez-vous de Mp3Tag avec Wine ?

Caractéristiques (entre autres):

Édition de balises par lots Écrivez les balises ID3v1.1, ID3v2.3, ID3v2.4 , MP4, WMA, APEv2 et les commentaires Vorbis dans plusieurs fichiers à la fois.

Importer depuis Amazon, discogs, freedb, MusicBrainz Enregistrez la frappe et importez des balises à partir de bases de données en ligne comme Amazon, discogs, freedb, MusicBrainz, etc.

Remplacez les caractères ou les mots Remplacez les chaînes dans les balises et les noms de fichiers (avec prise en charge des expressions régulières).

Prise en charge complète d'Unicode L'interface utilisateur et le balisage sont entièrement conformes à Unicode.

cschol
la source
-1

il y a aussi EasyTag

EasyTAG est un utilitaire de visualisation et d'édition de balises pour les fichiers MP3, MP2, MP4 / AAC, FLAC, Ogg Vorbis, MusePack, Monkey's Audio et WavPack. Son interface GTK + simple et agréable facilite le balisage sous GNU / Linux ou Windows.

vous voudrez peut-être aussi savoir que id3v2.3 est généralement le format préférable, car le lecteur Windows Media ne prend pas en charge 2.4

Alexey Yakovenko
la source
les gens qui insistent pour suivre la spécification v2.4 ne sont généralement pas intéressés par ce que le lecteur Windows Media prend en charge ou ne prend pas en charge ...
quack quixote