2012-07-13 80 views
1

我试图通过检测帧中存在标记(图像)来分割视频。我已经阅读了文档,我看到removelogo但不是detectlogo使用FFmpeg检测具有给定图像/徽标的帧

有谁知道这可以实现?我知道这个标志是什么以及它所在的地区。

我想我可以提取所有帧为巴新,然后分析它们一个接一个(或N乘N),但它可能是一个漫长的过程......

任何指针?

回答

3

ffmpeg本身没有这种能力。 delogo过滤器只需在其参数中使用矩形区域并根据其周围内容来对该区域进行内插。它不关心该地区以前包含什么;它会填写该区域,而不管它以前包含的内容。

如果您需要检测徽标的存在,那是完全不同的任务。你需要自己创建它;如果您认真对待这个问题,我建议您开始熟悉ffmpeg过滤器API并准备好让自己的手变脏。如果徽标具有鲜明的颜色,那么可能是检测它的好方法。

由于您所追求的可能只是输出关于哪些帧包含(或不包含)徽标的信息,因此作为模型的一个过滤器将是blackframe过滤器(它将搜索所有 - 黑框)。

2

您可以编写detect-logo模块,解码视频(YUV 420P FORMAT),将原始帧提供给此模块,在您希望标识的区域执行SAD(绝对差的和),如果SAD它的匹配可以忽略不计,记录帧数。您可以在这些帧中分割视频。 SAD仅在Y(亮度)帧上完成。为了保存处理,您可以在解码之前将视频缩放到较低的分辨率。

+0

你可以给任何关于如何实现SAD的指针吗?有没有模块已经做到这一点? – Sofia 2012-07-17 22:41:57

+0

http://www.freescale.com/webapp/sps/site/overview.jsp?code=DRPPCSOAD看看C模块。还有更多信息:http://en.wikipedia.org/wiki/Sum_of_absolute_differences – d33pika 2012-07-18 06:30:31