答案1
运动
您没有说明您尝试使用此信息执行什么应用程序,但考虑到您正在处理安全摄像头,我建议您查看一下运动包。
您可以按照您要求的方式做一些事情,其中运动将显示参考图像和视频源之间的增量。
例子
AV转换
我还发现这篇博客文章讨论了一个可能对解决您的问题有用的功能。文章标题为:使用 ffmpeg (avconv) 进行场景变化检测以提取有意义的缩略图。
摘抄
现在的好消息是我们可以使用自动化工具来做到这一点。 FFmpeg (avconv) 在其 libavfilter 库中拥有我们需要的所有内容,以便从视频中提取静态图像,不是每隔 x 秒,而是每次视频图像发生显着变化时(或多或少等于场景变化)。这种魔法通常被称为场景变化检测。
一种方法是让视频编解码器完成艰苦的工作。大多数编解码器采用“关键帧”识别技术,这意味着“该帧是一个新场景”(I 帧),后续图像与“主帧”相比仅略有变化,因此编解码器只能存储差异(B-帧)而不是全帧。现在,在 ffmpeg 中,Stefano Sabatini 的选择过滤器会遍历视频,并仅在遇到 I 帧/关键帧(可能是新场景的开始)时才触发相应帧的保存
$ ffmpeg -vf “select=’eq(pict_type,I)’” -i somevideo.mp4 \ -vsync 0 -f image2 /tmp/thumbnails-%02d.jpg
这种方法有效,但并不完美。这就是为什么 Clément Boesch 添加了 scene,一个用于选择的场景检测子过滤器。如果您的 ffmpeg 版本有此代码,您可以这样调用它:
$ ffmpeg -vf “-vf select=’gt(scene\,0.9)’” -i somevideo.mp4 \ -vsync 0 -f image2 /tmp/thumbnails-%02d.jpg
如果您的 ffmpeg/avconv 抱怨“‘场景’中未定义常量或缺少‘(’”,您的 libavfilter/vf_select.c 编译中可能没有场景检测代码。
边注:
如果 ffmpeg/avconv 抱怨“缺少 ')' 或…中的参数太多”,您可能使用了文档中的示例,带有转义逗号,没有引号等。请确保在引号中包含整个“filtergraph” ,就像 -vf “” 其中有我们的“select=…”内容,包括单引号。