9

我试图获取视频的代表性帧,以便去除可能出现在视频中的冗余帧。这是我用来获取帧的。从视频中使用ffmpeg场景变化/镜头检测/图像提取

./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中查看了诸如scenecut之类的选项,但我并不熟悉将它们用于此应用程序。

+0

此结果预期与定期帧采样。它是否一定需要'ffmpeg'?有很多免费的镜头检测实现。 – bjou

+0

不一定,任何事情都会做,我只需要摆脱模糊的帧 – Bharat

回答

2

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

但是,您的问题似乎与视频稳定的问题要处理更多比它的场景更改或镜头检测。您在上面看到的以及在OP中的模糊是视频固有的“人工制品”,并非由于用于剪切或采样视频的算法。如果你想减少运动量,你应该看看this post以及看看OpenCV's Video Stabilization模块。还有很多研究解决了这个挑战,包括thisthis

+0

感谢您的链接,我明白,视频中存在固有的模糊,什么是令人惊讶的ffmpeg只有当您使用时选择模糊的帧选择选项,你的结果似乎更好,可能是由ffmpeg选择的帧有最大的变化。 – Bharat

+0

我不确定“最大变化”是什么意思,但您可能还想试验一下您选择的框架。您提供的命令选择了I-Frame,但您也可以选择以下任一项:'I,P,B,S,SI,SP,BI'。 – bjou

+0

我的意思是太模糊的框架看起来与普通框架不同,ffmpeg可能会将其视为镜头的变化,看到P,B框架会给出什么感觉很有趣,再次感谢,我不知道我们也可以选择其他框架。如果我没有记错,应该有许多P,B帧,它如何知道选择哪个P/B帧 – Bharat