Fiz backup de alguns arquivos de áudio em dois locais e adicionei tags ID3 em um backup, mas não no outro, já que o tempo passou e minha própria memória diminuiu se os backups são realmente os mesmos, mas agora há dados ID3 e o outro não, a comparação binária básica falhará e a inspeção será complicada.
Existe uma ferramenta para comparar apenas os dados de áudio (não o cabeçalho, ID3) em mp3s, arquivos flac e outros arquivos usando dados de cabeçalho, como ID3.
iniciou uma discussão além da comparação aqui: http://www.scootersoftware.com/vbulletin/showthread.php?t=7413
consideraria outro software de comparação que executa esta tarefa
fonte
avconv
página de manual e percebi que acrc
opção decodifica o áudio e calcula o CRC do áudio decodificado. Mas você pode evitar isso configurando o codec de áudio paracopy
. Agora, no meu sistema, o comando é executado em 0,13 segundos em vez de 1,13 segundos. Atualizei a resposta, agora você pode evitar o uso do PHP. :)O Foobar2000 com o plug-in Binary Comparator fará isso.
fonte
Como solução possível, você pode usar qualquer ferramenta para converter arquivos em fluxo não compactado (
pcm
,wav
) sem informações de metadados e compará-las. Para a conversão, você pode usar qualquer software que desejarffmpeg
,sox
ouavidemux
.Por exemplo, como faço isso com o ffmpeg
Digamos que eu tenha nesse exemplo 2 arquivos com metadados diferentes: a
$ diff Original.mp3 Possible-dup.mp3 ; echo $? Binary files Original.mp3 and Possible-dup.mp3 differ
comparação de força bruta reclama que eles são diferentes.Então nós apenas convertemos e diferenciamos o corpo:
$ 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
A
; echo $?
parte fora do curso é apenas para fins de demonstração para ver o código de retorno.Processando vários arquivos (diretórios transversais)
Se você quiser tentar duplicatas em coleção que tem valor para checksums calcular (qualquer como
crc
,md5
,sha2
,sha256
) de dados e, em seguida, basta encontrar lá colisões.Embora esteja fora do escopo dessa pergunta, eu sugeriria algumas sugestões simples de como encontrar duplicatas de arquivos na contabilidade de diretório, apenas o conteúdo sem a consideração de metadados.
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
arquivo será semelhante a:$ cat mp3data.hashes ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3 54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
Qualquer RDBMS será muito útil para agregar a contagem e selecionar esses dados. Mas continue com a solução pura de linha de comando, que você pode querer seguir etapas simples.Veja hashes duplicados, se houver (etapa extra para mostrar como funciona, não é necessária para encontrar 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 é um
awk
script simples para contar padrões de regexp.fonte
Também perguntei isso no fórum Beyond Compare, conforme mencionado na pergunta - e o Beyond Compare também fornece uma solução:
http://www.scootersoftware.com/vbulletin/showthread.php?t=7413
Vale a pena considerar as duas abordagens:
a solução AllDup é melhor se você não se importa com as cópias dos arquivos que são preservadas e as que são descartadas em uma árvore de pastas de diretório E você tem uma mistura de arquivos com e sem tags nas mesmas pastas em que deseja executar o arquivo. verificação duplicada.
Beyond Compare é melhor se você deseja manter a árvore de pastas / diretórios E comparar 2 estruturas de pastas / diretórios separadas, ajudadas também pelo uso da opção não destrutiva de planificação de árvore em tempo real
fonte