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 ffmpeg
s 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
-hash
Option einen Algorithmus auswählen, z. B.-hash md5
.-map 0
wird 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-map
Option 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 showcqt
Filter 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