如何创建媒体文件的稳定校验和?

时间:2010-03-07 09:48:00

标签: ffmpeg media sha1 checksum mplayer

如何在没有元数据的情况下创建仅媒体数据的校验和,以获得媒体文件的稳定标识。优选地是具有支持多种格式的库的跨平台方法。例如vlc,ffmpeg或mplayer。

(媒体文件应该是普通格式的音频和视频,图像也很好)

3 个答案:

答案 0 :(得分:3)

我不知道任何可以实现此目的的任何现有的独立于平台的软件,但我确实知道这可以通过Java等解释(平台无关)语言来实现。

基本上,我们只需要从文件中删除任何元数据(标签),预先解复用视频文件。在理论上,在解复用和删除元数据之后,可以对文件进行散列并与另一个经过相同过程的文件进行比较,以匹配相同的文件,尽管标签不同。与指纹不同,这不会识别类似的歌曲/电影,但会识别相同的文件(想象一下,您可能需要存档的给定歌曲的10个不同版本或比特率,但不希望其中任何一个的2个相同副本浮动)

最令人不安的部分是删除标签,因为标签格式有许多不同的规格,不一定在不同的应用程序中实现相同,即通过两个不同的应用程序分别给出相同标签的相同精确音频文件可能不会导致相同的输出文件。如果流行的标记软件对文件的二进制音频部分进行任何更改,或者以非标准的方式填充音频,那么这可能对仅音频校验和的概念造成致命问题的唯一方法就是。

采用校验和是微不足道的,但我并不知道任何平台独立库的头脑,以解复用和删除mpeg文件。我知道在'nix环境中,mpgtx是一个很好的命令行工具,可以执行demux和detag,但显然这不是一个独立于平台的解决方案。

也许有人在那里感到雄心勃勃?

答案 1 :(得分:0)

我找到的一个可能的解决方案似乎与vlc相关:

./VLC -I rc snd.mp3 :sout='#std{mux=raw,access=file,dst=-}' vlc://quit | sha1sum

答案 2 :(得分:0)

嗯,现在给出答案可能已经晚了 11 年,但万一像我这样的其他人偶然发现了这个......

ffmpeg 可以输出单个流的校验和。因此,相同的音频或视频将独立于其容器格式或元数据输出相同的校验和。

文件$filename的视频轨道示例,将输出写入$filename.md5

ffmpeg -i "$filename" -map 0:v -codec copy -f md5 "$filename.md5"

对于音频,请使用 -map 0:a

要输出到 STDOUT,请使用 -。例如:

ffmpeg -i "$filename" -map 0:a -codec copy -hide_banner -loglevel warning -f md5 -