Ich habe einige Audiodateien an zwei Stellen gesichert und ID3-Tags zu einem Backup hinzugefügt, aber nicht zu dem anderen. Seitdem ist mein eigener Speicher dahingehend verblasst, ob die Backups tatsächlich gleich sind, aber jetzt hat einer ID3-Daten und das Andernfalls schlägt der grundlegende binäre Vergleich fehl und die Überprüfung ist umständlich.
Gibt es ein Tool, um nur die Audiodaten (nicht den Header, ID3) in MP3s, FLAC-Dateien und anderen Dateien mit Header-Daten wie ID3 zu vergleichen.
hat einen unvergleichlichen Thread gestartet: http://www.scootersoftware.com/vbulletin/showthread.php?t=7413
Ich würde andere Vergleichssoftware in Betracht ziehen, die diese Aufgabe ausführt
quelle
avconv
und festgestellt, dass diecrc
Option das Audio dekodiert und die CRC des dekodierten Audios berechnet. Sie können dies jedoch vermeiden, indem Sie den Audio-Codec auf einstellencopy
. Auf meinem System läuft der Befehl jetzt in 0,13 Sekunden statt in 1,13 Sekunden. Ich habe die Antwort aktualisiert, so dass Sie jetzt die Verwendung von PHP vermeiden können. :)Foobar2000 mit dem Binary Comparator- Plugin erledigt dies.
quelle
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älltffmpeg
,sox
oderavidemux
.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.
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
$ 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.quelle
Ich habe dies auch im Beyond Compare-Forum gefragt, wie in der Frage erwähnt - und Beyond Compare bietet auch eine Lösung:
http://www.scootersoftware.com/vbulletin/showthread.php?t=7413
Beide Ansätze sind erwägenswert:
Die AllDup-Lösung ist am besten geeignet, wenn Sie sich nicht darum kümmern, welche Kopien der Dateien erhalten bleiben und welche in einem Verzeichnisordnerbaum verworfen werden, UND wenn Sie eine Mischung aus markierten und nicht markierten Dateien in denselben Ordnern haben, die Sie ausführen möchten Dublettenscheck ein.
Beyond Compare ist am besten geeignet, wenn Sie den Verzeichnisbaum beibehalten UND 2 separate Ordner- / Verzeichnisstrukturen vergleichen möchten. Dies wird auch durch die sofortige, zerstörungsfreie Option Flatten-Tree unterstützt
quelle