4 Stimmen

Wie kann ich am schnellsten feststellen, ob es sich bei zwei MP3-Dateien um Duplikate handelt?

Ich möchte ein Programm schreiben, das doppelte iTunes-Musikdateien löscht. Ein Ansatz zur Identifizierung von Duplikaten ist der Vergleich der MD5-Digests der MP3- und m4a-Dateien. Gibt es eine effizientere Strategie?

Übrigens zeigt der Menübefehl "Duplikate anzeigen" in iTunes falsch positive Ergebnisse an. Anscheinend werden nur die Zeichenfolgen "Interpret" und "Titel" verglichen.

3voto

Corey Ogburn Punkte 22937

Wenn Sie Hashes verwenden, um zwei Datensätze zu vergleichen, müssen sie idealerweise jedes Mal genau die gleiche Eingabe haben, um genau die gleiche Ausgabe zu erhalten (es sei denn, Sie haben auf wundersame Weise zwei Kollisionen von unterschiedlichen Eingaben ausgewählt, die zu der gleichen Ausgabe führen). Wenn Sie zwei MP3-Dateien durch Hashing der gesamten Datei vergleichen wollen, dann könnten die beiden Datensätze genau gleich sein, aber da ID3 innerhalb der Datei gespeichert ist, könnten Unstimmigkeiten dort die Dateien als völlig unterschiedlich erscheinen lassen. Da Sie einen Hash verwenden, werden Sie nicht bemerken, dass vielleicht 99 % der beiden Dateien übereinstimmen, weil die Ausgaben zu unterschiedlich sind.

Wenn Sie wirklich einen Hash verwenden wollen, sollten Sie nur die Tondaten mit einem Hash versehen, nicht aber die Tags, die an die Datei angehängt sein können. Dies ist nicht empfehlenswert, wenn Musik z. B. von CDs gerippt wird und dieselbe CD zweimal gerippt wird, könnten die Ergebnisse je nach Rippparametern unterschiedlich kodiert/komprimiert werden.

Eine bessere (aber viel kompliziertere) Alternative wäre der Versuch, die unkomprimierten Audiodatenwerte zu vergleichen. Mit ein wenig Versuch und Irrtum mit bekannten Eingaben kann ein anständiger Algo entstehen. Dies perfekt zu tun, wird sehr schwierig sein (wenn überhaupt möglich), aber wenn Sie etwas bekommen, das mehr als 50% genau ist, wird es besser sein als durch die Hand gehen.

Beachten Sie, dass selbst ein Algorithmus, der erkennen kann, ob zwei Songs ähnlich sind (z. B. derselbe Song, der mit unterschiedlichen Parametern gerippt wurde), komplexer sein müsste, als es sich lohnt, um zu erkennen, ob eine Live-Version einer Studioversion gleicht. Wenn Sie das können, lässt sich hier Geld verdienen!

Und um auf die ursprüngliche Idee zurückzukommen, wie man schnell feststellen kann, ob es sich um Duplikate handelt. Ein Hash wäre zwar viel schneller, aber auch viel ungenauer als jeder andere Algorithmus für diesen Zweck. Es geht um Geschwindigkeit gegen Genauigkeit und Komplexität.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X