Wie vergleicht man zwei verlustfreie Audiodateien?

Wie vergleicht man zwei verlustfreie Audiodateien?

Ich habe eine M4A-Datei, die auch in eine FLAC-Datei konvertiert wird. Ich möchte sehen, ob die Konvertierung verlustfrei ist, d. h. ob die Ausgabe von M4A in PCM genau identisch mit der Ausgabe bei der FLAC-Dekodierung ist.

Ich nehme an, es gibt eine Möglichkeit, mit FFmpeg oder Libav eine „rohe“ Ausgabe zu erzeugen und diese zu vergleichen?

Antwort1

Ich würde versuchen, sie beide in WAV zu konvertieren und ihre Prüfsummen zu vergleichen.

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

Vergleichen Sie die erzeugten MD5s. Wenn sie übereinstimmen, herzlichen Glückwunsch! Ihre Dateien enthalten dieselben Daten. Wenn sie nicht übereinstimmen, posten Sie die Ausgabe dieser Befehle hier und ich werde nachsehen. Möglicherweise gibt es einen Unterschied in der Bitrate oder so etwas (das sollte nicht der Fall sein ... aber vielleicht doch, ich weiß es nicht).

Beachten Sie, dass die ffmpegs vergleichsweise große Zwischendateien erzeugen.

Antwort2

Du kannst den ... benutzenHash-Multiplikatorum eine Prüfsumme des dekodierten Mediums zu generieren. Es ist keine Dateikonvertierung erforderlich und es wird nicht von Metadaten oder anderen Faktoren beeinflusst, die dazu führen können, dass ein eigenständiges Summentool falsche Unterschiede meldet.

Beispiel zum Vergleich von WAV → FLAC. Da FLAC verlustfrei ist, sollten die Hashes gleich sein:

$ 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
  • Es gibt viele verfügbareHash-Algorithmenzur Auswahl. Einige sind schneller als andere. Sie können mit der -hashOption einen Algorithmus auswählen, z. B. -hash md5.

  • -map 0wird in den Beispielen verwendet, um alle Streams in die Prüfsumme einzubeziehen. Ohne sieStandardmäßiges Streamauswahlverhaltenwählt nur einen Stream pro Streamtyp. Wenn Sie bestimmte Streams ausschließen/einschließen möchten, verwenden Sie die -mapOption mit Stream-Spezifizierern. Um beispielsweise alle Videos auszuschließen, verwenden Sie eine negative Zuordnung mit -map -0:v, um nur Audio einzuschließen -map 0:a, oder um nur den dritten Audiostream einzuschließen, verwenden Sie -map 0:a:2.

  • DerStreamhash-Multiplikatorist ähnlich wie Hash, gibt aber einen Hash pro Stream aus, z. B. einen für Video und einen für Audio. Auch hier wird das Standardverhalten bei der Streamauswahl verwendet, sofern Sie nicht hinzufügen -map.

  • Wenn Sie jeden einzelnen Frame/jedes einzelne Paket vergleichen möchten, verwenden Sie dieFramehash-Multiplikator.

Antwort3

Sie könnten versuchen, das Audiospektrum zu visualisieren und die beiden dann nebeneinander zu vergleichen.

Hier erfahren Sie, wie Sie das mit dem showcqtFilter tun können.

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

Dies setzt voraus, dass Sie ein Video mit Audio und dann einen alternativen Ton für dieses Video haben.

Sieh dir das anScreenshot von Showcqt nebeneinander

verwandte Informationen