Reparieren Sie die Codierung von ID3-Tags

12

Ich habe ungefähr 2000 MP3-Dateien geerbt. Für die meisten von ihnen werden ihre ID3-Tags in Amarok verstümmelt angezeigt . Ich benötige eine Software, die die ID3-Tags auf den Typ v2.4 aktualisiert $03(dh UTF-8-Codierung), alle v1-Tags entfernt und auch klug ist, die ursprüngliche Codierung von Fall zu Fall herauszufinden (höchstwahrscheinlich eine davon) Windows-1252, UTF-16 ohne Stückliste oder GB18030).

Gibt es bereits eine so vollständige Lösung, die ich verwenden könnte, bevor ich dies selbst auf TagLib programmiere?

Empfehlen Sie Musicbrainz nicht weiter - es ist stark voreingenommen gegenüber in den USA veröffentlichter Musik und für mich nahezu nutzlos. Empfehlen Sie keine allgemeine ID3-Tagging-Software, ohne sie zuerst anhand meiner Anforderungen zu testen - die meisten davon

  • unterstütze v2.4 nicht
  • habe, ehrlich gesagt, leise verzögerte Vorstellungen über die Zeichenkodierung
  • haben keine Automatisierungsfunktionen (ich möchte meine Zeit nicht manuell bearbeiten).

Ich bin auch (noch) nicht nur an Tag-Bereinigungs-, Massenumbenennungs- oder Kategorisierungssoftware interessiert. Ich habe zuerst den oben erwähnten Normalisierungsschritt durchgeführt.

daxim
quelle

Antworten:

9

Sie möchten Ex Falso, den im Quod Libet- Projekt enthaltenen Tag-Editor . Picard (der MusicBrainz-Tagger) verwendet möglicherweise dieselbe Tagging-Bibliothek, die jedoch von QL erstellt wurde.

Insbesondere möchten Sie die Mutagen-Tagging-Bibliothek , die id3v2.4 unterstützt (und mit "Unterstützung" meine ich "erzwingen" ... militärisch ...). Es eignet sich auch hervorragend für Zeichencodierungen und enthält einen grundlegenden skriptfähigen Befehlszeilen-Tagger ( mid3v2). In Ihrem Normalisierungsschritt speichert Mutagen nur Tags in ID3v2.4. Es ist sicherlich in der Lage, den gesamten Text in UTF-8 zu konvertieren, aber Sie müssen dies möglicherweise selbst skripten (ich glaube, dass die mid3v2Standardeinstellungen des Tools darin bestehen, die aktuelle Codierung nach Möglichkeit beizubehalten, und ich weiß nicht, ob es zum Speichern angewiesen werden kann alles in einer bestimmten Kodierung). Mutagen ist in Python geschrieben.

Ex Falso ist eine schöne, saubere Benutzeroberfläche und unterstützt die meisten wichtigen Funktionen für Retag-Multiple-Dateien, die Sie erwarten. Ich glaube nicht, dass es bei der Suche im Internet viel bewirkt, und ich weiß nicht, wie es mit Albumcover ist - Quod Libet unterstützt das möglicherweise. Ex Falso kann dies mit einem Plugin tun, falls eines existiert, obwohl eines möglicherweise nicht existiert. Ich habe diese Funktionalität nie gebraucht - ich benutze EF und mid3v2zusammen, um meine Retagging-Anforderungen zu erfüllen.

Ex Falso, Teil des Quod Libet-Projekts

Quacksalber
quelle
mid3v2ist nur die halbe Lösung. Nachdem ich es ausprobiert habe, ist es definitiv nicht gut mit den falsch identifizierten Codierungen, unter denen ich leide, dh ein aktualisiertes ID3-Tag wird in Amarok immer noch falsch angezeigt. Mutagen scheitert an meiner Forderung nach »klug, die ursprüngliche Kodierung herauszufinden«; es geht freudig von Latin1/ aus Windows-1252, was standardkonform ist, aber für die unordentliche reale Welt nutzlos. Ich bin geneigt, diese Antwort jetzt nicht zu akzeptieren; Ich werde noch ein paar Tage Gelegenheit für andere Antworten geben. Wenn nichts Gutes kommt, werden Sie akzeptiert.
Daxim
vollkommen akzeptabel. Wenn Sie ein Python-Codierer sind, können Sie ein Skript schreiben, das Mutagen verwendet, um a) das vorhandene Tag einzulesen, b) einige intelligente Konvertierungsschritte durchzuführen (basierend auf dem, was Sie vermuten oder die Quellcodierung kennen) und c ) schreibe ein neues Tag. klingt so, als ob es hauptsächlich der Konvertierungsschritt mid3v2ist, der nicht zu hell ist, und das überrascht mich nicht ... aber ich denke, Python hat einige Zeichencodierungsmodule (vielleicht iconvoder ähnlich), die intelligenter sind und für Heimwerker nützlich sein könnten. äh.
Quacksalber Quijote
Ich bin selbst kein großer Python-Codierer, sonst hätte ich weitere nützliche Vorschläge. Vielleicht hätte jemand im Stackoverflow bessere Ideen, wenn Sie am Ende Ihr eigenes Skript schreiben würden.
Quacksalber Quijote
9

