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

问题描述:

如何创建只有媒体数据没有元数据的校验和才能获得媒体文件的稳定标识。最好是一个支持多种格式的库的跨平台方法。例如vlc,ffmpeg或mplayer。如何创建媒体文件的稳定校验和?

(媒体文件应在常见格式的音频和视频,图像将是不错的有太多)

+2

我想你正在寻找一些指纹算法......这将是有趣的,因为它也可以用来识别类似的媒体。期待答案,碰撞。 +1 – hurikhan77 2010-03-07 09:51:43

+0

指纹也很有趣,例如,音频libofa [1](尽管补丁我无法在osx上编译),但我想要更通用的东西来识别重复的文件,而不是重复的歌曲/电影。 [1] http://code.google.com/p/musicip-libofa/ – yawniek 2010-03-07 09:55:17

+0

“没有标签”是否指“没有元数据”?如果是这样,说“媒体数据”可能会混淆事物。 – cregox 2010-04-08 19:48:42

我不了解任何现有平台无关的软件都可以实现这一点,但我确实知道这种方式可以通过像Java这样的解释性(与平台无关)语言来完成。基本上,我们只需要从文件中去除任何元数据(标签),事先将视频文件解复用。理论上,在解复用和删除元数据之后,可以对文件进行散列处理,并与经过相同处理的其他文件进行比较,以匹配相同的文件,尽管标记不同。与指纹不同,这不会识别类似的歌曲/电影,而是识别相同的文件(想象一下,您可能想要归档的某首歌曲的10种不同版本或比特率,但不希望其中任何一个相同的副本在四周浮动) 。

其中最麻烦的部分是删除标签,因为标签格式有很多不同的规格,这些规格不一定在不同的应用程序中实现相同,也就是说,通过两个不同的应用程序分别给出相同标签的同一确切音频文件可能不会导致在相同的输出文件中。唯一的方法可能会对纯音频校验和的概念构成一个致命的问题,那就是流行标记软件是否对文件的二进制音频部分进行了任何更改,或者是否以非标准方式填充了音频。

取得一个校验和是微不足道的,但我不知道我的任何平*立库的头顶,以demux和detag mpeg文件。我知道在'nix环境中,mpgtx是一个伟大的命令行工具,可以执行demux和detag,但显然这不是独立于平台的解决方案。

也许有人觉得有雄心壮志?

+0

这是要走的路。 在此期间,我为ffmpeg写了ha patch来计算sha1散列而不是adler32校验和。这基本上是诀窍。 如果有人愿意帮我把这个改成ffmpeg那会很棒。 – yawniek 2010-04-30 12:06:24

一个可能的解决方案,我发现似乎与VLC:

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

似乎不适用于电影,似乎不是平*立的 – yawniek 2010-03-07 11:11:01