Como comparar dois arquivos de áudio sem perdas?

Como comparar dois arquivos de áudio sem perdas?

Eu tenho um arquivo M4A que também é convertido em um arquivo FLAC. Gostaria de ver se a conversão é sem perdas, ou seja, se a saída para pcm do M4A é exatamente idêntica à da decodificação FLAC.

Presumo que haja uma maneira de usar FFmpeg ou Libav para produzir alguma saída "bruta" e compará-las.

Responder1

Eu tentaria convertê-los para WAV e comparar suas somas de verificação.

ffmpeg -i file1.m4a file1.wav
ffmpeg -i file2.flac file2.wav
md5sum file1.wav
md5sum file2.wav
rm file?.wav

Compare os md5s produzidos. Se combinarem, parabéns! Seus arquivos contêm os mesmos dados. Se não corresponderem, poste a saída desses comandos aqui e eu darei uma olhada. Potencialmente, há uma diferença de taxa de bits ou algo assim (não deveria haver... mas pode haver, não sei).

Observe que os ffmpegs gerarão arquivos intermediários comparativamente grandes.

Responder2

Você pode usar omisturador de hashpara gerar uma soma de verificação da mídia decodificada. Não há necessidade de converter arquivos e não é afetado por metadados ou outros fatores que podem fazer com que uma ferramenta de soma autônoma relate diferenças falsas.

Exemplo para comparar WAV → FLAC. Como o FLAC não tem perdas, os hashes devem ser os mesmos:

$ ffmpeg -loglevel error -i input.wav output.flac

$ ffmpeg -loglevel error -i input.wav -map 0 -f hash -
  SHA256=c1acb198952f5c341190ffb62eeafe4f10c8f48c67a188e25087471a74eaa957

$ ffmpeg -loglevel error -i output.flac -map 0 -f hash -
  SHA256=c1acb198952f5c341190ffb62eeafe4f10c8f48c67a188e25087471a74eaa957
  • Existem muitos disponíveisalgoritmos de hashescolher a partir de. Alguns são mais rápidos que outros. Você pode selecionar um algoritmo com a -hashopção, como -hash md5.

  • -map 0é usado nos exemplos para incluir todos os fluxos na soma de verificação. Sem isso ocomportamento de seleção de fluxo padrãoescolherá apenas um fluxo por tipo de fluxo. Se você deseja excluir/incluir fluxos específicos, faça isso com a -mapopção com especificadores de fluxo. Por exemplo, para excluir todo o vídeo, use o mapeamento negativo com -map -0:v, ou para incluir apenas o uso de áudio -map 0:aou para incluir apenas o terceiro fluxo de áudio, use -map 0:a:2.

  • Omisturador streamhashé semelhante ao hash, mas produzirá um hash por stream, como um para vídeo e outro para áudio. Novamente, ele também usará o comportamento padrão de seleção de fluxo, a menos que você adicione -map.

  • Se você quiser comparar cada quadro/pacote individual, use omuxer de framehash.

Responder3

Você pode tentar visualizar o espectro do áudio e comparar os dois lado a lado.

Aqui está uma maneira de fazer isso com o showcqtfiltro.

ffmpeg -i "video_file_with_audio.mkv"  -i "alternative_audio.m4a" \
        -filter_complex "[0:a]asplit[a1][ao];
              [a1]volume=1.2,showcqt=fps=23.976:s=480x1080:count=3:axis=0:axis_h=30:bar_h=100:basefreq=200:endfreq=12495[vfreq1];
              [1:a]showcqt=fps=23.976:s=480x1080:count=3:axis=0:axis_h=30:bar_h=100:basefreq=200:endfreq=12495[vfreq2];
              [vid1]fps=23.976,scale=-1:1080[v1];[v1][vfreq1][vfreq2]hstack=3[vo]" \
        -map "[vo]" -map "[ao]"  output.mp4

Isso pressupõe que você tenha um vídeo com áudio e, em seguida, um áudio alternativo para esse vídeo.

Veja issocaptura de tela do showcqt lado a lado

informação relacionada