Wie vergleiche ich zwei verlustfreie Audiodateien?

3644
Determinant

Ich habe eine M4A-Datei, die ebenfalls in eine FLAC-Datei umgewandelt wird. Ich möchte gerne sehen, ob die Konvertierung verlustfrei ist, nämlich ob die Ausgabe von M4A in pcm genau mit der von FLAC-Decodierung identisch ist.

Ich gehe davon aus, dass es eine Möglichkeit gibt, FFmpeg oder Libav zu verwenden, um eine "rohe" Ausgabe zu erzeugen und sie zu vergleichen.

1
Siehe auch: http://superuser.com/questions/136514/finding-out-if-a-flac-or-wavpack-audio-file-is-not-original-encoded-from-a-los Mechanical snail vor 11 Jahren 0

2 Antworten auf die Frage

11
LordNeckbeard

Sie können den md5Muxer in ffmpeg verwenden, um den MD5-Hash aller eingegebenen Audio- (und Video-) Frames zu berechnen und auszudrucken, ohne dass Zwischendateien erforderlich sind. In diesem Beispiel wurde das FLAC aus dem MP3-Format erstellt (verlustbehaftet bis verlustfrei, normalerweise keine empfohlene Prozedur, aber dies ist nur eine Demonstration).

$ ffmpeg -i left_right.mp3 -map 0:a -f md5 - 2>/dev/null MD5=a34bfd9245ad6d69eddcb92035219044  $ ffmpeg -i left_right.flac -map 0:a -f md5 - 2>/dev/null MD5=a34bfd9245ad6d69eddcb92035219044 

Es gibt auch den framemd5Muxer, der den MD5-Hash für jedes Audio- (und Video-) Paket berechnet und druckt.

Siehe auch framemd5 Intro und HowTo .

+1 Dies ist auch gut, weil dadurch das Problem der Metadaten in der unkomprimierten Datei vollständig vermieden wird, da sich ansonsten identische Audiodateien unterscheiden könnten. a CVn vor 11 Jahren 2
3
thirtythreeforty

I'd try converting them both to WAV and comparing their checksums.

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

Compare the md5s produced. If they match, congratulations! Your files contain the same data. If they don't match, post the output of those commands here, and I'll look. Potentially there is a bitrate difference or something (there ought not to be... but there may be, I don't know.)

Note that the ffmpegs will generate comparatively large intermediate files.

Es scheint, dass sich die Ausgabegröße von "ffmpeg -y -i in.m4a -ac 2 -ar 48000 -acodec flac out.flac" von der von "ffmpeg -y -i in.m4a -acodec flac out.flac" unterscheidet. Ich habe keine Ahnung, was beim Konvertieren vorgeht, sowie die subtilen Parameter. Könntest du etwas erklären? Determinant vor 11 Jahren 0
Mit dem letzten Befehl ist md5sum gleich. Determinant vor 11 Jahren 0
Und der vorherige Befehl wurde aus einem Forum kopiert. Ich denke, die Dateigröße hat etwas mit der Nummer "48000" zu tun, oder? Determinant vor 11 Jahren 0
Jep. Der "-ar 48000" gibt an, 48000 Samples pro Sekunde zu verwenden. Wenn dies von der Anzahl der Samples pro Sekunde abweicht, interpoliert ffmpeg (hält zusätzliche Werte dazwischen), und die resultierende Datei unterscheidet sich. Wenn Sie einfach ffmpeg automatisch erkennen lassen, versucht es, so wenig wie möglich zu ändern. thirtythreeforty vor 11 Jahren 1
Eine weitere Frage: Ist Wav-Datei der Standard für Rohdateien? Ich meine, gibt es neben wav noch andere alternative Formate im PC-Bereich? Determinant vor 11 Jahren 0
Ich nehme an, es gibt zwei bekannte unkomprimierte Standards: WAV und AIFF. AIFF wird häufig von Apples Systemen verwendet. Der Rest von allen nutzt WAV. thirtythreeforty vor 11 Jahren 0
Vielen Dank! Schnelle und klare Antwort. Determinant vor 11 Jahren 0
@ymfoi WAV ist ** nicht ** ein Rohdateistandard an sich. WAV-Dateien sind nur Container und können daher unterschiedliche Audio-Codecs enthalten. In diesem Fall wird es PCM-Audio (pulscodemoduliert) sein, was verlustfrei ist. Es können aber auch komprimierte Codecs in einer WAV-Datei enthalten sein: http://en.wikipedia.org/wiki/Wav#WAV_file_compression_codecs_compared slhck vor 11 Jahren 5
@slhck, gibt es irgendwelche Methoden, um rohe PCM-Daten aus dem Decoder zu extrahieren? Determinant vor 11 Jahren 0
@ymfoi FFmpeg wählt standardmäßig 16-Bit-PCM, sodass Sie bereits unkomprimiertes, "unverändertes" Audio erhalten (es sei denn, Ihre Quelle hat mehr Bittiefe wie 32 Bit; in diesem Fall könnten Sie beispielsweise -c: a pcm_s32le` angeben ). slhck vor 11 Jahren 0
@slhck ich sehe. Kann ich sagen, dass die WAV-Datei, die ich von FFmpeg bekomme, aus mehreren Teilen PCM-Rohdaten mit einigen zusätzlichen Informationen besteht, und es gibt andere ähnliche Formate wie WAV, AIFF usw.? Determinant vor 11 Jahren 0
@ymfoi Das ist richtig. WAV ist wie AIFF nur Container, die sogenannte "Chunks" von Audiodaten speichern. slhck vor 11 Jahren 0
@slhck Thx ~ Nun habe ich ein klareres Verständnis von WAV, das mir seit Jahren ein Rätsel ist. Determinant vor 11 Jahren 0
@slhck danke. Ich hatte vergessen, diese Unterscheidung zu treffen. In 99% der Fälle sehen Sie jedoch, dass PCM das einzige Stream-Format ist, das Sie in einem WAV-Container sehen. thirtythreeforty vor 11 Jahren 0