Ich möchte programmatisch eine SHA1-Prüfsumme von Audiodateien (MP3, Ogg Vorbis, Flac) erstellen. Die Anforderung ist, dass die Prüfsumme stabil sein sollte auch wenn sich der Header (z.B. ID3) ändert .
Hinweis: Die Audiodateien haben keine CRCs
Das habe ich inzwischen ausprobiert:
1) Lesen und Hashing aller MPEG-Frames mit Perl und MPEG::Audio::Rahmen
my $sha1 = Digest::SHA1->new;
while (my $frame = MPEG::Audio::Frame->read(\*FH)) {
$sha1->add($frame->content());
}
2) Dekodierung + Hashing aller MPEG-Frames mit Python und libmad (pymad)
mf = mad.MadFile(path)
sha1 = hashlib.sha1()
while 1:
buf = mf.read()
if (buf is None):
break
sha1.update(buf)
3) Verwendung mp3cat
> mp3cat - - < file.mp3 | sha1sum
Keine dieser Methoden lieferte jedoch eine stabil Prüfsumme. Und zwar in algunos Fälle, in denen sich die Prüfsumme nach der erneuten Kennzeichnung der Datei mit Picard .
Gibt es Bibliotheken, die bereits das bieten, was ich brauche?
Die Programmiersprache ist mir egal
Aktualisierung: Ich habe den Fall noch etwas weiter untersucht. Die libmad-Prüfsummeninkonsistenz scheint in Fällen aufzutreten, in denen libmad einige Dekodierungsfehler bekommt, wie "Huffman-Datenüberlauf (0x0238)" . Da dies wirklich bei vielen mp3-Dateien vorkommt, bin ich nicht sicher, ob es wirklich auf eine defekte Datei hinweist