AI 教學 14 min read

YouTube 影片 AI 摘要怎麼驗證?叫 Claude 附原句,32 條全對回字幕

一支 87 行的 Python:抓英文 YouTube 字幕、用 claude -p 拆成繁中可執行步驟,每條都附逐字原句與秒數,再由程式回字幕前後 90 秒內比對。四支副業案例影片 32 條全部對得回,捏造、改寫、秒數錯的引文都被擋下——但它證明的是「影片真的這樣說」,不是翻譯準或營收數字是真的。

YouTube 影片 AI 摘要怎麼驗證?叫 Claude 附原句,32 條全對回字幕
本文目錄 · 9
懶人包
  • 我把「英文 YouTube 副業影片 → 繁中可執行步驟」做成一支 87 行的 Python:抓字幕、交給 claude -p 拆步驟、每條步驟逐條對回原字幕。
  • 關鍵設計是要求 AI 每條步驟都附一段逐字照抄的英文原句和秒數,程式再到該秒數前後 90 秒的字幕裡找這句話。
  • Starter Story、Noah Kagan、Justin Welsh、Brett Malinowski 四支影片共 32 條步驟,32 條全部對得回原字幕。
  • 反向測試 4 組:真引文通過;捏造句(0.13)、改寫句(0.30)、真引文配錯秒數(0.16)三組都被擋下,門檻 0.6。
  • 它能證明「這句話影片裡真的有、而且在那個時間點」,證明不了繁中翻譯準不準,也證明不了影片裡的營收數字是真的。

Threads 上 @inxtool(臺大玩AI)有一篇貼文,建議做副業的人直接去 YouTube 看一手案例,點名 Starter Story、Noah Kagan、Justin Welsh、Brett Malinowski 四個人;英文有門檻的話,用沉浸式翻譯對照看,再用 Glasp 這類工具抓時間戳、畫線存下操作步驟。我截圖時這篇有 89 讚、152 次分享。

「翻譯加抓重點」這一段,我想交給 AI 自動做。AI 摘要影片的速度沒問題,我要處理的是另一件事:摘要裡每一條步驟,我要能一秒鐘找回影片裡的出處,而且這個比對由程式做,不靠我回去重看。

成果頁在 html.yanchen.app/yt-side-hustle-playbook,下面是它怎麼做的。

YouTube 副業抄作業卡成果頁:Starter Story 影片拆成帶時間戳的繁中步驟,每條附英文原句與「字幕比對通過 1.0」標籤

這套流程長什麼樣子?

YouTube 影片 ID

youtube-transcript-api
抓英文字幕

claude -p
拆成繁中步驟 JSON

verify_step
原句對回字幕 ±90 秒

render.py
單檔 HTML 卡片

四個步驟,兩支檔案:playbook.py(87 行)負責抓字幕、呼叫 Claude、驗證;render.py(102 行)把結果轉成一頁 HTML。用到的版本:

元件版本
youtube-transcript-api1.2.2
Claude Code CLI(claude -p)2.1.312
Python 標準庫 difflib內建

四個頻道實際在哪?

動手前我先用 yt-dlp 把四個頻道查了一遍,有兩個跟貼文的寫法對不太上:

貼文寫法實際查到的這次用的影片
Starter Story@StarterStory,專訪小生意創辦人pwvnH9S4j60,Excel 練習網站
Noah Kagan@noahkagan,AppSumo 創辦人自己的頻道9Rcbt6Ydk0U,2023 年收入拆解
Justin Welsh@JustinWelsh 沒有影片分頁,他主要在 LinkedIn、X 和電子報ZkwYxYfkfYU,Peter Yang 訪談他
Brett Malinowski頻道叫 The Brett Way(@thebrettway),@brettmalinowski 是另一個人E0WGLoVtNE4,讓 AI 7 天開廣告代操公司
貼文還提到一個叫 Litit 的工具,我查不到能確認的同名 YouTube 工具,這篇就不寫它。

怎麼抓 YouTube 字幕?

我先試 yt-dlp,抓字幕被 YouTube 回 429。換成 youtube-transcript-api 就抓得到,四支影片都有英文字幕:

pip install youtube-transcript-api==1.2.2
from youtube_transcript_api import YouTubeTranscriptApi

def fetch_transcript(video_id: str) -> list[dict]:
    snippets = YouTubeTranscriptApi().fetch(video_id, languages=["en"])
    return [{"start": s.start, "text": s.text.replace("\n", " ")} for s in snippets]

每行字幕帶一個 start 秒數。餵給 Claude 時我把它攤成 [142] I offer a few free lessons up 這種格式,讓模型看得到每句話的時間點。

