使用FFmpeg检测具有给定图像/徽标的帧

时间:2012-07-13 19:31:02

标签: ffmpeg video-processing

我试图通过检测帧中是否存在标记(图像)来分割视频。我查看了文档,但我看到removelogo但未detectlogo

有谁知道如何实现这一目标?我知道徽标是什么以及它将在哪个区域。

我想我可以将所有帧提取到png,然后逐个(或n乘n)分析它们,但这可能是一个漫长的过程......

任何指针?

2 个答案:

答案 0 :(得分:3)

ffmpeg本身没有任何此类能力。 delogo过滤器只需在其参数中取一个矩形区域并根据其周围环境插入该区域即可。它并不关心以前该地区的含义;它将填补该区域,无论它以前包含什么。

如果您需要检测徽标的存在,那就完全不同了。你需要自己创建它;如果您对此非常认真,我建议您开始熟悉ffmpeg过滤器API,并准备好弄清楚。如果徽标具有独特的颜色,那么这可能是检测它的好方法。

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

答案 1 :(得分:2)

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