我正在尝试实现视频检索系统,我需要首先从视频中提取关键帧,理想情况下我想要一个用于自动检测这些关键帧的库,每个镜头中的一个关键帧。如果我可以配置要提取的关键帧(镜头中的连续帧的第一个,中间或最后一个),则可以获得奖励。 是否有开源实现?
答案 0 :(得分:4)
你所追求的是被称为镜头分割。虽然这是一个非常活跃的研究领域,但我认为您不太可能找到任何完整的库来解决问题,而且开箱即用。您最好的选择可能是阅读相关主题,选择最符合您要求的方法并自行编码。
一种方法是计算相邻帧的颜色直方图之间的卡方距离。当此距离超过用户指定的阈值时,您处于镜头边界。该方法在this paper中解释:
一个。 Nagasaka和Y. Tanaka,“自动视频索引和全视频 搜索对象外观“,信息处理期刊 存档,第15卷,第2期(1992),第316页
我玩过它,取得了一些成功。值得注意的失败是单次拍摄中突然发生的光线变化(由相机闪光等引起)和混合镜头变化。
一旦你知道镜头边界,就像其他人指出的那样,从每个镜头中选择一个关键帧将是微不足道的。
答案 1 :(得分:1)
ffmpeg lib(包含在openCV中)可以使用av_seek_frame()
寻找关键帧答案 2 :(得分:1)
如果您输入的是未压缩视频,可以从[www.ffmpeg.org]下载ffmpeg并使用此可执行文件将视频流解压缩到其帧中。
随后,为了检测您的镜头边界,您必须从视频关键帧中提取一些功能。在MediaMixer Deliverable, D1.1.2中提出了一种有效的镜头边界检测技术。此外,在MediaMixer网络研讨会中,您可以找到演示此镜头边界检测实现的演讲“Fragmenting your Media Assets meaningfully – media analysis for fragment detection and extraction”,同时您还可以访问MediaMixer演示器[http://www.mediamixer.eu/automatic-fragmentation-and -annotation-for-improved-access-to-lecture-videos /]其中视频镜头分割和概念检测的结果是可视化的。