Como solução possível, você pode usar qualquer ferramenta para converter arquivos em fluxo descompactado ( pcm
, wav
) sem informações de metadados e, em seguida, compará-los. Para conversão, você pode usar qualquer software que tenha como ffmpeg
, sox
ou avidemux
.
Por exemplo, como faço isso com o ffmpeg
Digamos que eu tenha para esse exemplo 2 arquivos com metadados diferentes:
%código%
Comparação de força bruta queixam-se de serem diferentes.
Então nós apenas convertemos e diferenciamos o corpo:
$ diff Original.mp3 Possible-dup.mp3 ; echo $?
Binary files Original.mp3 and Possible-dup.mp3 differ
Fora curso
$ 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
parte é 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 na coleção, valerá a pena calcular as somas de verificação (como ; echo $?
, crc
, md5
, sha2
) dos dados e, em seguida, encontrar as colisões.
Embora esteja fora do escopo dessa questão, sugiro algumas sugestões simples de como encontrar duplicatas de arquivos no diretório que contenha apenas conteúdos sem consideração de metadados.
- Primeiro, calcule o hash de dados em cada arquivo (e coloque no arquivo para o próximo processamento):
%código%
Arquivo será parecido com:
%código%
Qualquer RDBMS será muito útil para agregar a contagem e selecionar esses dados.
Mas continue a solução de linha de comando pura que você pode querer fazer etapas simples como mais.
Veja hashes de duplicatas, se houver algum (passo extra para mostrar como funciona, não é necessário para encontrar dupes):
sha256
-
E todos juntos para listar arquivos duplicados pelo conteúdo :
%código%
count.by.regexp.awk é simples
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
de script para contar padrões de regexp.