J'ai sauvegardé certains fichiers audio à 2 endroits et ajouté des balises ID3 dans une sauvegarde mais pas dans l'autre, depuis que le temps a passé, ma propre mémoire s'est estompée pour savoir si les sauvegardes sont réellement les mêmes, mais maintenant on a des données ID3 et le d'autres non, la comparaison binaire de base échouera et l'inspection sera lourde.
Existe-t-il un outil pour comparer uniquement les données audio (pas l'en-tête, ID3) dans les fichiers mp3, flac et autres fichiers à l'aide de données d'en-tête telles que ID3.
a commencé un fil sur au-delà de comparer ici: http://www.scootersoftware.com/vbulletin/showthread.php?t=7413
envisagerait d'autres logiciels de comparaison qui font cette tâche
la source
avconv
page de manuel et j'ai réalisé que l'crc
option décode l'audio et calcule le CRC de l'audio décodé. Mais vous pouvez éviter cela en définissant le codec audio surcopy
. Maintenant, sur mon système, la commande s'exécute en 0,13 seconde au lieu de 1,13 seconde. J'ai mis à jour la réponse, vous pouvez donc maintenant éviter d'utiliser PHP. :)Foobar2000 avec le plugin Binary Comparator fera cela.
la source
Comme solution possible, vous pouvez utiliser n'importe quel outil pour convertir un fichier en flux non compressé (
pcm
,wav
) sans informations de métadonnées, puis le comparer. Pour la conversion, vous pouvez utiliser n'importe quel logiciel que vous aimezffmpeg
,sox
ouavidemux
.Par exemple, comment je fais ça avec ffmpeg
Disons que j'ai pour cet exemple 2 fichiers avec des métadonnées différentes:
$ diff Original.mp3 Possible-dup.mp3 ; echo $? Binary files Original.mp3 and Possible-dup.mp3 differ
La comparaison de la force brute se plaint qu'ils sont différents.Ensuite, nous convertissons et différons simplement le corps:
$ 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
La
; echo $?
partie hors cours est juste à des fins de démonstration pour voir le code retour.Traitement de plusieurs fichiers (répertoires transversaux)
Si vous voulez essayer les doublons dans la collecte , il vaut la peine d'avoir checksums calculate (tout comme
crc
,md5
,sha2
,sha256
) de données, puis trouver juste là collisions.Bien qu'il soit hors de portée de cette question, je suggérerais quelques suggestions simples sur la façon de trouver des doublons de fichiers dans le répertoire en tenant compte uniquement de son contenu sans tenir compte des métadonnées.
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
fichier ressemblera à:$ cat mp3data.hashes ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3 54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
Tout SGBDR sera très utile pour agréger le nombre et sélectionner ces données. Mais continuez la solution de ligne de commande pure, vous voudrez peut-être faire des étapes simples comme plus loin.Voir les hachages en double le cas échéant (étape supplémentaire pour montrer comment cela fonctionne, n'est pas nécessaire pour trouver des dupes):
$ 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 est un
awk
script simple pour compter les modèles d'expression régulière .la source
J'ai également posé cette question sur le forum Beyond Compare, comme mentionné dans la question - et Beyond Compare propose également une solution:
http://www.scootersoftware.com/vbulletin/showthread.php?t=7413
Les deux approches méritent réflexion:
la solution AllDup est préférable si vous ne vous souciez pas des copies des fichiers qui sont conservées et de celles qui sont rejetées dans une arborescence de répertoires ET que vous avez un mélange de fichiers balisés et non balisés dans les mêmes dossiers que vous souhaitez exécuter vérification en double.
Beyond Compare est préférable si vous souhaitez conserver l'arborescence des répertoires / dossiers ET que vous comparez 2 structures de dossiers / répertoires distinctes, aidées également en utilisant l'option d'aplatissement non destructif à la volée
la source