使用视频中的ffmpeg进行场景变换/镜头检测/图像提取

时间:2014-07-21 22:15:56

标签: video image-processing ffmpeg computer-vision video-processing

我正在尝试为视频获取有代表性的帧,以便删除可能出现在视频中的冗余帧。这就是我用来获取帧的方法。

./ffmpeg -i video.mp4 -vf select="eq(pict_type\,PICT_TYPE_I)" -vsync 2 -s 320x240 thumb-%02d.png

我也试过

./ffmpeg -i video.mp4 -f image2 -vf "select=gt(scene\,.4)" -vsync vfr thumb%04d.png

这方面的主要问题是模糊。如果我每隔5秒钟对帧进行一次采样,我就不会看到任何模糊,但是使用上面两个命令我会得到很多模糊。

视频可在此处找到,http://www.cs.umd.edu/~bharat/video.mp4

为了每隔10秒对视频进行一次采样,我使用以下内容:

./ffmpeg -i video.mp4 -r 1/10 filename%03d.jpg

使用正常采样输出: sampling output

使用select输出: select output

然而,对于某些视频,正常采样可能不好,并且可能会创建冗余帧。有没有办法在ffmpeg中使用一些选项并获得没有这种模糊的帧?如果正常采样可以获得良好的帧,则附近应该存在没有模糊的帧。我已经查看了ffmpeg中的场景切换等选项,但我不熟悉将它们用于此应用程序。

1 个答案:

答案 0 :(得分:2)

我建议还看看其他免费提供的镜头检测实现。例如,使用Johan Mathe Shotdetect的自定义阈值47会产生以下结果(每个镜头的第一帧): Shot Detection with jmathe's Shotdetect

然而,您的问题似乎更多地涉及视频稳定的问题,而不是场景变化或镜头检测。您在上面和OP中看到的模糊都是"工件"视频固有的,并不是由于用于剪切或采样视频的算法。如果你想减少运动量,你应该查看this post以及查看OpenCV's Video Stabilization模块。还有很多研究解决了这一挑战,包括thisthis