我正在尝试为视频获取有代表性的帧,以便删除可能出现在视频中的冗余帧。这就是我用来获取帧的方法。
./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
使用正常采样输出:
使用select输出:
然而,对于某些视频,正常采样可能不好,并且可能会创建冗余帧。有没有办法在ffmpeg中使用一些选项并获得没有这种模糊的帧?如果正常采样可以获得良好的帧,则附近应该存在没有模糊的帧。我已经查看了ffmpeg中的场景切换等选项,但我不熟悉将它们用于此应用程序。
答案 0 :(得分:2)
我建议还看看其他免费提供的镜头检测实现。例如,使用Johan Mathe Shotdetect的自定义阈值47
会产生以下结果(每个镜头的第一帧):
然而,您的问题似乎更多地涉及视频稳定的问题,而不是场景变化或镜头检测。您在上面和OP中看到的模糊都是"工件"视频固有的,并不是由于用于剪切或采样视频的算法。如果你想减少运动量,你应该查看this post以及查看OpenCV's Video Stabilization模块。还有很多研究解决了这一挑战,包括this和this。