Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

视频PPT双流采集系统

一个强大的视频PPT提取工具,采用双流(Dual-Stream)采集架构,能够从视频中智能提取PPT幻灯片,同时生成高精度全量存档和低精度去重摘要两组数据。

📋 目录

✨ 功能特性

双流采集架构

系统采用创新的双流并行采集设计,同时生成两组数据:

Group A: 高精度全量组 (Full-Fidelity Archive)

  • 🎯 目标:不计成本地保留所有细节,作为人工核查的"底片"
  • 智能触发:检测到显著变化后,一旦稳定就立即捕获
  • 🖼️ 原始画质:JPEG质量100,无损保存
  • 📄 直接生成PPT:自动将所有捕获的帧生成PPT文件
  • 🚫 不去重:保留所有捕获的帧,确保不遗漏任何细节

Group B: 低精度去重组 (Optimized Summary)

  • 🎯 目标:极高的可读性与低冗余,用于快速浏览
  • 🧠 深度去重:智能检测内容变化,即使时间戳在变,如果核心业务内容没有实质变化则跳过
  • 💾 优化存储:降低分辨率(70%)+ JPEG压缩(质量75),大幅减小文件体积
  • 📄 直接生成PPT:自动将去重后的帧生成PPT文件
  • 📊 智能判断:结合运动检测和哈希比对,确保只保存有意义的帧

核心算法特性

  • 鲁棒运动检测:改进的motion_score计算,更好地区分翻页动作和视频压缩噪点
  • 形态学操作:自动消除鼠标指针、激光笔等小物体干扰
  • ROI机制:可选择性忽略底部(任务栏)和右侧(摄像头)区域
  • 多线程处理:自动利用多核CPU,并行处理多个视频文件
  • 状态机触发:检测到显著变化后,一旦进入相对稳定就立即捕获

💻 系统要求

  • Python版本:3.6 或更高版本
  • 操作系统:Windows / Linux / macOS
  • 依赖库
    • OpenCV (cv2)
    • NumPy
    • python-pptx
    • 标准库:os, sys, tempfile, shutil, threading, concurrent.futures

📦 安装说明

1. 安装Python依赖

pip install opencv-python numpy python-pptx

或者使用requirements.txt(如果提供):

pip install -r requirements.txt

2. 准备视频文件

在脚本所在目录下创建 视频 文件夹,将需要处理的视频文件放入其中。

支持的视频格式:

  • .mp4
  • .avi
  • .mov
  • .mkv
  • .flv
  • .wmv
  • .m4v

🚀 快速开始

基本使用

  1. 准备视频文件

    项目目录/
    ├── tiqu.py
    └── 视频/
        ├── video1.mp4
        ├── video2.mp4
        └── ...
    
  2. 运行脚本

    python tiqu.py
  3. 查看结果 处理完成后,PPT文件将保存在 output_ppts 文件夹中:

    output_ppts/
    ├── video1_高精度.pptx    # Group A:高精度全量PPT
    ├── video1_低精度.pptx    # Group B:低精度去重PPT
    ├── video2_高精度.pptx
    ├── video2_低精度.pptx
    └── ...
    

⚙️ 配置说明

目录配置

tiqu.py 文件中可以修改以下配置:

# 视频文件夹名称(默认:"视频")
VIDEO_FOLDER = "视频"

# 输出文件夹名称(默认:"output_ppts")
OUTPUT_FOLDER = "output_ppts"

双流采集参数

process_video 函数中可以调整以下参数:

Group A 参数(高精度全量组)

group_a_motion_threshold=1.5,  # 运动阈值(%):检测显著变化(翻页动作)
                               # 值越大,越容易忽略微小变化
                               # 推荐范围:1.0-2.0

group_a_min_duration=0.6,      # 静止时长(秒):画面稳定后保存
                               # 值越小,捕获越灵敏,但可能捕获到动画中间
                               # 推荐范围:0.5-0.8

group_a_quality=100,          # JPEG质量(1-100):100为最高质量
                               # 推荐:100(原始画质)

Group B 参数(低精度去重组)

group_b_motion_threshold=1.5,  # 运动阈值(%):低于此值认为内容未变化
                               # 值越大,越容易忽略微小变化
                               # 推荐范围:1.0-2.0

group_b_hash_threshold=5,      # 深度去重阈值:汉明距离小于此值认为重复
                               # 值越大,去重越宽松
                               # 推荐范围:3-8

group_b_scale_factor=0.7,      # 分辨率缩放因子:0.7表示缩放到70%
                               # 值越小,文件越小,但画质越低
                               # 推荐范围:0.5-0.8

group_b_quality=75,            # JPEG压缩质量(1-100)
                               # 值越小,文件越小,但画质越低
                               # 推荐范围:60-85

通用参数

use_morphology=True,           # 是否使用形态学操作消除鼠标干扰
                              # True:启用(推荐)
                              # False:禁用

ignore_bottom_ratio=0.0,      # 忽略底部区域比例(0.0-1.0)
                              # 0.0:不忽略
                              # 0.1:忽略底部10%(适合有任务栏的视频)

ignore_right_ratio=0.0,       # 忽略右侧区域比例(0.0-1.0)
                              # 0.0:不忽略
                              # 0.1:忽略右侧10%(适合有摄像头的视频)

📁 输出说明

目录结构

output_ppts/
├── [视频名称1]_高精度.pptx    # Group A:高精度全量PPT
├── [视频名称1]_低精度.pptx    # Group B:低精度去重PPT
├── [视频名称2]_高精度.pptx
├── [视频名称2]_低精度.pptx
└── ...

