Hice una copia de seguridad de algunos archivos de audio en 2 lugares y agregué etiquetas ID3 en una copia de seguridad, pero no en la otra, ya que el tiempo ha pasado, mi propia memoria se ha desvanecido sobre si las copias de seguridad son realmente las mismas, pero ahora una tiene datos ID3 y otros no, la comparación binaria básica fallará y la inspección será engorrosa.
¿Existe una herramienta para comparar solo los datos de audio (no el encabezado, ID3) en mp3, archivos flac y otros archivos que usan datos de encabezado como ID3.
comenzó un hilo más allá de comparar aquí: http://www.scootersoftware.com/vbulletin/showthread.php?t=7413
consideraría otro software de comparación que realiza esta tarea
fuente
avconv
página del manual y me di cuenta de que lacrc
opción decodifica el audio y calcula el CRC del audio decodificado. Pero puede evitar eso configurando el códec de audio encopy
. Ahora, en mi sistema, el comando se ejecuta en 0.13 segundos en lugar de 1.13 segundos. Actualicé la respuesta, así que ahora puedes evitar usar PHP. :)Foobar2000 con el complemento Binary Comparator hará esto.
fuente
Como posible solución, puede usar cualquier herramienta para convertir archivos en secuencias sin comprimir (
pcm
,wav
) sin información de metadatos y luego compararlos. Para la conversión, puede usar cualquier software que le gusteffmpeg
,sox
oavidemux
.Por ejemplo, cómo hago eso con ffmpeg
Digamos que tengo para ese ejemplo 2 archivos con metadatos diferentes: la
$ diff Original.mp3 Possible-dup.mp3 ; echo $? Binary files Original.mp3 and Possible-dup.mp3 differ
comparación de fuerza bruta se queja de que son diferentes.Luego, simplemente convertimos y diferimos cuerpo
$ diff <( ffmpeg -loglevel 8 -i Original.mp3 -map_metadata -1 -f wav - ) <( ffmpeg -loglevel 8 -i Possible-dup.mp3 -map_metadata -1 -f wav - ) ; echo $? 0
Por supuesto, la
; echo $?
parte es solo para fines de demostración para ver el código de retorno.Procesamiento de múltiples archivos (directorios transversales)
Si quieres probar duplicados en la colección que tiene valor para calcular sumas de comprobación (cualquier parecido
crc
,md5
,sha2
,sha256
) de los datos y luego simplemente encontrar allí colisiones.Aunque está fuera del alcance de esa pregunta, sugeriría algunas sugerencias simples sobre cómo encontrar duplicados de archivos en el directorio contando solo su contenido sin consideración de metadatos.
for file in *.mp3; do printf "%s:%s\n" "$( ffmpeg -loglevel 8 -i "$file" -map_metadata -1 -f wav - | sha256sum | cut -d' ' -f1 )" "$file"; done > mp3data.hashes
archivo se verá así:$ cat mp3data.hashes ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3 54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
Cualquier RDBMS será muy útil allí para agregar el recuento y seleccionar dichos datos. Pero continúe con la solución de línea de comandos pura que desee hacer pasos simples como más.Vea los hashes duplicados, si los hay (paso adicional para mostrar cómo funciona, no es necesario para encontrar engaños):
$ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes [1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1 [1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2 [1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1
$ grep mp3data.hashes -f <( count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes | grep -oP '(?<=\[1:).{64}(?!]=1$)' ) | sort 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3
count.by.regexp.awk es un
awk
script simple para contar patrones regexp.fuente
También pregunté esto en el foro Beyond Compare, como se menciona en la pregunta, y Beyond Compare también proporciona una solución:
http://www.scootersoftware.com/vbulletin/showthread.php?t=7413
Vale la pena considerar ambos enfoques:
la solución AllDup es mejor si no le importa qué copias de los archivos se conservan y cuáles se descartan en un árbol de carpetas de directorio Y tiene una combinación de archivos etiquetados y no etiquetados en las mismas carpetas en las que desea ejecutar el archivo verificación duplicada
Beyond Compare es mejor si desea retener el árbol de carpetas / dietéticas Y compara 2 estructuras de carpetas / directorios separadas, ayudado también mediante el uso de la opción de árbol aplanado no destructivo sobre la marcha
fuente