查看原文
其他

从视频中提取PPT,并转为PDF

alitrack alitrack 2022-11-12

今天推荐一款 Python 开发的的开源软件,video2pdfslides[1], 它的主要作用就是从一个视频里提取有效图片, 去重后并转为 PDF。

安装与运行

git clone https://github.com/kaushikj/video2pdfslides
cd video2pdfslides
pip install -r requirements.txt

python video2pdfslides.py <video_path>

分解步骤(代码解读)

  • 图片抽取
def get_frames(video_path):

使用 opencv_python 来读取视频,并抽取每一帧(实际上并不需要抽取每一帧,可以设置一个 FRAME_RATE,实现每隔几帧抽取一帧)

  • 图片去重
def detect_unique_screenshots(video_path, output_folder_screenshot_path):

使用 opencv_python 的背景提取算法来去重,

FGBG_HISTORY = FRAME_RATE * 15   # no.of frames in background object
VAR_THRESHOLD = 16               # Threshold on the squared Mahalanobis distance between the pixel and the model to decide whether a pixel is well described by the background model.
DETECT_SHADOWS = False            # If true, the algorithm will detect shadows and mark them.
fgbg = cv2.createBackgroundSubtractorMOG2(
 history=FGBG_HISTORY,
 varThreshold=VAR_THRESHOLD,
 detectShadows=DETECT_SHADOWS)
  • history:用于训练背景的帧数,默认帧数为 500 帧,如果不动手设置 learingRate,history 就被用于计算当前的 learningRate, 此时 history 越大,learningRate 越小,背景更新越慢
  • varThreshold:方差阈值,用于判断当前像素是前景还是背景。一般默认为 16,如果光照变化明显,如阳光下的水面,建议设为 25,值越大灵敏度越低
  • detectShadows:是否检测影子,设为 True 为检测,False 为不检测,检测影子会增加程序时间复杂度,一般设置为 False

OpenCV 中支持的两种背景提取算法都是基于模型密度评估,然后在像素级对图像进行前景与背景分类的方法,它们具有相同的假设前提 – 各个像素之间是没有相关性的,跟它们算法思想不同的方法主要是基于马尔可夫随机场理论,认为每个像素跟周围的像素是有相关性关系,但是基于马尔可夫随机场的方法速度与执行效率都堪忧!所以 OpenCV 中没有实现。

背景减法是一种技术,它对给定视频中的背景进行建模,然后使用该模型来检测运动对象。该技术在视频压缩和视频监视中大量使用。在必须检测静态场景中的移动物体的情况下,它的表现很好。该算法的基本原理是检测背景,为其建立模型,然后从当前帧中减去背景以获得前景。该前景对应于移动的对象。

这里的主要步骤之一是建立背景的模型。它与帧差分不同,因为我们不差分连续帧。我们正在对背景进行建模并实时更新,这使其成为一种自适应算法,可以适应不断变化的基线。因此,它的表现要比帧差分好得多。

  • 图片转 PDF
def convert_screenshots_to_pdf(output_folder_screenshot_path):

使用 img2pdf 包来把提前的图片转为 PDF

在转 PDF 之前,程序运行手工去除不想要的图片。

测试

昨天我用它处理一个 接近 47 分钟 的演讲视频(100M, mp4 格式),用时接近 19 分钟,最终生成 65 张截图


参考资料

[1]

video2pdfslides: https://github.com/kaushikj/video2pdfslides


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存