2010-07-14 15 views
5

Sto provando a scrivere uno script Python per cercare file duplicati mp3/4 usando i dati del brano come base per il confronto. La mia situazione coinvolge molti file mp3/4 con nomi di file simili, ma tag ID3 diversi. All'inizio ho provato ad andare in loop e usare md5 per trovare i file duplicati (ignorando i nomi dei file). Questo, ovviamente, non ha funzionato quando i tag ID3 non corrispondevano.Accesso ai dati musicali MP3 usando Python

Di conseguenza, sto cercando un modo per estrarre solo i dati musicali da un mp3/4 per eseguirlo tramite md5 e trovare duplicati. Qual è il modo migliore per farlo?

+0

La musica sarà probabilmente (anche se 'identica') in bitrate diversi (a meno che non si sia certi che tutto sia senza perdite) che renderà inutile un confronto * semplice * 'dati'. Quindi avrai bisogno di una tecnica più avanzata (probabilmente statistica). Sono sicuro che qualcuno su SO sarà in grado di fornire alcuni puntatori ... – ChristopheD

+0

Buon punto, invece di semplice md5 un'analisi di frequenza fft è più appropriata. Tuttavia, il volume può essere diverso. Quindi suppongo che cercheresti una correlazione tra i due fft e ti aspetti una correlazione elevata forse? Diventa complicato perché alcune canzoni possono includere "foresund" - un'introduzione o un discorso - che è difficile da rilevare. –

+0

@Hamish: Mi chiedo se vorrebbe considerarli diversi (ad esempio, un'esecuzione dal vivo di alcune canzoni con, ad esempio, una introduzione vocale contro una registrazione in studio particolare). Dipende davvero da come definite "duplicati", suppongo. Questo sta diventando un problema piuttosto interessante. :) – Faisal

risposta

4

Provare a utilizzare id3-py o mutagen a rimuovere tutti i tag (sia ID3v1 che ID3v2, possono essere entrambi sullo stesso file), quindi calcolare l'MD5 sul risultato.

Supponendo che iTunes non abbia manipolato il file al di là dei tag, dovrebbero essere identici. La transcodifica ovviamente renderebbe questo approccio non valido.

+0

Anche se abbastanza intensivo sul disco, rimuovere i tag con Mutagen ha funzionato abbastanza bene. –

0

Questa è in realtà una cosa piuttosto avanzata, di tipo fuzzy-logic che stai chiedendo.

Questa non è una risposta, ma un'occhiata alla discussione in questo articolo: Detect duplicate MP3 files with different bitrates and/or different ID3 tags? (potrebbe qualificarsi come una vittima in realtà ... E 'ancora-Python specifica.)

+1

Problema completamente diverso.Questi file sono copie dello stesso MP3 con diversi tag ID3, dal momento che iTunes cerca di essere intelligente e aggiornare i tag ID3. Non ci dovrebbero essere differenze binarie nella musica, solo i metadati. Grazie per aver risposto, però. = -] –

1

Utilizzare un algoritmo di impronte digitali. Potresti sapere su MusicBrainz. Hanno elencato here alcuni algoritmi di impronte digitali. Usano AcoustId ora che è probabilmente la cosa che dovresti usare (è buona ed è gratuita). C'è la libreria Chromaprint che può generare un'impronta digitale del genere.

Ho scritto un Python module ffmpeg che esegue la decodifica tramite FFmpeg e fornisce una semplice funzione per calcolare l'impronta digitale di AcoustId (utilizzando Chromaprint). Here è una piccola demo per questo (che interroga persino MusicBrainz per la canzone).

Dovrebbe essere facile creare alcuni strumenti utilizzando quello per trovare tutti i duplicati.

L'impronta digitale sarà esattamente la stessa se i dati audio sono esattamente gli stessi. Sarà simile se i dati audio sono simili. Vedere lo AcoustId homepage per ulteriori informazioni su come si calcola la similarità se non si desidera controllare l'uguaglianza.