2009-01-24 13 views
12

¿Cómo puedo detectar (preferiblemente con Python) archivos duplicados de MP3 que pueden codificarse con diferentes velocidades de bits (pero son la misma canción) y etiquetas ID3 que pueden ser incorrectas?¿Detecta archivos MP3 duplicados con diferentes tasas de bits y/o diferentes etiquetas ID3?

Sé que puedo hacer una suma de comprobación MD5 del contenido de los archivos, pero eso no funcionará para diferentes velocidades de bits. Y no sé si las etiquetas ID3 tienen influencia en la generación de la suma de comprobación MD5. ¿Debería volver a codificar los archivos MP3 que tienen una tasa de bits diferente y luego puedo hacer la suma de comprobación? ¿Que recomiendas?

+0

Fácil de usar la biblioteca de Python para hacer exactamente esto: https://github.com/worldveil/dejavu – lollercoaster

Respuesta

2

No creo que las sumas de comprobación simples nunca funcionarán:

  1. etiquetas ID3 afectarán el MD5
  2. diferentes codificadores codificarán las diferentes maneras misma canción - por lo que las sumas de comprobación será diferente
  3. diferente las tasas de bits producirán diferentes sumas de comprobación
  4. Volver a codificar un mp3 a una velocidad de bits diferente probablemente suene terrible y sin duda será diferente al audio original comprimido en un solo paso.

Creo que tendrá que comparar las etiquetas ID3, la longitud de la canción y los nombres de archivo.

2

La recodificación a la misma tasa de bits no funcionará, de hecho puede empeorar las cosas ya que la transcodificación (que es lo que se llama recodificación a diferentes velocidades de bits) va a cambiar la naturaleza de la compresión, usted volver a comprimir un archivo ya comprimido conducirá a un archivo significativamente diferente.

Esto es un poco fuera de mi alcance pero abordaría el problema mirando el patrón de onda del MP3. Ya sea convirtiendo el MP3 a un .wav sin comprimir o tal vez simplemente ejecutando el análisis en el archivo MP3 en sí. Debería haber una biblioteca por ahí para esto. Solo una palabra de advertencia, esta es una operación costosa.

Otra idea, utilice ReplayGain para escanear los archivos. Si son la misma canción, deben etiquetarse con la misma ganancia. Esto solo funcionará en la misma canción del mismo álbum. Sé de varios casos en que las reediciones se remasterizaron a un volumen mayor, lo que cambió la repetición.

EDIT:
Es posible que desee comprobar http://www.speech.kth.se/snack/, que aparentemente puede hacer la visualización de espectrograma. Me imagino que cualquier biblioteca que pueda hacer un espectrograma visual puede ayudarlo a compararlos.

Esta link de la página oficial de python también puede ser útil.

13

La misma pregunta que las personas en el antiguo AudioScrobbler y actualmente en MusicBrainz han trabajado desde hace mucho tiempo. Por el momento, el proyecto Python que puede ayudar en su búsqueda, es Picard, que etiquetará los archivos de audio (no solo archivos MPEG 1 Layer 3) con un GUID (en realidad, varios de ellos), y a partir de ese momento, haciendo coincidir el etiquetas es bastante simple.

Si prefiere hacerlo como un proyecto propio, libofa podría ser de ayuda.

+0

también Picard es de código abierto y puede haber MusicBrainz usado por tu propio código – David

+0

Interesante, ¿cómo genera Picard este GUID? –

+0

@nemo: primero, comprenda qué es MusicBrainz: http://musicbrainz.org/doc/AboutMusicBrainz. Luego lea cómo coincide el contenido de la música con los registros de la base de datos en http://musicbrainz.org/doc/HowPUIDsWork – tzot

4

Como dijeron los demás, las sumas de comprobación simples no detectarán duplicados con diferentes tasas de bits o etiquetas ID3. Lo que necesitas es un algoritmo de huellas dactilares de audio. Python Audioprocessing Suite tiene dicho algoritmo, pero no puedo decir qué tan confiable es.

http://rudd-o.com/new-projects/python-audioprocessing

3

Por cuestiones de etiqueta, Picard en efecto, puede ser una muy buena apuesta. Si, habiendo identificado dos archivos potencialmente duplicados, lo que desea es extraer información de la tasa de bits de ellos, eche un vistazo al mp3guessenc.

1

Usaría la longitud como mi heurística primaria. Eso es lo que hace iTunes cuando intenta identificar un CD usando el Gracenote database. Measure the lengths in milliseconds en lugar de segundos. Recuerde, esto es solo una heurística: definitivamente debe escuchar cualquier duplicado detectado antes de eliminarlos.

2

El proyecto Dejavu está escrito en Python y hace exactamente lo que estás buscando.

https://github.com/worldveil/dejavu

También es compatible con muchos formatos comunes (.wav, .mp3, etc.), así como encontrar el desplazamiento del clip en la pista de audio original vez.

1

Puede utilizar el sucesor de PUID y MusicBrainz, llamado AcoustiD:

AcoustID es un proyecto de código abierto que tiene como objetivo crear una base de datos libre de huellas digitales de audio con el mapeo de la base de datos de metadatos MusicBrainz y proporcionar un servicio web para la identificación de archivos de audio con esta base de datos ...

... huellas digitales junto con algunos metadatos necesarios para identificar las canciones a la base de datos AcoustID ...

Va a encontrar varias bibliotecas de cliente y ejemplos para el servicio web en https://acoustid.org/

Cuestiones relacionadas