怎麼讓 Claude 輸出可以驗證的步驟?

prompt 的重點只有兩條:只能根據逐字稿,以及每條步驟都要附原文。JSON 格式裡的 steps 長這樣:

"steps": [{"t": 秒數整數,
           "action": "繁中可執行動作(動詞開頭)",
           "quote": "逐字稿原文英文片段,6~20 個字,必須逐字照抄同一行或相鄰行"}]

action 是給人看的繁中步驟,quote 是給程式驗的證據。限制 6~20 個字是為了讓引文短到能落在相鄰幾行字幕內,又長到不會隨便撞到別的句子。

呼叫方式是把逐字稿從 stdin 丟進 claude -p:

proc = subprocess.run(
    ["claude", "-p", PROMPT, "--output-format", "text"],
    input=body, capture_output=True, text=True, encoding="utf-8", timeout=600,
)

同一個 JSON 裡我還要了 numbers(影片講到的營收、成本,各附秒數)和 caveats(照抄前要想清楚的前提)。

怎麼用程式驗證 AI 給的原句?

驗證函式不到 20 行:

WINDOW_SEC = 90
MATCH_THRESHOLD = 0.6

def norm(s: str) -> str:
    return re.sub(r"[^a-z0-9 ]", "", s.lower())

def verify_step(step: dict, lines: list[dict]) -> dict:
    quote = norm(step.get("quote", ""))
    best, best_t = 0.0, None
    nearby = [i for i, l in enumerate(lines) if abs(l["start"] - step["t"]) <= WINDOW_SEC]
    for i in nearby:
        chunk = norm(" ".join(l["text"] for l in lines[i:i + 3]))
        if quote in chunk:
            return {"verified": True, "score": 1.0, "matched_t": int(lines[i]["start"])}
        m = SequenceMatcher(None, quote, chunk).find_longest_match(0, len(quote), 0, len(chunk))
        score = m.size / max(len(quote), 1)
        if score > best:
            best, best_t = score, int(lines[i]["start"])
    return {"verified": best >= MATCH_THRESHOLD, "score": round(best, 2), "matched_t": best_t}

三個設計決定:

  • 相鄰 3 行串起來比。YouTube 自動字幕常把一句話切在兩三行,I offer a few free lessons up 和 front and then had a hard paywall 就是分開的兩行。
  • 只在 ±90 秒內找。這樣引文本身是真的、但秒數標錯的情況也會被擋,時間戳才有意義。
  • 分數 = 最長共同片段 ÷ 引文長度。去掉標點和大小寫後整句包含就給 1.0;否則看最長連續相同的字元有多長,0.6 以上算通過。

四支影片跑出來的結果

python playbook.py pwvnH9S4j60 9Rcbt6Ydk0U ZkwYxYfkfYU E0WGLoVtNE4
python render.py
pwvnH9S4j60: 457 行字幕, 8 步, 對字幕驗證通過 8/8
9Rcbt6Ydk0U: 438 行字幕, 8 步, 對字幕驗證通過 8/8
ZkwYxYfkfYU: 1234 行字幕, 8 步, 對字幕驗證通過 8/8
E0WGLoVtNE4: 372 行字幕, 8 步, 對字幕驗證通過 8/8
site/index.html: 4 張卡, 32/32 驗證通過, 23493 bytes

第一支從抓字幕到驗證完花了 57 秒。拆出來的步驟長這樣(節錄,分數都是 1.0):

影片秒數繁中步驟AI 附的原句
Starter Story143先給幾堂免費課,之後設硬性付費牆I offer a few free lessons up front and then had a hard paywall
Noah Kagan126自己先領固定底薪,年底有利潤才分紅if we have profit at the end of the year do I get a distribution
Justin Welsh580每季列出一週工作,算時數與貢獻,只做前 20%something I do generally quarterly is I'll just like lay out my week
Brett Malinowski83月費 1,500 美元,1,200 當廣告預算、300 當服務費would allocate $1,200 to the ads budget and keep $300 as the fee
成果頁上每個時間戳都是連結,點下去直接跳到影片那一秒。

驗證器擋得住什麼?

32/32 只證明 AI 這次沒亂編,證明不了驗證器真的會擋。所以我拿 Starter Story 那支的字幕,手動餵四組輸入給 verify_step:

