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 ffmpeg
s 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
-hash
opçã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-map
opçã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:a
ou 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 showcqt
filtro.
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.