Als mögliche Lösung können Sie ein beliebiges Tool verwenden, um Dateien ohne Metadateninformationen in unkomprimierte Streams ( pcm
, wav
) zu konvertieren und diese dann zu vergleichen. Für die Konvertierung können Sie jede Software verwenden, die Ihnen gefällt ffmpeg
, sox
oder avidemux
.
Zum Beispiel wie ich das mit ffmpeg mache
Angenommen, ich habe für dieses Beispiel 2 Dateien mit unterschiedlichen Metadaten:
$ diff Original.mp3 Possible-dup.mp3 ; echo $?
Binary files Original.mp3 and Possible-dup.mp3 differ
Brute-Force-Vergleiche beklagen, dass sie unterschiedlich sind.
Dann konvertieren wir einfach und diff body:
$ 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
Natürlich dient der ; echo $?
Teil nur zu Demonstrationszwecken, um den Rückkehrcode zu sehen.
Verarbeitung mehrerer Dateien (Verzeichnisse durchlaufen)
Wenn Sie versuchen wollen Duplikate in der Sammlung haben es sich lohnt zu berechnen Prüfsummen (alle wie crc
, md5
, sha2
, sha256
) von Daten und dann einfach da Kollisionen finden.
Obwohl dies nicht möglich ist, würde ich einige einfache Vorschläge vorschlagen, wie Duplikate von Dateien in der Verzeichnisabrechnung ohne Berücksichtigung von Metadaten gefunden werden können.
- Berechnen Sie zuerst den Hash der Daten in jeder Datei (und legen Sie diese für die nächste Verarbeitung in die Datei): Die
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
Datei sieht folgendermaßen aus:
$ cat mp3data.hashes
ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3
54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
Jedes RDBMS ist dort sehr hilfreich, um die Anzahl zu aggregieren und solche Daten auszuwählen. Fahren Sie jedoch mit der reinen Befehlszeilenlösung fort, und führen Sie einfache Schritte wie folgt aus.
Sehen Sie sich ggf. doppelte Hashes an (zusätzlicher Schritt, um zu zeigen, wie es funktioniert, nicht erforderlich, um Dupes zu finden):
$ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes
[1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1
[1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2
[1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1
- Und alles zusammen, um Dateien aufzulisten, die nach Inhalten dupliziert wurden :
$ 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 ist ein einfaches awk
Skript zum Zählen von Regexp-Mustern.