Como comparar dados de áudio mp3, flac em um arquivo, ignorando dados de cabeçalho (tag ID3) etc.?

14

Eu fiz backup de alguns arquivos de áudio em 2 locais e adicionei tags ID3 em um backup, mas não no outro, pois o tempo passou, minha própria memória diminuiu se os backups são realmente os mesmos, mas agora um tem ID3 os dados e os outros não, a comparação binária básica falhará e a inspeção será incômoda.

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 um tópico em beyond compare aqui: link

consideraria outro software de comparação que faz essa tarefa

    
por therobyouknow 21.02.2011 / 16:31

5 respostas

7

Ah, a situação eterna. Eu mesmo lutei com essa pergunta por tanto tempo e tentei tantos aplicativos de busca de arquivos duplicados que acabei desistindo e decidi escrever um para mim. E então eu encontrei o AllDup .

O AllDup me fez indefinidamente fazer um back-burner do meu próprio projeto porque é um DFF rápido que tem a capacidade de comparar arquivos MP3 e JPEG, ignorando suas tags ID3 e dados Exif respectivamente. Melhor ainda, Michael Thummerer é muito receptivo ao feedback e é rápido para corrigir bugs e implementar sugestões (você pode sugerir ignorar os cabeçalhos FLAC). Acima de tudo, o AllDup é gratuito.

    
por 21.02.2011 / 16:41
6

Aqui está uma maneira de fazer isso no shell. Você precisa de avconv , que no Debian / Ubuntu está em libav-tools .

$ avconv -i INPUT_FILE -c:a copy -f crc - 2>/dev/null | grep CRC

Você receberá uma linha como esta:

CRC=0xabfdfe10

Isto irá comparar cada quadro de dados de áudio e gerar um CRC para ele. Então, um comando como esse pode comparar vários arquivos:

ls *.mp3 | while read line; do echo -n "$line: "; avconv -i "$line" -f crc - 2>/dev/null | grep CRC; done
    
por 04.04.2013 / 09:41
2
por 22.02.2011 / 16:10
1

Também perguntei isso no fórum Beyond Compare, como mencionado na pergunta - e o Beyond Compare também oferece uma solução:

link

Ambas as abordagens valem a pena considerar:

  • a solução AllDup é melhor se você não se importa com quais cópias dos arquivos são preservadas e quais são descartadas em uma árvore de pastas de diretórios E você tem uma mistura de arquivos marcados e não marcados nas mesmas pastas que você deseja executar a verificação duplicada.

  • A opção Beyond Compare é melhor se você quiser manter a árvore de diálogos / pastas E comparar duas estruturas de pasta / diretório separadas, ajudadas também por usar a opção não destrutiva de árvores planas on-the-fly

por 22.02.2011 / 14:51
1

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.

  1. 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

  1. 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.

    
por 15.06.2017 / 00:24