Community生產力與協作github.com

jasveerai88/podcast-kit

將單一集節目 JSON 檔案(包含節目名稱、標題、摘要、來賓、連結、章節、逐字稿、持續時間)轉換為該集節目的發布用素材。

podcast-kit 是什麼?

這是一個專為播客製作流程設計的命令列工具,基於純 Python 標準庫開發,完全在本機運作。它從一個統一的集節目 JSON 檔案中產生三種關鍵輸出:節目筆記(Markdown 或純文字)、驗證過的 YouTube 與 Podcasting 2.0 格式章節,以及根據逐字稿文字訊號(疑問句、數字、驚嘆句、強力片語)排序的精彩片段規劃。章節驗證機制非常嚴格:只有完全符合規範(首章從 0:00 開始、時間嚴格遞增、始終在節目時長內、標題非空)時才會產出檔案,否則直接結束並回傳錯誤碼 1,避免播放器因格式錯誤而無聲跳過片段。YouTube 的額外規則(至少 3 個章節、每個不少於 10 秒)則以警告處理。精彩片段分數從逐字稿文字計算,僅供編輯參考,不保證實際效果。此工具支援 Claude Code、Cursor 等 AI Agent 平台,適合在完成單一集節目時使用。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/jasveerai88/podcast-kit/tree/HEAD

Installed? Explore more 生產力與協作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

podcast-kit — 代理技能

目的

發布一集節目包含一系列從同一組事實產生的小型複製工作:節目筆記、YouTube 章節、Podcasting 2.0 章節檔案,以及尋找值得剪輯的時刻。此工具接受一個集節目 JSON 並產生所有這些素材,讓事實只存在一次。純 Python 標準庫;僅本機運作;集節目檔案是它唯一讀取的內容。

本工具的核心誠實原則: 章節清單只有在有效時才會匯出——播放器會默默忽略損壞的清單,因此發布損壞的匯出比不發布更糟;而音訊圖表分數是根據逐字稿文字計算的優先查看排名,絕非對某個時刻表現的預測,規劃也絕非已渲染的音訊圖表。

何時使用 / 不使用

使用時機:

  • 集節目已存在(或可寫成)一個集節目 JSON:完成它意味著產生節目筆記、YouTube 和播客應用程式的章節,以及決定要剪輯哪段。
  • 管線需要一個是/否的章節閘門:chapters 退出碼 0 = 清單有效且匯出已產生;退出碼 1 = 不要按現狀發布章節。
  • 編輯者想在仔細聽完整段錄音之前,先取得五個值得一聽的時間戳記。

請勿使用:

  • 需要轉錄功能——逐字稿是這裡的輸入。請先用轉錄工具產生片段。
  • 需要音訊或影片渲染——audiogram-plan 是一個規劃(時間戳記 + 文字 + 原因)。請將其交給編輯者或渲染工具。
  • 需要 RSS、託管或批次處理——此工具每次有意識地只完成一個集節目檔案。

指令

每個指令都將集節目檔案作為位置引數,並支援 --json。

# 節目筆記 — Markdown(預設)或純文字
python3 src/podcast_kit.py show-notes EPISODE.json \
    [--format md|text]

# 驗證 + 匯出章節(無效時退出碼 1 + 不匯出)
python3 src/podcast_kit.py chapters EPISODE.json \
    [--format youtube|json|both]

# 排名值得剪輯的時刻(無合格片段時退出碼 1)
python3 src/podcast_kit.py audiogram-plan EPISODE.json \
    [--top 5]

集節目欄位:show(選填)、episode(選填整數)、title(show-notes 必要)、published(選填,原樣輸出)、duration_seconds(chapters 必要;秒數或時間戳記字串)、summary(show-notes 必要)、guests — 列表 {"name", "role"?}、links — 列表 {"label", "url"}、chapters — 列表 {"start", "title"}、transcript — 列表 {"start", "end", "speaker"?, "text"}。時間戳記在所有地方都接受秒數(754)、"M:SS" 或 "H:MM:SS"。每次讀取時都會驗證檔案;結構性問題(缺少欄位、錯誤的時間戳記、片段在開始前結束、片段超過時長)是退出碼 2 的錯誤,會指出有問題的章節或片段。

章節驗證(精確)

問題(退出碼 1,不匯出):第一個章節未從 0 開始;某個開始時間未嚴格晚於前一個開始時間;某個開始時間等於或超過 duration_seconds(在 duration − 1 開始是有效的);標題為空。

