FLAC ファイルに変換される M4A ファイルがあります。変換がロスレスであるかどうか、つまり、M4A から PCM への出力が FLAC デコードからの出力とまったく同じであるかどうかを確認したいと思います。
FFmpeg または Libav を使用して「生の」出力を生成し、それらを比較する方法があると思いますか?
答え1
両方を WAV に変換してチェックサムを比較してみます。
ffmpeg -i file1.m4a file1.wav
ffmpeg -i file2.flac file2.wav
md5sum file1.wav
md5sum file2.wav
rm file?.wav
生成された md5 を比較します。一致した場合、おめでとうございます。ファイルには同じデータが含まれています。一致しない場合は、それらのコマンドの出力をここに投稿してください。確認します。ビットレートの違いなどがある可能性があります (あるはずがありませんが、あるかもしれません。わかりません)。
ffmpeg
は比較的大きな中間ファイルを生成することに注意してください。
答え2
あなたはハッシュマルチプレクサーデコードされたメディアのチェックサムを生成します。ファイルを変換する必要がなく、スタンドアロンの合計ツールが誤った差異を報告する原因となるメタデータやその他の要因の影響を受けません。
WAV → FLAC を比較する例。FLAC はロスレスなので、ハッシュは同じになるはずです。
$ 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
利用可能なものはたくさんありますハッシュアルゴリズム
-hash
から選択できます。他のアルゴリズムよりも高速なアルゴリズムもあります。などのオプションを使用してアルゴリズムを選択できます-hash md5
。-map 0
例では、すべてのストリームをチェックサムに含めるために使用されています。これがないと、デフォルトのストリーム選択動作は、ストリーム タイプごとに 1 つのストリームのみを選択します。特定のストリームを除外/含める場合は、-map
ストリーム指定子付きのオプションを使用します。たとえば、すべてのビデオを除外するには を使用したネガティブ マッピングを使用し-map -0:v
、オーディオのみを含めるには を使用し-map 0:a
、3 番目のオーディオ ストリームのみを含めるには を使用します-map 0:a:2
。のストリームハッシュマルチプレクサーはハッシュに似ていますが、ビデオ用とオーディオ用など、ストリームごとにハッシュを出力します。この場合も、 を追加しない限り、デフォルトのストリーム選択動作が使用されます
-map
。個々のフレーム/パケットを比較したい場合は、フレームハッシュマルチプレクサー。
答え3
オーディオのスペクトルを視覚化して、2 つを並べて比較してみることもできます。
フィルターを使用してこれを行う方法を次に示しますshowcqt
。
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
これは、オーディオ付きのビデオと、そのビデオの代替オーディオがあることを前提としています。