詳細影片摘要
使用者提供的影片連結:$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
在你的最終訊息中,用一行告訴使用者檔案路徑。
視覺分析模式 — 當使用者同意或事先要求時
當使用者同意視覺分析(或事先要求,例如「包括圖表」),請在逐字稿摘要之上執行以下步驟:
-
選擇時刻: 從逐字稿中收集視覺參考時刻的秒數(講者說「看這裡」、「這張圖表」的地方)。如果沒有明確的時刻,則使用
auto(場景變化偵測)。 -
擷取幀畫面(可能需要一些時間 — 使用 600000 毫秒的逾時):
bash ~/.claude/skills/video-summary/extract_frames.sh "<URL>" "<scratchpad>/frames" "369,430,585"最後一個參數是秒數清單;如果要使用
auto則省略此參數。腳本會輸出幀畫面的檔案路徑(frame_006-09.jpg= 06:09)。最多擷取 12 個幀畫面。 -
使用 Read 工具檢視這些幀畫面並進行解讀。
-
撰寫「## 視覺分析」章節: 對於每個有意義的幀畫面,提供可點擊的時間戳記 + 影像顯示的內容 + 它如何與該時刻講者的論點相關聯。跳過沒有資訊的幀畫面(僅有臉部、開場畫面)。
-
也將此章節附加到已儲存的摘要檔案中(使用 Edit)。
-
如果腳本顯示「ffmpeg 未安裝」,轉達
brew install ffmpeg的建議;如果它說未找到場景變化,告訴使用者該影片在視覺上是靜態的(無可分析的內容)。 -
如果腳本顯示「無法下載」加上「COOKIE_SUGGESTION」:請勿自行使用 cookies 重試 — 告訴使用者 YouTube 正在封鎖下載,並詢問他們是否要使用瀏覽器 cookies 重試。如果他們同意,使用
COOKIES=1環境變數重新執行相同的指令(提及可能會出現 macOS Keychain 權限提示)。
存檔查詢 — 無連結,詢問過去影片
當使用者詢問過去已摘要的影片而沒有提供 URL 時(「我上週摘要的影片對 X 說了什麼」、「我的存檔中有關 Y 的內容是什麼」、「上個月影片的共同主題是什麼」):
- 廣泛掃描: 在
~/VideoSummaries/*.md摘要檔案中 grep 關鍵字。除了使用者的語言之外,也試試看可能的英文同義詞(摘要是根據使用者的語言,但引述/術語可能使用影片的原始語言)。 - 深入檢視: 讀取匹配的摘要。如果摘要不夠詳細(需要確切的措辭、上下文,或摘要中未包含的細節),則前往同一部影片的原始逐字稿:從摘要中繼資料區塊的 URL 取得影片 ID,然後讀取/grep
~/VideoSummaries/transcripts/<video-id>.txt。 - 引用回答: 每個事實都要提供來源 — 影片標題、摘要日期、時間戳記。這裡也要讓時間戳記可點擊(影片 URL 在摘要的中繼資料區塊中)。從不依賴記憶或猜測來填補空白;如果不在存檔中,則明確說明。
- 日期篩選: 檔名遵循
YYYY-MM-DD-title.md格式 — 可透過檔名來篩選範圍,例如「上個月」。 - 此模式完全在本機進行:無需 YouTube,無需網路。