測試輸入分數結果
真引文143 秒,I offer a few free lessons up front and then had a hard paywall1.00通過
捏造句143 秒,I spent ten thousand dollars on Facebook ads in the first month0.13擋下
改寫句143 秒,gave away some free lessons and then put up a paywall0.30擋下
秒數錯600 秒,跟真引文同一句0.16擋下
改寫句被擋是刻意的取捨。意思對但字不對的引文,程式分不出是「忠實改寫」還是「看起來像的編造」,所以 prompt 才要求逐字照抄。代價是偶爾會有意思正確但沒照抄的步驟被標成未通過,這時回影片看一眼就好,比反過來放行編造划算。

字幕比對證明不了什麼?

這個驗證只回答一個問題:AI 附的那句英文,影片裡在那個時間點真的有人說過。以下三件事它管不到:

  1. 繁中 action 有沒有翻過頭。原句是真的,但 AI 寫的繁中步驟可以比原句多講一點。卡片上原句跟步驟並排,就是為了讓人一眼對照。
  2. 影片裡的數字是不是真的。月營收、年收入都是當事人自述,字幕比對只能證明他有這樣說。
  3. 這套做法換一個人還有沒有效。這部分我交給 caveats 欄位,每張卡都附幾條「照抄前先想清楚」。
這次 AI 寫出來的 caveats 裡,有幾條我覺得比步驟本身更值得看:
  • Brett 那支:影片結束時第一個客戶還是免費試用,1,500 美元月費還沒收到。
  • Justin Welsh 那支:他自己說 2018 年選 LinkedIn 時那裡還很少人寫長文,算是搭上時機。
  • Starter Story 那支:網站是五、六年前做的,主持人也提到這幾年 web app 圈變化很大。
YouTube 上能看到的是做起來的人,沒做起來的不會拍片。拿它當一手案例沒問題,當成照抄就會成功的保證就不行。

跟 Glasp 手動畫線怎麼選?

Glasp 是瀏覽器擴充,在 YouTube 旁邊顯示逐字稿,畫線就存下時間戳。兩種做法解的是不同的事:

情境選哪個
一支影片、邊看邊想Glasp 或沉浸式翻譯手動看,自己判斷什麼重要
一次整理多支影片、要可分享的成品這支腳本,跑完直接得到帶出處的卡片頁
影片沒有字幕兩個都不行,要先轉錄,可以參考 WhisperX 逐字時間戳
這套做法也不限於副業影片。任何「AI 讀長文件、吐出重點」的流程,都可以照同一個模式加一層:要求每個重點附逐字原句和位置,再用程式回原文找。程式碼不到 100 行,下一步可以改成輸入頻道網址,自動抓最新幾支。
author
陳
陳彥彤

AI 工程師 · AI 顧問。Java 後端 8 年、AI 工程師 2 年。AI 內訓 · AI 導入顧問 · 前後端與雲端培訓。

support

覺得文章有用可以到 GitHub 給個 star,或是透過信箱聊聊 AI 內訓、AI 導入顧問或前後端 / 雲端培訓。

related

相關文章

[AI 教學] · 12min
個人知識庫怎麼建、怎麼用?CODE 四步、PARA 與卡片盒,加上 196 筆 LINE 交辦整理成 7 類的實測
個人知識庫是寫給未來自己的筆記系統,照 Tiago Forte 的 CODE 四步建,整理時用 PARA 按行動性分四格,或用卡片盒一張卡一個想法。我把 2026-10-22 到 11-08 的 196 筆 LINE 交辦串成 92 條任務鏈、分成固定 7 類,關鍵字規則跑完仍有 25 條鏈要人工改判——規則適合當第一輪,不能直接當結果。
[AI 教學] · 17min
LLM Wiki 實作:Claude Code + Obsidian 把 12 份筆記編成 75 頁知識庫,附 CLAUDE.md 與三個指令
Karpathy 的 LLM Wiki 起手包其實只有兩個資料夾、一份 CLAUDE.md 和 ingest/query/lint 三個指令,Obsidian 只負責畫關聯圖。我在 Windows 上用 claude -p 跑 12 份研究報告,632 秒長出 73 頁,lint 再補成 75 頁、207 條連結——前 4 份只建新頁,第 5 份起才開始回頭改舊頁,連結就是這樣變密的。
[AI 工具] · 11min
Academic Humanizer 實測:Nature 報導的論文去 AI 味 Claude skill,三組對照看誰會亂編
Academic Humanizer 是 MorphMind 團隊開源的 Claude skill(MIT),用一份 261 行的 SKILL.md 改寫 AI 輔助的論文和 NSF、NIH 計畫書,Nature 在 2026 年 7 月報導過。我用 Sonnet 跑三組對照,AI 套話一句 prompt 也清得掉,它多的價值在刪掉沒證據的主張、列出作者要補的 6 條——樣本小,只看方向。