Ich glaube nicht, dass Sie eine eigenständige Anwendung finden werden, die Ihre spezielle Auswahl an falsch gekennzeichneten Codierungen korrigiert. Eine Mischung aus cp1252, UTF-16 und GB-18030 zu haben, ist ziemlich ungewöhnlich und ich glaube nicht, dass vorhandene Software dies automatisch lösen kann.

Also würde ich Mutagen herunterladen und ein benutzerdefiniertes Python-Skript schreiben, um Ihre eigenen Entscheidungen darüber zu automatisieren, wie unbekannte Codierungen repariert werden sollen. Zum Beispiel:

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

Das obige Skript macht einige Annahmen:

  1. Nur die Tags, die als in Codierung 0 markiert sind, sind falsch. (Angeblich ist die Codierung von 0 ISO-8859-1, in der Praxis handelt es sich jedoch häufig um eine Windows-Standardcodepage.)

  2. Wenn ein Tag als UTF-8- oder UTF-16-Codierung markiert ist, wird es als korrekt angenommen und einfach in UTF-8 konvertiert, sofern dies noch nicht geschehen ist. Persönlich habe ich noch keine fehlerhaften ID3s gesehen, die als UTF (Codierungen 1-3) markiert waren. Glücklicherweise kann die Codierung von 0 leicht in ihre ursprünglichen Bytes wiederhergestellt werden, da ISO-8859-1 eine direkte 1: 1-Zuordnung der ordinalen Bytewerte ist.

Wenn ein Tag mit der Codierung 0 erfüllt ist, versucht das Skript, es zuerst als GB18030 neu zu formulieren. Wenn es nicht gültig ist, wird auf Codepage 1252 zurückgegriffen. Einzelbyte-Codierungen wie cp1252 stimmen in der Regel mit den meisten Byte-Sequenzen überein am Ende der Liste der zu versuchenden Codierungen.

Wenn Sie andere Codierungen wie cp1251 Cyrillic oder viele cp1252-Dateinamen mit mehreren Zeichen mit Akzent hintereinander haben, die mit GB18030 verwechselt werden, benötigen Sie einen cleveren Schätzalgorithmus. Schauen Sie sich vielleicht den Dateinamen an, um zu erraten, welche Art von Zeichen wahrscheinlich vorhanden sind.

Bobince
quelle
+1, schönes Beispielskript und eine gute Erklärung, was es tut und welche Annahmen es macht. Ich habe diese aufgeteilt, um sie offensichtlicher zu machen. Ich hoffe es macht dir nichts aus.
Quacksalber Quijote
0

Wie wäre es mit Mp3Tag mit Wein ?

Eigenschaften (unter anderem):

Batch - Tag - Bearbeitung schreiben ID3v1.1, ID3v2.3, ID3v2.4 , MP4, WMA, APEv2 - Tags und Vorbis Comments , um mehrere Dateien auf einmal.

Import aus Amazon, Discogs, Freedb, MusicBrainz Speichern Sie die Eingabe und den Import von Tags aus Online-Datenbanken wie Amazon, Discogs, Freedb, MusicBrainz und anderen.

Zeichen oder Wörter ersetzen Ersetzen Sie Zeichenfolgen in Tags und Dateinamen (mit Unterstützung für reguläre Ausdrücke).

Vollständige Unicode-Unterstützung Benutzeroberfläche und Tagging sind vollständig Unicode-kompatibel.

cschol
quelle
-1

Es gibt auch EasyTag

EasyTAG ist ein Dienstprogramm zum Anzeigen und Bearbeiten von Tags für MP3-, MP2-, MP4 / AAC-, FLAC-, Ogg Vorbis-, MusePack-, Monkey's Audio- und WavPack-Dateien. Die einfache und schöne GTK + -Schnittstelle erleichtert das Taggen unter GNU / Linux oder Windows.

Vielleicht möchten Sie auch wissen, dass id3v2.3 normalerweise das bevorzugte Format ist, da Windows Media Player 2.4 nicht unterstützt

Alexey Yakovenko
quelle
Leute, die darauf bestehen, die v2.4-Spezifikation zu befolgen, sind im Allgemeinen nicht daran interessiert, was Windows Media Player tut oder nicht unterstützt ...
Quack Quijote