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 aimez ffmpeg
, sox
ou avidemux
.
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.
- Calculez d'abord le hachage des données dans chaque fichier (et placez-les dans le fichier pour le prochain traitement): Le
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
- Et tous ensemble pour lister les fichiers dupliqués par contenu :
$ 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 .