音声ファイル (MP3、Ogg Vorbis、Flac) の SHA1 チェックサムをプログラムで作成したいと考えています。要件は、ヘッダー (ID3 など) が変更されてもチェックサムが安定している必要があることです。
注: オーディオ ファイルには CRC がありません。
これは私が今試したことです:
1) Perl とMPEG::Audio::Frameを使用したすべての MPEG フレームの読み取り + ハッシュ
my $sha1 = Digest::SHA1->new;
while (my $frame = MPEG::Audio::Frame->read(\*FH)) {
$sha1->add($frame->content());
}
2) Python とlibmad (pymad)を使用したすべての MPEG フレームのデコード + ハッシュ
mf = mad.MadFile(path)
sha1 = hashlib.sha1()
while 1:
buf = mf.read()
if (buf is None):
break
sha1.update(buf)
3) mp3cat の使用
> mp3cat - - < file.mp3 | sha1sum
ただし、これらの方法のいずれも、安定したチェックサムを提供しませんでした。つまり、場合によっては、ファイルをpicardで再タグ付けした後にチェックサムが変更されました。
私が欲しいものをすでに提供しているライブラリはありますか?
プログラミング言語は問いません…
更新: ケースをもう少しデバッグしました。libmad チェックサムの不一致は、libmad が"Huffman data overrun (0x0238)"のようなデコード エラーを取得した場合に発生するようです。これは多くの mp3 ファイルで実際に発生するため、本当に破損したファイルを示しているかどうかはわかりません…</p>