Communitygithub.com

Pugnola/video-summary-skill

從影片連結(支援 YouTube 及其他 yt-dlp 支援的網站)擷取逐字稿,並產出詳細且精簡的摘要,涵蓋所有主要主題。

video-summary-skill 是什麼?

這個技能是專為 AI 代理(如 Claude Code、Cursor)設計的影片摘要工具,能夠從使用者提供的影片連結(支援 YouTube 及其他 yt-dlp 支援的網站)自動擷取逐字稿,然後產出結構化且詳細的摘要。它不僅能處理單一或多個影片,還能解析播放清單(自動處理或詢問使用者是否繼續),並支援一個完整的本機存檔系統,讓使用者可以透過關鍵字查詢過去已摘要的影片。摘要的格式包含影片資訊、時間戳記連結的主要主題以及結論,同時支援視覺分析模式,可從影片中擷取關鍵畫面進行解讀。這個工具的最大優勢在於它的離線功能:已擷取的影片會快取在 ~/VideoSummaries/ 目錄下,即使沒有網路也能查閱,且整個運作過程完全在本機執行。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add Pugnola/video-summary-skill

在你喜歡的 AI 中提問

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

預覽

來自技能 README

說明文件

詳細影片摘要

使用者提供的影片連結:$ARGUMENTS

步驟 0 — 判斷輸入類型

  • 無連結,詢問過去影片 → 跳至底部的「存檔查詢」章節;不要擷取新的逐字稿。

  • 單一影片連結 → 直接進行步驟 1。

  • 多個影片連結 → 依序對每個影片執行步驟 1-3。每個影片都有各自的完整摘要(相同格式),以 --- 分隔,並各自儲存到獨立的檔案。你可以在最後加上 1-2 句的筆記,說明這些影片的共同點或差異點(非報告)。

  • 播放清單連結(URL 含有 /playlist?list= 但無 v=) → 先擷取清單:

    bash ~/.claude/skills/video-summary/fetch_transcript.sh --list "<PLAYLIST_URL>"
    

    每一行會給出 url | title | duration。

    • 5 部影片或更少: 依序全部處理(如同多個連結)。
    • 超過 5 部: 先向使用者顯示影片數量與標題清單;詢問他們是否要全部、前 N 部或特定選取。在未獲得確認前,不要開始處理。
  • 混合影片 + 播放清單 URL(watch?v=...&list=...)→ 只為該單一影片做摘要;在摘要結尾用一句話提及該連結屬於一個播放清單,如果他們需要,你可以為其餘影片做摘要。

步驟 1 — 擷取逐字稿

執行:

bash ~/.claude/skills/video-summary/fetch_transcript.sh "<VIDEO_URL>"

該腳本會輸出:

  • === VIDEO INFO === — 標題、頻道、長度、日期
  • === CHAPTERS === — 如果上傳者有定義章節,則顯示時間戳記清單(若無此區段則省略)
  • === TRANSCRIPT === — 乾淨的附時間戳記逐字稿

注意事項:

  • 之前已擷取的影片會從 ~/VideoSummaries/transcripts/<video-id>.txt 存檔中即時讀取(你會看到 (Transcript read from archive: ...) 這行文字)— 無需網路。
  • 如果逐字稿非常長(腳本輸出被截斷),請將輸出重新導向到暫存檔案,並分段讀取 — 不要跳過任何內容。
  • 對於沒有字幕的影片,如果已安裝 whisper,腳本會下載音訊並在本機進行轉錄 — 這可能需要數分鐘,因此請使用較長的逾時時間(600000 毫秒)執行指令。stderr 上出現 "(No subtitles — ... whisper ...)" 這行文字表示正在進行此路徑。
  • 如果它回傳 "ERROR: no subtitles" 加上 "WHISPER_SUGGESTION":告訴使用者該影片沒有字幕,並且安裝 whisper(轉達錯誤訊息中的安裝指令)可以讓他們也能為這部影片做摘要。絕不要憑空虛構分析。
  • 如果它回傳 "ERROR: could not fetch video info" 加上 "COOKIE_SUGGESTION":請勿自行使用 cookies 重試 — 告訴使用者 YouTube 正在封鎖請求,並詢問他們是否要使用瀏覽器 cookies 重試。如果他們同意,使用 COOKIES=1 環境變數重新執行相同的指令(提及可能會出現 macOS Keychain 權限提示)。

步驟 2 — 撰寫詳細摘要

目標是詳細摘要:未看過影片的人應該能了解每個主要主題、論點和關鍵數字 — 但這不是逐字稿的重述。不要跳過任何主要主題;也不要在一個主題內轉述每句話或每個次要例子。

目標長度:15 分鐘的影片大約 300-450 字;較長的影片按比例增加,但絕不超過一頁(約 700 字)。

語言:摘要一律以使用者與你溝通時使用的語言撰寫(無論影片的語言為何)。如果不確定,請使用影片的語言。

結構:

# <影片標題>
**頻道:** ... · **長度:** ... · **日期:** ...

## 概述
影片的主題與核心訊息(2-3 句)。

## 主要主題
每個主要主題一個項目符號(典型影片約有 4-8 個):

- **[MM:SS] 主題標題** — 該主題的精華,約 2-4 句:主要想法、任何關鍵數字/例子、達成的結論。

章節標題:如果腳本輸出有 `=== CHAPTERS ===`,則根據這些章節和時間戳記建構項目符號(將標題翻譯成輸出語言;跳過沒有內容的章節,如開場/贊助商;合併非常短的連續章節為單一項目符號)。如果沒有 CHAPTERS,則自行從逐字稿中找出主題轉折點。

