按数据库(百万)查找重复的视频文件,指纹?模式识别?

时间:2010-08-28 17:32:15

标签: language-agnostic video comparison fingerprint audio-fingerprinting

在以下情形中:

我的项目目前有一万个视频文件目录,数量会急剧增加。

然而,很多都是重复的。对于每个视频文件,我都有关联的语义和描述性信息,我希望将这些信息合并为重复数据,以便为每个视频文件提供更好的结果。

现在我需要某种程序来索引数据库中的元数据,每当新视频进入目录时,计算相同的数据并在数据库中进行匹配。

问题是视频不是完全重复的。他们可以有不同的质量,amby裁剪,水印或续集/前传。或者在开始和/或结束时被切断。

不幸的是,比较越好,cpu和内存密集程度越高,所以我计划实现几层比较,从非常优雅但快速的比较开始(maby视频长度,容差为10%),并以最终的比较结束决定它是否真的重复(这将是社区投票)。

因此,我有一个社区来验证结果,只需提供低错失率的“良好猜测”。

所以现在我的问题是你们可以想到什么样的层次,或者你们有更好的方法?

我不关心创建元数据的努力,我有足够的奴隶来做到这一点。只是比较应该很快。所以,如果它有助于我将视频转换100次......

以下是我目前的想法:

  • 视频长度(秒)

  • 第一帧和最后一帧图片分析

如果此像素的颜色大于/小于0或1表示的平均值,我会将图片重新取样为缩略图大小并获取平均rgb值,然后逐个像素地序列化。所以我得到一个二进制字符串,我可以存储到mysql中并进行布尔位求和(内部由mysql支持)并计算剩余的非正数位(内部支持,然后是bianry字符串的Levenshtein距离)

  • 使用相同的vbr编解码器随着时间的推移开发比特率

我会将视频转码为具有完全相同设置的vbr videofile。 然后我会看某些时间点的比特率(完成视频的百分比或绝对秒数......然后我们只分析视频的一部分)。 和图片一样的东西。如果比特率大于平均值1,则其为0。 我们制作一个二进制字符串并将其存储在db中并稍后计算Levenshtein距离

  • 音频分析(随着时间的推移比特率和分贝变化,就像视频的比特率一样)

  • 关键帧分析

图像comarision就像第一帧和最后一帧一样,但在关键帧位置?我们将使用与比特率计算相同的源文件,因为关键帧很大程度上取决于编解码器和设置。

  • 随着时间的推移发展颜色

也许让我们在图像中取一个或多个区域/像素,看看它们是如何随着时间的推移而发展的。同样,变化大于/低于平均水平。 我认为黑/白就足够了。

  • 向用户提出建议以供最终批准......

还是我走错了路?我想我不能成为第一个遇到这个问题的人,但我找不到任何解决方案。

3 个答案:

答案 0 :(得分:17)

答案 1 :(得分:3)

好问题!只有测试才能说明哪些因素是最佳指标。一些想法:

  • 使用相同的vbr编解码器随着时间的推移开发比特率:听起来非常耗费CPU但我想它会产生很好的效果。音频分析似乎会以较少的工作提供类似的结果。
  • 第一帧和最后一帧图片分析:其中50%会不会是黑色的?一个更好的想法可能是使用非常中间的框架,但我不会指望这种技术是可靠的。
  • 使用贝叶斯统计记录哪些因素对正匹配做出了最佳贡献。这可以在测试阶段完成,以消除无益和昂贵的比较。
  • 让用户提供帮助!让用户将他们找到的重复内容组合在一起。他们对质量最好的人进行投票,并且他们将作为集团内的主要/官方版本。
  • 从最简单的比较开始,并在发现简单测试的缺点时添加更复杂的测试。视频长度是一个很好的开始,然后可能是一些基本的音频分析,并从那里开始工作。

答案 2 :(得分:1)

试试这个产品 - Duplicate Video Search(例如Visual Search Pony),它可以找到各种比特率,格式,分辨率等的重复视频文件。

例如,star-wars.avi(640x480 H.264)和sw.mpg(1280x720 MPEG)将被检测为重复,如果它们都是一部伟大电影的副本 - 星球大战。

根据他们的网站,该产品使用一些视频指纹技术,如关键帧exctraction或smth。像这样,独立于视频编码,分辨率,质量,比特率等。