Utworzyłem kopię zapasową niektórych plików audio w dwóch miejscach i dodałem znaczniki ID3 do jednej kopii zapasowej, ale nie w drugiej, ponieważ od czasu moja pamięć zanikła, czy kopie zapasowe są w rzeczywistości takie same, ale teraz jedno ma dane ID3 i inne nie, podstawowe porównanie binarne zakończy się niepowodzeniem, a kontrola będzie uciążliwa.
Czy istnieje narzędzie do porównywania tylko danych audio (nie nagłówka, ID3) w plikach mp3, plikach flac i innych plikach wykorzystujących dane nagłówka, takie jak ID3.
rozpoczął wątek na ponad porównaj tutaj: http://www.scootersoftware.com/vbulletin/showthread.php?t=7413
rozważy inne oprogramowanie porównawcze, które wykonuje to zadanie
źródło
avconv
stronę podręcznika i zdałem sobie sprawę, żecrc
opcja dekoduje dźwięk i oblicza CRC zdekodowanego dźwięku. Można tego jednak uniknąć, ustawiając kodek audio nacopy
. Teraz w moim systemie polecenie działa w 0,13 sekundy zamiast 1,13 sekundy. Zaktualizowałem odpowiedź, więc teraz możesz uniknąć używania PHP. :)Zrobi to Foobar2000 z wtyczką Binary Comparator .
źródło
Jako możliwe rozwiązanie można użyć dowolnego narzędzia do konwersji pliku na nieskompresowany strumień (
pcm
,wav
) bez informacji o metadanych, a następnie porównania. Do konwersji można użyć dowolnego oprogramowania masz jakffmpeg
,sox
lubavidemux
.Na przykład, jak to robię z ffmpeg
Powiedzmy, że mam dla tego przykładu 2 pliki z różnymi metadanymi:
$ diff Original.mp3 Possible-dup.mp3 ; echo $? Binary files Original.mp3 and Possible-dup.mp3 differ
Brute force porównanie skarży się, że są one różne.Następnie konwertujemy i różnicujemy ciało:
$ 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
; echo $?
Część oczywiście jest tylko w celach demonstracyjnych, aby zobaczyć kod powrotu.Przetwarzanie wielu plików (katalogów poprzecznych)
Jeśli chcesz spróbować duplikaty w kolekcji mieć wartość do obliczenia sum kontrolnych (każdy jak
crc
,md5
,sha2
,sha256
) danych, a następnie po prostu znaleźć tam kolizje.Chociaż nie mieści się w zakresie tego pytania, sugerowałbym kilka prostych sugestii, jak znaleźć duplikaty plików w katalogu rozliczającym tylko zawartość bez uwzględnienia metadanych.
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
Plik będzie wyglądał tak:$ cat mp3data.hashes ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3 54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
Każdy RDBMS będzie tam bardzo pomocny do agregacji liczby i wybrania takich danych. Ale kontynuuj czyste rozwiązanie wiersza polecenia, możesz wykonać proste kroki, takie jak dalsze.Zobacz duplikaty skrótów, jeśli takie istnieją (dodatkowy krok, aby pokazać, jak to działa, nie jest potrzebny do znajdowania duplikatów):
$ 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 to prosty
awk
skrypt do liczenia wzorców wyrażeń regularnych .źródło
Zadałem to również na forum Beyond Compare, jak wspomniano w pytaniu - a Beyond Compare zapewnia również rozwiązanie:
http://www.scootersoftware.com/vbulletin/showthread.php?t=7413
Oba podejścia warto rozważyć:
rozwiązanie AllDup jest najlepsze, jeśli nie obchodzi Cię, które kopie plików zostaną zachowane, a które zostaną odrzucone w drzewie folderów ORAZ masz mieszankę oznaczonych i nieoznaczonych plików w tych samych folderach, w których chcesz uruchomić zduplikowane sprawdzenie.
Opcja Beyond Compare jest najlepsza, jeśli chcesz zachować drzewo diectory / folder ORAZ porównać 2 oddzielne struktury folderów / katalogów, co pomaga również przy użyciu nieniszczącej opcji spłaszczania drzewa w locie
źródło