9

我有一个以 AVI 文件形式提供的视频培训课程。大多数屏幕显示为幻灯片,鼠标指针在其上移动。

我想在屏幕变化时自动捕获幻灯片的屏幕截图(忽略由于鼠标指针四处移动而导致图像发生少量变化时。)

我想这样做,以便我可以将图像粘贴到一个 word 或 html 文档中,我可以在学习时添加注释,因为我正在截屏,但它非常缓慢和乏味,而且课程很长(大约 24小时总播放时间)。

我很了解python,但不确定如何从视频文件中提取静止图像,然后如何将一个静止图像与另一个静止图像进行比较,看看它们有多大差异,以决定保留哪些和丢弃哪些。

任何人都可以建议如何去做吗?

4

3 回答 3

13

ffmpeg这样的工具适合从视频中提取图像。从手册:

 ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg

这将从视频中每秒提取一个视频帧,并将它们输出到名为foo-001.jpegfoo-002.jpeg等的文件中。图像将重新缩放以适应新的 WxH 值。

然后可以通过PIL和/或OpenCV来比较它们的差异。

编辑:我刚刚意识到只抓取关键帧(帧内)可能会更有效,因为当场景发生剧烈变化时会发生这些。稍后快速谷歌我们有这个:

ffmpeg -i foo.avi -vsync 0 -vf select="eq(pict_type\,PICT_TYPE_I)" -s WxH -f image2 foo-%03d.jpeg
于 2012-08-23T21:30:59.487 回答
5

你基本上想要的是场景检测。framedifferenceanalyzer是 Python 中的一个教育性概念证明,它正是这样做的,并且应该为了解问题本身提供一个良好的起点。

至于自己实现它,ffmpeg是将视频转换为帧序列的理想工具——我可能不会尝试在纯 Python 中做这部分。

为了计算帧之间的差异,您可以使用 ImageMagick(特别是它的比较工具)。ImageMagick 有几个 Python 绑定,例如PythonMagickmagickwand仅举两个。

您还可以使用OpenCV进行图像分析。OpenCV 是一个高性能、高质量的计算机视觉算法库,并且可能是执行此类操作的最强大的工具之一。但是,它假设您对计算机视觉/图像处理有一定的了解,并且已经对您正在寻找的内容有一个很好的了解。

于 2012-08-23T21:50:47.727 回答
0

从视频演示中提取幻灯片/帧有几个原因,尤其是在教育或会议相关视频的情况下。它使您无需观看整个视频即可访问学习笔记。

我已经多次遇到这个问题,所以我决定自己使用 python 为它创建一个解决方案。我已将代码开源,您可以轻松设置此工具并通过几个简单的步骤运行它。

有关youtube 视频教程,请参阅此内容。有关如何使用此工具的步骤。

  • 克隆这个项目
  • 通过运行“pip install -r requirements.txt”设置您的环境
  • 复制您的视频路径
  • 运行“python video2pdfslides.py <video_path>”

繁荣!pdf 幻灯片将在输出文件夹中提供 做笔记并享受!

于 2021-05-17T17:21:12.693 回答