文件命名规则

Group A(高精度)

  • 格式:[视频名称]_高精度.pptx
  • 示例:lecture01_高精度.pptx
  • 说明:
    • 包含所有捕获的帧(不去重)
    • 原始画质保存
    • 每张幻灯片对应一个捕获的帧

Group B(低精度)

  • 格式:[视频名称]_低精度.pptx
  • 示例:lecture01_低精度.pptx
  • 说明:
    • 只包含去重后的关键帧
    • 降低分辨率(70%)和压缩质量(75%)
    • 文件体积更小,适合快速浏览

PPT特性

  • 自适应尺寸:图片自动适应PPT页面,保持宽高比
  • 居中显示:图片在幻灯片中居中显示
  • 标准尺寸:PPT页面尺寸为 10英寸 × 7.5英寸(标准演示文稿比例)

🔬 技术原理

运动检测算法

系统使用改进的 calculate_robust_motion_score() 函数:

  1. 像素差异计算:计算两帧之间的绝对差异
  2. 自适应阈值:使用阈值过滤微小变化(默认25)
  3. 变化区域占比:计算变化像素占总像素的百分比
  4. 整体亮度检测:检测整体亮度变化(用于检测翻页)
  5. 综合评分:结合区域占比和亮度变化,生成0-100的运动分数

去重算法

Group A(高精度)

  • 策略:不去重,保留所有捕获的帧
  • 触发机制:检测到显著变化(翻页)后,一旦画面稳定就捕获
  • 原因:作为"底片",需要完整记录所有有意义的帧

Group B(低精度)

  • 策略:深度去重
  • 方法
    1. 运动检测:计算运动分数,低于阈值认为未变化
    2. 哈希比对:使用dHash计算图像哈希,比较汉明距离
    3. 双重判断:运动分数高 哈希差异大 → 保存

图像处理流程

  1. ROI提取:根据配置忽略底部/右侧区域
  2. 高斯模糊:去除视频压缩噪点(21x21核)
  3. 形态学操作:开运算消除小物体(鼠标、激光笔等)
  4. 运动检测:计算与上一帧的差异
  5. 决策保存:根据Group A/B的策略决定是否捕获
  6. 临时存储:捕获的图片先保存到临时文件夹
  7. PPT生成:视频处理完成后,将所有图片自动生成PPT文件
  8. 清理临时文件:PPT生成后自动删除临时图片文件

❓ 常见问题

Q1: 为什么Group A的PPT幻灯片这么多?

A: Group A采用智能触发机制,检测到变化就捕获,目的是保留所有细节。如果觉得幻灯片太多,可以:

  • 增加 group_a_motion_threshold(如改为2.0),减少捕获频率
  • 增加 group_a_min_duration(如改为0.8),要求更长的稳定时间
  • 使用Group B进行快速浏览(已深度去重)

Q2: Group B漏掉了某些页面?

A: 可能的原因:

  • group_b_motion_threshold 设置过高,导致微小变化被忽略
  • group_b_hash_threshold 设置过小,导致相似但不同的页面被去重

解决方案

  • 降低 group_b_motion_threshold(如改为1.0)
  • 增加 group_b_hash_threshold(如改为8)

Q3: 处理速度慢怎么办?

A: 优化建议:

  • 系统会自动使用多线程,无需手动配置
  • 如果视频很多,可以分批处理
  • 增加 group_a_motion_thresholdgroup_a_min_duration 可以减少Group A的捕获频率
  • Group B已经过优化,处理速度较快

Q4: 如何忽略视频中的任务栏或摄像头?

A: 修改通用参数:

ignore_bottom_ratio=0.1,  # 忽略底部10%(任务栏)
ignore_right_ratio=0.1,   # 忽略右侧10%(摄像头)

Q5: 支持哪些视频格式?

A: 支持常见视频格式:

  • .mp4, .avi, .mov, .mkv, .flv, .wmv, .m4v

如果遇到不支持的格式,可以使用FFmpeg转换:

ffmpeg -i input.xxx -c:v libx264 -c:a copy output.mp4

Q6: 如何调整画质和文件大小?

A:

  • Group A:修改 group_a_quality(1-100,默认100)
  • Group B
    • 修改 group_b_scale_factor(分辨率缩放,默认0.7)
    • 修改 group_b_quality(JPEG质量,默认75)

📝 更新日志

v2.1 - 直接生成PPT

  • ✨ 改为直接生成PPT文件,无需手动整理图片
  • 🎯 Group A采用智能触发机制,不再固定时间间隔采样
  • 🎯 优化采样策略,文件数量更合理

v2.0 - 双流采集架构

  • ✨ 新增双流采集功能
  • ✨ Group A:高精度全量组
  • ✨ Group B:低精度去重组
  • 🎯 优化运动检测算法
  • 🎯 改进去重策略

v1.0 - 基础版本

  • ✨ 基础PPT提取功能
  • ✨ 状态机触发机制
  • ✨ 形态学操作消除干扰
  • ✨ ROI机制

📄 许可证

本项目采用 MIT 许可证。

🤝 贡献

欢迎提交Issue和Pull Request!

📧 联系方式

如有问题或建议,请通过Issue反馈。


注意:本工具采用"宁肯重复,绝不漏掉"的策略,Group A会生成较多幻灯片。建议使用Group B进行快速浏览,需要细节时再查看Group A。所有图片会自动生成PPT文件,无需手动整理。

About

tranformer teacher's MP4 to PPT

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages