Community程式設計與開發github.com

watch — 讓Claude從頭到尾看完一部影片

根據網址(YouTube、Loom、Zoom錄影、直接mp4連結)觀看影片,不只讀取字幕,還能看見螢幕上實際顯示的內容。利用ffmpeg場景偵測來擷取畫面,而非定時取幀,因此不會遺漏任何圖形、示範、剪輯或B-roll畫面。

watch — 讓Claude從頭到尾看完一部影片 是什麼?

此「watch」技能專為Claude Code開發,讓AI代理能完整理解一部影片的內容,包括視覺與聽覺資訊。不同於僅處理文字轉錄的工具,它利用ffmpeg場景偵測技術(臨界值0.2–0.4)在場景轉換時精準擷取關鍵幀,確保螢幕上的所有圖形、程式碼、簡報投影片、使用者介面及示範畫面都不被遺漏。針對YouTube來源,它透過yt-dlp優先取得內建字幕(免費),若無字幕則以Whisper語音辨識模型(建議small或base模型)作為備援轉錄。支撐平台包括YouTube、Loom、Zoom分享連結及直接mp4/webm檔案,所有YouTube請求皆經由專屬包裝腳本`yt.sh`處理,該腳本已整合登入Cookie、PO-token與n-challenge破解機制,以規避2025年後的YouTube防爬蟲限制。輸出內容包含帶時間戳的SRT字幕、從場景日誌提取時間的關鍵幀圖片,以及一份結構化分析報告(含重點摘要、時間戳概念說明、隱藏於文字外的視覺資訊及精彩片段),並可應要求將結果存入Obsidian知識庫。

相容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/akimov121-hub/watch/tree/main

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

watch — 讓Claude從頭到尾看完一部影片 是做什麼的?

將影片拆分為Claude原生能夠讀取的東西:幀圖片(使用Read工具查看)+ 逐字稿(文字)。結果不僅理解話語,還能掌握螢幕上發生的事。

雙語支援。 這是英文版。完整的俄文對應版本為 SKILL.ru.md。 使用者使用哪種語言就使用哪種語言工作;工作流程與指令完全相同。

依賴項目(透過 install.sh 一次性安裝)

檢查方式:command -v yt-dlp ffmpeg whisper node

  • yt-dlp → ~/.local/bin/yt-dlp(安裝於 ~/.local/python312 下的 Python 3.12 — 系統 Python 通常過舊;近期 yt-dlp 版本需要 3.10+);
  • ffmpeg → 來自 imageio-ffmpeg,符號連結至 ~/.local/bin/ffmpeg;
  • whisper → openai-whisper(安裝於系統 Python 下;模型會在首次使用時下載);
  • node → ~/.local/node(v24)— 用以繞過 YouTube 的防護措施。

針對 YouTube,install.sh 還會設置:

  • 一個 PO-token 提供者(bgutil),以指令稿模式建構於 ~/.local/bgutil-pot/server/build/;
  • Node.js 執行環境 + 一個 EJS 元件,用以解決 YouTube 的 n-challenge;
  • 來自已登入 YouTube 帳號的 Cookie,存放於 ~/.config/watch/cookies.txt。

如果 Cookie 過期(YouTube 再次要求「確認你不是機器人」),請使用者透過瀏覽器擴充功能(如「Get cookies.txt LOCALLY」)重新匯出 cookies.txt,並放置於 ~/.config/watch/cookies.txt。

務必透過包裝腳本下載:bash ~/.claude/skills/watch/yt.sh … — 它會自動加入正確的 YouTube 旗標。對於直接 mp4/Loom/Zoom 網址,這些額外旗標不會造成影響。

工作流程

1. 設定

  • 建立工作資料夾:mkdir -p /tmp/watch/<slug>(slug = 從網址/主題提取的簡短名稱)。
  • 解析網址(YouTube / Loom / Zoom 分享連結 / 直接影片檔案)。若是本機檔案則跳過下載步驟 — 直接處理該檔案。

2. 逐字稿 — 優先使用字幕(免費時可用)

bash ~/.claude/skills/watch/yt.sh --write-subs --write-auto-subs --sub-langs "en,ru" \
  --skip-download --convert-subs srt -o "/tmp/watch/<slug>/subs.%(ext)s" "<URL>"

