Communitygithub.com

JinxinHu/open_claude_skills

从录制的研讨会、讲座或会议视频(YouTube、Vimeo、Panopto、Zoom 或本地视频文件)中提取幻灯片,每次幻灯片变化时生成一张带时间戳的 PNG,并构建成 PDF。

open_claude_skills 是什么?

该技能能够自动从各种来源(如 YouTube、Vimeo、Panopto、Zoom 录制或本地视频文件)的演讲视频中提取幻灯片。它使用 yt-dlp 下载视频流(仅视频,不下载音频),然后通过 ffmpeg 以每秒一帧的速度采样,并利用场景变化检测阈值保留每次幻灯片变化或渐进式构建步骤的第一帧。输出文件夹包含按顺序编号的 PNG 文件、一个记录每帧对应视频时间戳的 timestamps.txt 文件,以及一个 LaTeX 模板,可直接通过 pdflatex 编译成每页一张幻灯片、并附带对应 h:mm:ss 时间的 PDF。该技能适用于 Linux、macOS 和 Windows 平台,提供 Bash 和 PowerShell 两种脚本。对于带登录验证的录制(如 Panopto 或大学门户),支持通过浏览器 cookie 获取视频。用户还可以通过调整场景变化阈值或裁剪视频帧来优化提取结果,减少因摄像头画面或动画导致的误检。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/JinxinHu/open_claude_skills/tree/HEAD/video-seminar-crawling

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

从研讨会视频中提取幻灯片

scripts/ 目录下包含两个功能相同的脚本,分别适用于不同平台:

脚本适用平台
scripts/extract_slides.shLinux、macOS、Git Bash 或 Windows 下的 WSL
scripts/extract_slides.ps1Windows PowerShell,无需 bash
scripts/slides.texBeamer 模板,脚本会将其复制到输出文件夹中

工作原理:yt-dlp 仅下载视频流(无音频,分辨率最高 1080p)。ffmpeg 以每秒一帧进行采样,保留第一帧以及所有场景变化分数超过阈值的帧,因此每个保留的帧对应一个新的幻灯片或渐进式构建步骤。showinfo 日志会记录每帧的视频时间。输出文件夹包含:

  • slide_001.png、slide_002.png、...:每次幻灯片变化对应的图像
  • timestamps.txt:每帧对应的视频时间(秒)
  • frame_list.tex 和 slides.tex:运行 pdflatex slides.tex 可生成每页一张幻灯片、底部带有 h:mm:ss 时间戳的 PDF

操作步骤

  1. 检查工具。 运行 ffmpeg -version 和 yt-dlp --version。如果缺少某个工具,请安装(见下文)或告知用户如何安装。对于本地文件,不需要 yt-dlp。

  2. 根据平台选择脚本。 在 Windows 上,除非用户明确使用了 Git Bash 或 WSL,否则应使用 PowerShell 脚本。

  3. 运行脚本,针对用户提供的 URL 或文件,将结果输出到以演讲命名的文件夹中(例如 -o speaker_topic_frames),不要放在技能文件夹内。

    bash scripts/extract_slides.sh -u "https://www.youtube.com/watch?v=ID" -o talk_frames
    bash scripts/extract_slides.sh -i "recording.mp4" -o talk_frames
    
    powershell -ExecutionPolicy Bypass -File scripts\extract_slides.ps1 -Url "https://www.youtube.com/watch?v=ID" -OutDir talk_frames
    powershell -ExecutionPolicy Bypass -File scripts\extract_slides.ps1 -InputFile "C:\path\to\recording.mp4" -OutDir talk_frames
    

    -ExecutionPolicy Bypass 用于绕过 Windows 对脚本的默认阻止,仅对该次运行有效。

  4. 查看提取的帧后再报告。打开几个 PNG 文件(第一张、中间一张、最后一张),检查:

    • 摄像头画面或演讲者视图与幻灯片并列: 演讲者的动作会触发错误的幻灯片变化。在一帧中找出幻灯片区域,然后使用裁剪参数重新运行,例如 -c W:H:X:Y / -Crop W:H:X:Y(ffmpeg 裁剪语法:宽度、高度、左上角坐标)。
    • 帧数过少(遗漏了渐进式构建或微小变化):使用较低的阈值重新运行,例如 -t 0.05 / -Threshold 0.05。
    • 帧数过多(视频、动画、摄像头噪声):将阈值提高到 0.2-0.3,或进行裁剪。
    • 重复帧: 手动删除多余的 PNG 文件及其在 frame_list.tex 中的对应行。
  5. 生成 PDF(如果用户需要):进入输出文件夹,运行 pdflatex slides.tex(或 latexmk -pdf slides.tex)。

  6. 报告提取的帧数、输出文件夹、生成的 PDF,以及任何需要用户自行处理的问题,例如您故意保留的重复帧。

参数

bashPowerShell含义默认值
-u URL-Url URL要下载的视频 URL(yt-dlp 支持的任何站点)
-i FILE-InputFile FILE本地视频文件替代下载
-o DIR-OutDir DIR输出文件夹video_frames
-t X-Threshold X场景变化阈值,0-10.10
-c W:H:X:Y-Crop W:H:X:Y先裁剪到幻灯片区域无
-b NAME-Browser NAME使用此浏览器的登录 cookie(chrome、firefox、edge 等)无

安装工具

  • Windows: winget install --id yt-dlp.yt-dlp 和 winget install --id Gyan.FFmpeg,然后关闭并重新打开 PowerShell 以便系统找到它们。
  • macOS: brew install yt-dlp ffmpeg
  • Linux: sudo apt install ffmpeg(或发行版对应的包管理器命令)和 pip install -U yt-dlp
  • LaTeX(仅用于生成 PDF):需要 TeX Live 或 MiKTeX。MiKTeX 的 latexmk 需要 Perl;普通的 pdflatex 不需要。

故障排除

  • 录制文件需要登录才能访问(例如 Panopto、Zoom 云录制、大学门户):使用 -b chrome / -Browser chrome(或用户已登录的浏览器名称)。如果 yt-dlp 仍无法获取视频,请让用户下载视频后使用 -i 参数。
  • **Git Bash 中出现 $'\r': command not found 或 pipefail: invalid option name 错误:说明 .sh 文件使用的是 Windows 换行符。运行 sed -i 's/\r$//' scripts/extract_slides.sh 一次即可修复。
  • yt-dlp 在 YouTube 上出错(“请登录确认”、格式错误等):首先更新 yt-dlp,运行 yt-dlp -U 或 pip install -U yt-dlp,这可以解决大部分问题。
  • 无法访问视频主机的网络(受限环境或云会话):请告知用户,并提供命令让其在自己的机器上运行。

只允许获取用户有权访问的录制文件,并且除非演讲许可协议另有规定,提取的帧仅供用户个人笔记和学习使用。

相关技能