警告(會回報,仍會產生匯出):少於 3 個章節;某個章節少於 10 秒。兩者都是 YouTube 的規則,非 Podcasting 2.0 的規則——無論如何匯出都是有效的,YouTube 可能忽略該匯出。

匯出版本:YouTube 行是 MM:SS Title(當集節目時長達一小時以上時使用 H:MM:SS)。Podcasting 2.0 格式為 {"version": "1.2.0", "chapters": [{"startTime", "title", "endTime"}]}——每個章節的 endTime 是下一個章節的 startTime,最後一個章節的 endTime 是節目時長。

音訊圖表分數(精確)

每個逐字稿片段,僅根據其文字:

  • 問號:每個 +2,上限 +4
  • 數字(數字序列,例如 18、1,900):每個 +2,上限 +4
  • 驚嘆號:每個 +1,上限 +2
  • 強力片語——固定清單 "the truth is"、"biggest mistake"、"nobody tells you"、"everyone gets wrong"、"never"、"always"、"secret"、"myth"(全詞比對,不分大小寫):每個 +3,上限 +6
  • 片段長度 15–60 秒(含):+2

門檻:片段總分需達到 5 才會被列出。排序:分數遞減,同分時以最早開始時間為準。--top N 限制列表數量(0 或負數 = 所有合格片段)。每個列出的時刻都會列印實際找到的訊號理由——沒有理由的分數在此工具中不存在。

輸出 JSON 結構(--json)

共同欄位:tool("podcast-kit")、version、command、episode_file(檔案名稱)。

show-notes:title、format("markdown" 或 "text")、notes——渲染後的筆記為一個字串,與文字檢視列印的內容完全相同。 chapters:title、duration_seconds、valid(布林值)、problems(字串列表)、warnings(字串列表)、chapters——每個 {start_seconds, start, title, end_seconds, end, length_seconds}——youtube(匯出文字,無效時為 null)、podcasting20(匯出物件,無效時為 null)。 audiogram-plan:title、segments_scanned、floor(5)、moments——每個 {rank, start_seconds, start, end_seconds, end, duration_seconds, speaker, text, score, reasons}。當沒有片段合格時,moments 為 [],並有 note 欄位說明未達到門檻(退出碼 1)。

發生錯誤時,stdout 輸出為單一物件:{"error": "<message>"},並帶有退出碼 2——包括 --json 模式下的 argparse 使用錯誤。絕不會輸出純文字或追蹤堆疊。

退出碼

  • 0——指令成功;對於 audiogram-plan,至少有一個片段達到門檻。
  • 1——發現狀況:chapters 發現驗證問題(未產生匯出),或 audiogram-plan 未發現值得剪輯的片段。兩者都不是當機——請針對此發現採取行動。
  • 2——錯誤:集節目檔案不存在或不是有效的 JSON、缺少必要欄位、錯誤的時間戳記、格式錯誤的章節或片段、無效的旗標。不得引用失敗執行的輸出事實。

代理必須遵守的限制與誠實規則

  • 無效的章節不會匯出任何內容。 當 chapters 退出碼為 1 時,請勿從 JSON 輸出的 chapters 陣列重建匯出並發布——列出的問題正是播放器會忽略它的原因。請修正集節目檔案並重新執行。
  • 警告不是問題。 包含警告的有效清單可以發布;請明確說明 YouTube 可能不會顯示這些章節(太少或某一章太短),但播客應用程式會顯示。
  • 分數不是預測。 請將某個時刻回報為「根據文字訊號排名第一」,切勿稱為「最佳時刻」或「會表現很好的片段」。此工具無法聽見錄音;表達方式可能使低分片段成為正確的剪輯片段,而規劃說明了這一點。
  • audiogram-plan 的退出碼 1 不代表集節目空無內容。 這表示沒有片段攜帶可排名的訊號。請勿在未附加「工具僅讀取文字」的限定詞時,將其回報為「沒有好片段」。
  • 規劃不是檔案。 audiogram-plan 產生的是時間戳記和文字。在渲染工具實際根據規劃製作出音訊圖表之前,切勿告知使用者音訊圖表已存在。
  • 僅限本機:此工具僅讀取命令列指定的集節目檔案,不會向任何地方發送任何資料。

相關技能