如果出現 .srt 檔案,那就是一份帶時間戳的現成逐字稿 — 直接使用它。

3. 下載影片(擷取畫面與作為 Whisper 備援都需要)

bash ~/.claude/skills/watch/yt.sh -f "bv*[height<=480]+ba/b[height<=480]/18/best" \
  -o "/tmp/watch/<slug>/video.%(ext)s" "<URL>"

你會得到 .mp4 或 .webm 檔案 — 之後使用實際的檔案名稱(video.*)。 如果沒有字幕,就用 Whisper 將音訊轉錄成文字(模型 small;若要快速測試可用 base):

whisper "/tmp/watch/<slug>/video.webm" --model small --language en \
  --output_format srt --output_dir "/tmp/watch/<slug>/"

第一次執行時會下載模型(small 約 460 MB)— 這是正常的一次性行為。若非英語音訊請移除 --language en,或設定正確的語言代碼。Whisper 速度較慢:一段 34 分鐘的片段需要數分鐘 — 請在背景執行。

4. 按 場景變化 擷取畫面(關鍵步驟 — 非定時取幀)

ffmpeg -i "/tmp/watch/<slug>/video.webm" -vf "select='gt(scene,0.3)',showinfo" \
  -vsync vfr "/tmp/watch/<slug>/frames/frame_%04d.png" 2> "/tmp/watch/<slug>/scenes.log"
  • 臨界值 0.3 — 調整 0.2–0.4 以控制畫面密度(數值越低 = 畫面越多)。
  • 從 scenes.log 中的 showinfo 日誌(pts_time)取得每幀的時間戳。
  • 如果畫面太多(長影片),保留約 60–150 張最具資訊量的畫面,並刪除時間上過於接近的幀。解碼長影片需要一些時間 — 請在背景執行。

備援方案 — 如果場景太少(0–2 幀)。 平順、未經剪輯的素材(單一連拍鏡頭、空拍機、頭像談話)產生的場景變化很少。此時改以固定間隔取樣:

ffmpeg -i "/tmp/watch/<slug>/video.webm" -vf "fps=1/5,scale=960:-1,showinfo" \
  -vsync vfr "/tmp/watch/<slug>/frames/frame_%04d.png" 2> "/tmp/watch/<slug>/scenes.log"

根據影片長度調整間隔(1/5 = 每 5 秒一張畫面),使總數維持在約 150 張以內。第 i 張畫面的時間戳 = i × 間隔。

4a. YouTube:為何所有操作都經過 yt.sh

YouTube(2025 年後)需要同時具備以下三項,否則會回傳 HTTP 403 / 「不是機器人」/「僅限圖片」:

  1. 來自已登入帳號的 Cookie(~/.config/watch/cookies.txt);
  2. PO-token(來源證明)— 由 bgutil 在本機產生(指令稿模式,Node);
  3. 解決 n-challenge — 使用 Node 執行環境 + EJS 元件(--remote-components ejs:github)。 以上全部已內建於 yt.sh — 直接呼叫即可。直接 mp4/Loom/Zoom 來源沒有這些防護措施。如果再次要求「確認你不是機器人」,代表 Cookie 已過期 — 要求提供新的 cookies.txt。

5. 分析

  • 讀取逐字稿(.srt)。
  • 檢視提取的畫面(透過 Read 工具進行視覺辨識):簡報投影片、程式碼、示範畫面、圖形。
  • 利用時間戳將視覺內容與逐字稿對應起來。

6. 報告

提供:

  • TL;DR(3–5 行);
  • 附時間戳的關鍵概念;
  • 文字中未呈現但螢幕上顯示的內容(圖表、使用者介面、示範畫面);
  • 附時間戳的 Notable moments / Quotes。

7. 儲存至知識庫(先詢問)

詢問:「將此分析結果儲存至您的知識庫(Obsidian)?」如果同意,則在適當資料夾中撰寫一則 Markdown 筆記,並包含相關筆記的連結。未經確認不得儲存。

規則

  • 工作檔案置於暫存資料夾 /tmp/watch/<slug> — 不要污染專案目錄。
  • 未經明確要求,不得對外發布或傳送任何內容。
  • 不應繞過需要登入才能觀看的私人影片 — 應告知使用者。

相關技能