Communitygithub.com

JinxinHu/open_claude_skills

從錄製的研討會、講座或會議影片(YouTube、Vimeo、Panopto、Zoom 錄影或本機影片檔)中,將投影片擷取為每頁一張的 PNG 圖片,加上時間戳記並整合成 PDF。當使用者想要從演講影片中取得投影片、圖表或投影片組時使用。

open_claude_skills 是什麼?

這是一個 AI Agent 技能,用於從各種影片來源(如 YouTube、Vimeo、Panopto、Zoom 錄影或本機影片)自動化擷取投影片。它使用 yt-dlp 下載影片串流(僅畫面、無音訊、最高 1080p),再透過 ffmpeg 以每秒 1 幀的速度取樣,並根據場景變化閾值保留第一幀及每次投影片變化時的畫面。最後產出為一組帶時間戳的 PNG 檔案,並可透過 LaTeX 模板生成含時間標記的 PDF。此技能支援 Linux、macOS、Git Bash、WSL 及 Windows PowerShell 等多種平台。使用者僅需提供影片網址或本機路徑,即可獲得完整投影片組,並可透過調整參數(如裁切、場景變化閾值)來優化結果,特別適合處理含有講者畫面的影片。

相容平台✓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、Windows 上的 Git Bash 或 WSL
scripts/extract_slides.ps1Windows PowerShell,不需要 bash
scripts/slides.texBeamer 模板,腳本會將其複製到幀圖所在目錄

運作方式:yt-dlp 僅下載影片串流(無音訊,最多 1080p)。ffmpeg 以每秒 1 幀的速度取樣,保留第一幀以及每次場景變化分數超過閾值的幀,因此每個保留的幀即代表一張新投影片或一個新的建置步驟。showinfo 日誌會記錄每幀的影片時間。輸出目錄中包含:

  • slide_001.png、slide_002.png、…:每次投影片變化對應一個 PNG 檔案
  • timestamps.txt:每張投影片的影片時間(秒)
  • frame_list.tex 和 slides.tex:執行 pdflatex slides.tex 即可產生每張投影片一頁,並在其下方顯示 h:mm:ss 時間。

步驟

  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要下載的影片(任何 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使用此瀏覽器的登入 cookies(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,這能解決大部分問題。
  • 無法連線到影片主機(沙盒或雲端工作階段):請告知使用者,並提供可在其本機執行的指令。

僅擷取使用者有權限存取的錄影,並保留幀圖供其個人筆記與學習使用,除非該演講的授權條款另有規定。

相關技能