## 結論
講者的最終收穫以及給觀眾的建議行動(2-4 句)。如果你有自己的評論/注意事項,請在最後以一個單獨的句子清楚地加上。

規則:

  • 絕不包含開場、訂閱呼籲、贊助商內容或公告。
  • 從逐字稿中的 [MM:SS] 標記取得時間戳記;絕不憑空創造。
  • 可點擊的時間戳記: 對於 YouTube 影片,將每個 [MM:SS] 時間戳記轉換為連結至該秒數:[06:09](https://youtu.be/<VIDEO_ID>?t=369)(t = 總秒數)。這同時適用於聊天輸出和儲存檔案。對於非 YouTube 來源,將時間戳記保留為純文字;不要偽造連結。
  • 不要加入任何不在逐字稿中的資訊。
  • 如果有 1-2 個真正引人注目的引述,將它們包含在相關的項目符號中;不要另外開一個章節。
  • 如果使用者要求「深入探討」某個特定部分,逐字稿已在上下文中 — 盡可能展開該部分。
  • 視覺建議: 如果逐字稿中有 3 個或以上的視覺參考(「這張圖表」、「那個表格」、「在螢幕上」、「如您所見」等),在摘要結尾附加一行:「📊 這部影片看起來視覺豐富 — 如果您需要,我也可以分析其中的圖表/截圖。」 如果使用者同意,切換至視覺分析模式。如果沒有視覺參考,則不要加入此註記。

步驟 3 — 將摘要儲存到存檔

聊天訊息是主要的交付成果:務必先在對話中輸出完整的摘要。存檔檔案僅是額外的副本 — 絕不要跳過聊天輸出而直接寫入檔案,也絕不要用指向檔案的指標取代摘要。

在聊天中輸出摘要後,使用 Write 工具將相同內容儲存到:

~/VideoSummaries/<YYYY-MM-DD>-<影片標題-kebab-case>.md

(日期 = 今天。將標題縮短為小寫、ASCII、以連字號分隔;最多 60 個字元。)

在檔案的最頂端加入這個中繼資料區塊:

> **影片:** <URL>
> **摘要日期:** YYYY-MM-DD

在你的最終訊息中,用一行告訴使用者檔案路徑。

視覺分析模式 — 當使用者同意或事先要求時

當使用者同意視覺分析(或事先要求,例如「包括圖表」),請在逐字稿摘要之上執行以下步驟:

  1. 選擇時刻: 從逐字稿中收集視覺參考時刻的秒數(講者說「看這裡」、「這張圖表」的地方)。如果沒有明確的時刻,則使用 auto(場景變化偵測)。

  2. 擷取幀畫面(可能需要一些時間 — 使用 600000 毫秒的逾時):

    bash ~/.claude/skills/video-summary/extract_frames.sh "<URL>" "<scratchpad>/frames" "369,430,585"
    

    最後一個參數是秒數清單;如果要使用 auto 則省略此參數。腳本會輸出幀畫面的檔案路徑(frame_006-09.jpg = 06:09)。最多擷取 12 個幀畫面。

  3. 使用 Read 工具檢視這些幀畫面並進行解讀。

  4. 撰寫「## 視覺分析」章節: 對於每個有意義的幀畫面,提供可點擊的時間戳記 + 影像顯示的內容 + 它如何與該時刻講者的論點相關聯。跳過沒有資訊的幀畫面(僅有臉部、開場畫面)。

  5. 也將此章節附加到已儲存的摘要檔案中(使用 Edit)。

  6. 如果腳本顯示「ffmpeg 未安裝」,轉達 brew install ffmpeg 的建議;如果它說未找到場景變化,告訴使用者該影片在視覺上是靜態的(無可分析的內容)。

  7. 如果腳本顯示「無法下載」加上「COOKIE_SUGGESTION」:請勿自行使用 cookies 重試 — 告訴使用者 YouTube 正在封鎖下載,並詢問他們是否要使用瀏覽器 cookies 重試。如果他們同意,使用 COOKIES=1 環境變數重新執行相同的指令(提及可能會出現 macOS Keychain 權限提示)。

存檔查詢 — 無連結,詢問過去影片

當使用者詢問過去已摘要的影片而沒有提供 URL 時(「我上週摘要的影片對 X 說了什麼」、「我的存檔中有關 Y 的內容是什麼」、「上個月影片的共同主題是什麼」):

  1. 廣泛掃描: 在 ~/VideoSummaries/*.md 摘要檔案中 grep 關鍵字。除了使用者的語言之外,也試試看可能的英文同義詞(摘要是根據使用者的語言,但引述/術語可能使用影片的原始語言)。
  2. 深入檢視: 讀取匹配的摘要。如果摘要不夠詳細(需要確切的措辭、上下文,或摘要中未包含的細節),則前往同一部影片的原始逐字稿:從摘要中繼資料區塊的 URL 取得影片 ID,然後讀取/grep ~/VideoSummaries/transcripts/<video-id>.txt。
  3. 引用回答: 每個事實都要提供來源 — 影片標題、摘要日期、時間戳記。這裡也要讓時間戳記可點擊(影片 URL 在摘要的中繼資料區塊中)。從不依賴記憶或猜測來填補空白;如果不在存檔中,則明確說明。
  4. 日期篩選: 檔名遵循 YYYY-MM-DD-title.md 格式 — 可透過檔名來篩選範圍,例如「上個月」。
  5. 此模式完全在本機進行:無需 YouTube,無需網路。

相關技能