Podcast 逐字稿擷取器
從 5 個支援的 Podcast 擷取逐字稿。建議採用第 2 層(RSS+Groq Whisper)方法——速度快、免費,且在所有的 Podcast 中最為可靠。第 1 層的免費來源是「最佳努力」模式(可用性有限)。第 3 層 Taddy API 則是付費/商業選項。
快速參考
# 取得最新一集的逐字稿(自動偵測最佳方法)
python scripts/get_transcript.py "Lenny's Podcast" --latest
# 依集數標題或編號搜尋
python scripts/get_transcript.py 20vc --episode "Marc Andreessen"
python scripts/get_transcript.py dwarkesh --episode 15
# 強制指定方法
python scripts/get_transcript.py "cheeky pint" --latest --method whisper
python scripts/get_transcript.py a16z --latest --method taddy
# 儲存到檔案
python scripts/get_transcript.py lennys --latest --output transcript.md
# 列出所有支援的 Podcast
python scripts/get_transcript.py --list-podcasts
支援的 Podcast
| Podcast | 第 1 層(最佳努力) | 第 2 層 RSS+Whisper [建議採用] | 第 3 層 Taddy(付費) |
|---|---|---|---|
| Lenny's Podcast | GitHub 存檔(269 份逐字稿) | ✅ Substack RSS | ✅ 涵蓋 |
| Dwarkesh Podcast | 網站爬取 + Substack PDF | ✅ Substack RSS | ✅ 涵蓋 |
| Cheeky Pint | (無) | ✅ Transistor.fm RSS | ✅ 涵蓋 |
| 20VC | Substack PDF | ✅ Libsyn RSS | ✅ 涵蓋 |
| A16z Podcast | 網站爬取 | ✅ Simplecast RSS | ✅ 涵蓋 |
實作方式
1. 安裝相依套件
# 核心(永遠需要)
pip install requests
# 雲端語音轉文字(建議採用——快速、免費額度)
pip install groq
export GROQ_API_KEY="your-key" # 在 https://console.groq.com 取得
# 本機語音轉文字(免費,約需 5GB RAM)
pip install faster-whisper
# 音訊壓縮(為符合 Groq 的 25 MB 限制——Windows:winget/scoop)
# winget install ffmpeg 或 scoop install ffmpeg
# Taddy API(商業、選用)
export TADDY_API_KEY="your-key" # 在 https://taddy.org 取得
2. 取得逐字稿
腳本會自動選取最佳方法。預設建議採用第 2 層:
第 1 層 → 第 2 層(建議採用) → 第 3 層
(最佳努力) (Whisper) (Taddy API 付費)
第 1 層:免費直接來源(最佳努力,可用性有限)
- Lenny's:複製
ChatPRD/lennys-podcast-transcripts並依標題搜尋 - Dwarkesh:Substack PDF 爬取
- 20VC:Substack PDF 爬取
- A16z:網站爬取
- Cheeky Pint:無第 1 層來源可用
- 注意:第 1 層來源是「最佳努力」模式且有限。建議採用第 2 層(RSS+Whisper)。
第 2 層:RSS + Whisper 語音轉文字 [建議採用]
- 從 Podcast RSS feed 下載 MP3
- 若檔案大於 25 MB 則進行壓縮(ffmpeg)
- 透過 Groq Whisper API 轉寫(免費額度,每小時音訊約 10 秒)
- 快速、免費,且適用於註冊表中的每個 Podcast
- 所有使用情境的預設建議
第 3 層:Taddy API(商業/付費)
- 需要
TADDY_API_KEY(每月 $75 以上) - 適用於大規模或生產環境的逐字稿需求
- 涵蓋所有 5 個 Podcast,並提供自動轉寫
3. 使用 AI 進行分析
取得逐字稿後,將其傳給代理進行分析:
我有一份來自 [podcast] 的逐字稿。你可以幫我:
1. 總結關鍵論點
2. 萃取 3 個可操作洞見
3. 找出任何具爭議性的主張
4. 與討論相同主題的 [其他 podcast] 進行比較
支援的工作流程
單一集數
| 情境 | 指令 |
|---|---|
| 最新一集 | get_transcript.py "Lenny's Podcast" --latest |
| 依標題指定集數 | get_transcript.py 20vc --episode "Sam Altman" |
| 依編號指定集數 | get_transcript.py dwarkesh --episode 42 |
| 強制使用 Whisper 轉寫(第 2 層,建議採用) | get_transcript.py a16z --latest --method whisper |
| 強制使用 Taddy API(付費) | get_transcript.py lennys --latest --method taddy |
| 儲存為 Markdown | get_transcript.py cheeky-pint --latest --output episode.md |
| JSON 輸出 | get_transcript.py dwarkesh --latest --json |
跨 Podcast 搜尋與批次處理
| 情境 | 指令 |
|---|---|
| 在所有 Podcast 中依關鍵字搜尋 | get_transcript.py --search "Marc Andreessen" |
| 依來賓名稱搜尋 | get_transcript.py --guest "Sam Altman" |
| 在單一 Podcast 內搜尋 | get_transcript.py "Lenny's Podcast" --search "vibe coding" |
| 批次轉錄最後 N 集 | get_transcript.py "Dwarkesh Podcast" --last 5 |
| 搜尋並轉錄最佳比對結果 | get_transcript.py --search "AI safety" --transcribe |
| 搭配自訂數量的管道處理 | get_transcript.py --search "scaling laws" --transcribe --transcribe-count 5 |
| 過濾搜尋管道處理 | get_transcript.py "A16z Podcast" --search "crypto" --transcribe |
輸出結構
批次轉錄會儲存到 output/ 目錄下,以 Podcast 分類的子目錄中:
output/dwarkesh-podcast/Dwarkesh Podcast_2024-01-15_agi-is-still-30-years-away.md
output/20vc/20 Minutes VC (20VC)_2024-03-10_funding-round-analysis.md
每個檔案都包含一個 YAML 前置標頭:
---
podcast: Dwarkesh Podcast
episode: AGI is still 30 years away
date: 2024-01-15
url: https://...
source: whisper
---
Podcast 註冊表
位於 scripts/podcasts.json 的註冊表將每個 Podcast 對應到其 RSS feed、逐字稿來源和 API 端點。若要新增 Podcast:
{
"id": "new-podcast",
"name": "New Podcast",
"rss": "https://example.com/feed.xml",
"transcript_sources": {
"primary": {"type": "website_scrape", "url": "https://example.com"}
}
}
疑難排解
| 問題 | 解決方案 |
|---|---|
| 「找不到逐字稿」 | 建議採用第 2 層(RSS+Whisper)。若自動模式失敗,請嘗試強制使用 --method whisper。 |
| RSS 擷取失敗 | RSS feed 可能變更;請檢查 scripts/podcasts.json 中的最新 URL |
| 音訊下載緩慢 | 大型 MP3 檔案在連線速度慢時可能需要數分鐘 |
| Groq 達到速率限制 | 請稍候再試,或改用 local faster-whisper |
| Taddy 未回傳逐字稿 | 部分集數可能缺少逐字稿;請嘗試 --method whisper |
| Podcast 不在註冊表中 | 請將其新增至 scripts/podcasts.json |
| Windows 上的 Unicode 錯誤 | 已修正:腳本會自動重新設定 stdout 為 UTF-8;儲存的檔案使用 UTF-8 編碼 |
| 音訊大於 Groq 的 25 MB 限制 | 請安裝 ffmpeg:winget install ffmpeg(Windows)或 brew install ffmpeg(macOS) |
RSS Feed 狀態(截至 2026-06)
| Podcast | 舊的 Feed(已失效) | 目前的 Feed |
|---|---|---|
| Cheeky Pint | feeds.transistor.fm/the-cheeky-pint(404) | feeds.transistor.fm/cheeky-pint-with-john-collison |
| 20VC | feeds.simplecast.com/3GxrMqOd(404) | feeds.libsyn.com/61840/rss |
| A16z | feeds.simplecast.com/0cJfpoz2(404) | feeds.simplecast.com/JGE3yC0V |
常見錯誤
- 忘記設定 API 金鑰:請在環境變數或
.env檔案中設定GROQ_API_KEY - 依賴第 1 層免費來源:第 1 層是「最佳努力」模式且有限。請務必回退到建議採用的第 2 層(RSS+Whisper)方法。
- 未先複製 Lenny's 儲存庫:第 1 層需要先在本地端複製 GitHub 存檔才能運作
- 在未設定
TADDY_API_KEY的情況下使用--method taddy:會無聲地失敗;請設定金鑰或改用自動模式