2010-07-14 20 views
5

Estoy tratando de escribir un script de Python para buscar archivos MP3/4 duplicados usando los datos de la canción como base para comparar. Mi situación involucra muchos archivos mp3/4 con nombres de archivo similares, pero con diferentes etiquetas ID3. Al principio intenté recorrer y usar md5 para buscar archivos duplicados (ignorando los nombres de los archivos). Esto, por supuesto, no funcionó cuando las etiquetas ID3 no coincidían.Acceder a datos de música MP3 usando Python

Como resultado, estoy buscando una forma de extraer solo los datos de música de un mp3/4 para ejecutarlos a través de md5 y encontrar los duplicados. ¿Cuál es la mejor manera de hacerlo?

+0

La música probablemente (aunque sea 'idéntica') viene en diferentes velocidades de bits (a menos que pueda estar seguro de que todo es sin pérdida) lo que hará inútil una comparación * simple * 'de datos. Por lo tanto, necesitará una técnica más avanzada (probablemente estadística). Estoy seguro de que alguien en SO podrá proporcionar algunos consejos ... – ChristopheD

+0

Buen punto, en lugar de simple md5, un análisis de Frecuencia de Frecuencia es más apropiado. Sin embargo, el volumen puede ser diferente. Entonces, supongo que buscaría la correlación entre los dos efebos y esperaría una alta correlación, tal vez? Resulta complicado porque algunas canciones pueden incluir "preanuncias", una introducción o un discurso, que son difíciles de detectar. –

+0

@Hamish: Me pregunto si desearía considerarlos como diferentes (por ejemplo, una presentación en vivo de alguna canción con, por ejemplo, una introducción hablada en comparación con una grabación particular de un estudio). Depende de cómo se defina "duplicado", supongo. Esto se está convirtiendo en un problema bastante interesante. :) – Faisal

Respuesta

4

Intente utilizar id3-py o mutagen a quita todas las etiquetas (tanto ID3v1 como ID3v2, ambas pueden estar en el mismo archivo), luego calcula el MD5 en el resultado.

Suponiendo que iTunes no manipuló el archivo más allá de las etiquetas, deberían ser idénticas. La transcodificación obviamente invalidaría este enfoque.

+0

Aunque es bastante disco duro, eliminar las etiquetas con Mutagen funcionó bastante bien. –

0

De hecho, es algo muy avanzado, de tipo lógica difusa, sobre el que está preguntando.

Esta no es una respuesta, pero echar un vistazo a la discusión en este artículo: Detect duplicate MP3 files with different bitrates and/or different ID3 tags? (que podría considerarse también una víctima en realidad ... Es incluso específico de Python.)

+1

Problema completamente diferente.Estos archivos son copias del mismo MP3 con diferentes etiquetas ID3, ya que iTunes intenta ser inteligente y actualizar las etiquetas ID3. No debería haber diferencia binaria en la música, solo los metadatos. Gracias por responder, sin embargo. = -] –

1

Usa algún algoritmo de huella digital. Quizás sepa MusicBrainz. Han enumerado here algunos algoritmos de huellas dactilares. Usan AcoustId ahora, que es probablemente lo que también debería usar (es bueno y es gratis). Existe la biblioteca Chromaprint que puede generar dicha huella digital.

Escribí un Python module ffmpeg que hace la descodificación a través de FFmpeg y proporciona una función simple para calcular la huella digital AcoustId (usando Chromaprint). Here es una pequeña demostración para eso (que incluso consulta MusicBrainz para la canción).

Debería ser fácil construir alguna herramienta que use eso para encontrar todos los duplicados.

La huella digital será exactamente la misma si los datos de audio son exactamente los mismos. Será similar si los datos de audio son similares. Consulte el AcoustId homepage para obtener más información sobre cómo calcular la similitud si no solo desea verificar la igualdad.

Cuestiones relacionadas