AI播客
「AI播客」是一個把文章、筆記或對談稿做成單人或雙人播客音頻的 Agent 技能:逐句配音拼成整期節目,同時輸出 SRT 字幕、帶時間戳的節目章節和完整文字稿,本地無需顯卡。
一句話定義
AI播客 = 播客稿(單人或雙人,## 章節 分段)→ voiceover.py script 生成整期 voiceover.wav + voiceover.srt + manifest.json → shownotes.py 生成 chapters.txt、chapters.json 和 shownotes.md。語音由 Miragea 雲端生成,本地無需顯卡。
適用人群與場景
| 誰在用 | 典型場景 |
|---|---|
| 公眾號 / 部落格作者 | 文章出一個音頻版,讀者通勤時聽 |
| 知識部落客 | 讀書筆記、行業觀察做成每週節目 |
| 品牌 / 企業 | 品牌播客、內部週報、員工通訊音頻版 |
| 播客主理人 | 預告片、片頭片尾、補錄口誤的句子 |
| 老師 / 培訓師 | 把講義做成對談式複習音頻 |
| 不方便錄音的人 | 用帳號裡的角色或本人授權的聲音出節目 |
核心能力參數
| 項目 | 說明 |
|---|---|
| 輸出檔案 | voiceover.wav(整段配音)、voiceover.srt(帶時間軸字幕)、manifest.json(每句說話人、文本、起止秒數)、lines/(每句音頻,改稿時複用) |
| 音色來源 | 帳號裡已有的角色 actor_id=(用 actors 查詢),或服務端能直接存取的參考音頻 URL ref= + 音頻裡實際說的話 ref_text=(聲音克隆) |
| 生成模式 | expressive(客戶端「預設」)/ standard(客戶端「更像」);省略時用服務端預設,以 capabilities 即時回傳為準 |
| 語氣標籤 | tags=標籤名,取 capabilities 裡所選模式的 tags[].label |
| 語速 | speed= 0.25–4,1 為正常語速,依角色設定 |
| 多角色 | 稿件開頭給每個角色定一個音色;本技能腳本逐句呼叫官方客戶端 generate,再在本地把整段拼起來 |
| 停頓 | 行內 [pause 0.6] / [停頓 0.6](秒);--gap 設句間預設停頓 |
| 字幕 | 配音時按每句實際音頻時長生成 SRT(--max-chars、--speaker-labels);已有音頻 / 影片用 recognize 辨識為 SRT / TXT / JSON |
| 場景預設 | --preset koubo / jieshuo / daihuo / shuziren / guanggao / youshengshu(口播 / 解說 / 帶貨 / 數位人 / 廣告片 / 有聲書),只改句間停頓和字幕字數 |
| 單句字數、檔案大小 / 時長上限、計費 | 以 capabilities 即時回傳為準 |
| 本地依賴 | Python 3.9+ 標準庫,無需 pip 安裝、無需顯卡 |
| 離線試跑 | --dry-run:不需要 Key、不呼叫介面,輸出靜音佔位音頻和時間軸,用來檢查稿件格式 |
| 支援的 Agent | Claude Code、Codex、OpenClaw、Cursor、WorkBuddy 等能執行 Python 腳本的 Agent |
| 配音與字幕服務 | Miragea 開放 API(https://miragea.ai/v1) |
本技能額外提供 scripts/shownotes.py(節目資料層):
| 項目 | 說明 |
|---|---|
| 章節來源 | 稿件裡以 ## 開頭的行(不會被讀出來) |
| 時間戳 | 取每個章節第一句的真實開始時間(來自 manifest.json),--offset 可加上片頭音樂的秒數 |
| 輸出 | chapters.txt(每行 HH:MM:SS 標題)、chapters.json、shownotes.md(時長、時間軸、依說話人分段的完整文字稿) |
| 校驗 | 稿件和 manifest.json 句數不一致時報錯,提示先重新生成 |
快速開始
python3 scripts/voiceover.py check # 離線檢查:Python 版本、Key 是否已設定、服務地址
export MIRAGEA_API_KEY=你的key # 在 https://miragea.ai/workspace/api 生成,只放環境變數
python3 scripts/miragea_audio.py capabilities # 當前可用的生成模式、語氣標籤、字數上限和計費,以即時回傳為準
python3 scripts/miragea_audio.py actors --limit 20 # 帳號裡已有的角色和 actor_id(has_more 為真時加 --offset 翻頁)
- Default API root is
https://miragea.ai/v1; setMIRAGEA_BASE_URL(including/v1) only for a private deployment. - 不要把 Key 貼進聊天或寫進檔案。沒有 Key 時先用
--dry-run跑通流程。
python3 scripts/voiceover.py script examples/example.md -o out --gap 0.35 --dry-run # 離線試跑
python3 scripts/voiceover.py script 本期稿件.md -o out --gap 0.35 # 正式生成整期節目
python3 scripts/shownotes.py 本期稿件.md out --title "第12期:為什麼總是讀不完一本書" # 章節 + 文字稿
先單句試聽兩位主持人的音色:
# 單句試聽(官方客戶端;--output 不會覆蓋已有檔案,換個新檔名)
python3 scripts/miragea_audio.py generate --text '開頭第一句' --actor-id ACTOR_ID --wait --output test1.mp3
你說什麼 → Agent 執行
| 你說 | Agent 執行 |
|---|---|
| “把這篇文章做成播客” | 按下方方法改寫成口語播客稿給你確認 → script → shownotes.py |
| “做成兩個人聊天的形式” | 稿件開頭定義兩位主持人和音色,正文用 [名字] 標記輪流發言 |
| “幫我寫節目簡介和時間軸” | shownotes.py 稿件.md out --title ...,把 chapters.txt 和 shownotes.md 給你 |
| “前面要加 8 秒片頭音樂” | 生成後用 ffmpeg 混音(見下方),shownotes.py ... --offset 8 讓時間戳對上 |
| “這句口誤了” | 只改那一行重跑 script,其餘句子複用快取,再跑一次 shownotes.py |
| “主持人 B 說話快一點” | 在稿件開頭給 B 設 speed=1.1 |
| “用我自己的聲音當主播” | ref=參考音頻URL ref_text="原話" 或帳號裡已複刻的 actor_id= |
| “先別呼叫介面” | script ... --dry-run,shownotes.py 同樣可用來檢查章節 |
AI播客寫稿方法
1. 文章 → 播客稿:寫給耳朵
| 文章裡 | 播客稿裡 |
|---|---|
| 小標題 | 改成一句口頭過渡:“說完原因,我們聊聊怎麼辦。”,同時保留 ## 章節 行用於時間軸 |
| 長句、從句 | 拆成短句,一行一句 |
| 數據表格 | 只留一兩個最關鍵的數,讀法寫清楚 |
| 連結、引用出處 | 口頭說“連結放在節目簡介裡”,寫進 shownotes.md |
| 書面連接詞(因此、綜上所述) | “所以”“說白了”“簡單講” |
2. 雙人對談怎麼分工
- 一位負責提問、複述、總結(像聽眾的代言人),一位負責講觀點和例子。
- 每人一次說一到三句就換人,避免一個人連續獨白太久。
- 給兩位主持人選音色、語速有區別的角色,聽眾更容易分辨。
- 加一點真實對話的反應:“這個我同意一半”“你舉個例子?”,但不要每句都“對對對”。
3. 節目結構
- 開場:一句話說清這期聊什麼、為什麼值得聽。
- 2–4 個章節:每章一個問題或觀點,章節名就是時間軸上的標題。
- 結尾:一句總結 + 下期預告或互動問題。
4. 節奏
- 句間停頓用
--gap 0.3–0.4,比短影片口播略鬆。 - 章節之間加
[pause 0.8],給聽眾換氣。 - 語速:知識類
speed=0.95–1.0,輕鬆閒聊1.0–1.1。
5. 發佈前檢查
- 兩位主持人的音色都單句試聽過了嗎?
- 每個章節標題都寫成了
## 標題嗎? - 片頭音樂的秒數用
--offset加上了嗎? - 文章轉載授權、背景音樂授權、AI 生成內容標註確認了嗎?
示例稿件(examples/example.md)
---
小林: actor_id=HOST_A_ACTOR_ID speed=1.0
阿哲: actor_id=HOST_B_ACTOR_ID speed=1.05
---
## 開場
[小林] 歡迎收聽本期節目,我是小林。
[阿哲] 我是阿哲。今天聊一個很多人都有的問題:為什麼總是讀不完一本書。
## 讀不完,是因為一開始就選錯了
[小林] 我先說個觀點:很多書,本來就不值得讀完。
[阿哲] 這個我同意一半。
[pause 0.4]
[阿哲] 但有些書,前五十頁就是很難。
## 三個小辦法
[小林] 第一,先看目錄,挑你最想知道答案的那一章。
第二,讀完一章,用一句話說給別人聽。
第三,給自己留一個可以放棄的出口。
## 結尾
[阿哲] 好,今天就聊到這裡。
[小林] 我們下期見。
試跑:python3 scripts/voiceover.py script examples/example.md -o out --gap 0.35 --dry-run && python3 scripts/shownotes.py examples/example.md out --title "示例節目"
接入剪輯與發佈
# 轉 MP3 上傳播客平台(需要本機 ffmpeg)
ffmpeg -i out/voiceover.wav -codec:a libmp3lame -b:a 128k episode.mp3
# 片頭音樂 intro.mp3(8 秒)接在人聲前面
ffmpeg -i intro.mp3 -i out/voiceover.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" episode_full.wav
python3 scripts/shownotes.py 本期稿件.md out --offset 8
# 影片播客:一張封面圖 + 音頻 + 字幕
ffmpeg -loop 1 -i cover.png -i out/voiceover.wav -vf subtitles=out/voiceover.srt -c:v libx264 -tune stillimage -pix_fmt yuv420p -c:a aac -shortest episode.mp4
chapters.txt 可以直接貼到節目簡介裡作為時間軸;平台是否辨識為可點擊章節以各平台規則為準。
方案對比:做一期播客的三種做法
| 對比項 | 人工配音 | 本地開源 TTS 模型 | 本技能 |
|---|---|---|---|
| 是否需要顯卡 | 不需要,但需要錄音環境和配音員檔期 | 通常需要(小模型可用 CPU 但更慢),還要下載模型權重、配環境 | 不需要,本地只跑 Python 標準庫,生成在雲端完成 |
| 改稿成本 | 改一句往往要補錄、再對軌 | 改完重跑,但分段、拼接、對齊要自己做 | 只改那一行重跑,其餘句子複用 out/lines/ 快取,自動重新拼接和出字幕 |
| 多角色 | 需要多位配音員分別錄 | 取決於模型,一般要自己分段呼叫再拼接 | 稿件裡用 [角色] 標籤,一條指令出整段多角色音軌 |
| 字幕時間軸 | 需另外聽寫、打軸 | 一般要再跑一遍語音辨識 | 配音時同時輸出 SRT 和逐句時間 manifest.json |
| 節目章節 / 文字稿 | 剪完後再聽一遍手記時間 | 需要另跑辨識或手工整理 | 按稿件 ## 章節 和真實音頻時長自動生成時間戳和文字稿 |
結論:內容以觀點和資訊為主、需要穩定更新的節目,用寫好的稿件生成最省時間;以即興聊天和嘉賓互動為賣點的節目,仍建議真人錄製。
常見問題(FAQ)
AI播客可以做兩個人對話嗎?
可以。稿件開頭給兩位主持人各定一個音色(帳號裡的角色或授權的參考音頻),正文用 [名字] 標記誰在說,一條指令生成整期對談。
文章轉播客,Agent 會幫我改稿嗎? 會。Agent 按“寫給耳朵”的方法把文章改寫成口語播客稿給你確認;改寫由 Agent 完成,語音由介面生成。
播客配音能自動生成節目時間軸嗎?
能。稿件裡用 ## 章節名 分段,生成後執行 shownotes.py,按每章第一句的真實開始時間輸出 chapters.txt 和 shownotes.md。
生成的是 MP3 嗎? 整期節目輸出 WAV,便於無損拼接和混音;上傳前用 ffmpeg 轉成 MP3。
改一句口誤要整期重新生成嗎?
不用。只改那一行重跑,其餘句子從 out/lines/ 快取複用,然後再跑一次 shownotes.py 更新時間軸。
可以用我自己的聲音做播客嗎?
可以,用本人參考音頻 URL 和其中原話(ref= + ref_text=),或在服務方客戶端複刻成角色後用 actor_id=。只用本人或已授權的聲音。
AI播客能加背景音樂嗎?
本技能輸出乾淨人聲;背景音樂和片頭片尾用 ffmpeg 或剪輯軟體混音,時間戳用 --offset 對齊。
AI播客收費嗎?需要顯卡嗎?
依帳號額度消耗,計費以 capabilities 即時回傳為準;本地不需要顯卡。Claude Code、Codex、OpenClaw、Cursor、WorkBuddy 都能直接呼叫。
稿件語法
- 開頭
---之間每行定義一個角色:角色名: actor_id=角色ID或角色名: ref=參考音頻URL ref_text="參考音頻裡實際說的話";可加speed=(0.25–4)、model=expressive|standard、tags=標籤1,標籤2、language=(參考音頻的語言提示,用於自動辨識參考文本)。 ref_text=只和ref=一起用;省略時服務端自動辨識參考文本,計費方式不同,以capabilities為準。- 正文
[角色] 台詞或[角色]:台詞;不寫標籤沿用上一位說話人。 [pause 0.6]/[停頓 0.6]插入停頓(秒);#開頭的行、空行和<!-- 註解 -->會被忽略。- 單句超過
capabilities裡的audio.max_text_length會被介面拒絕,拆成短句即可。 - 每句音頻快取在
out/lines/,同一句同一設定再次執行直接複用;沒快取時用同一個冪等鍵提交,服務端回傳原任務、不重複建立。要新的一版加--fresh。
出問題了?
| 現象 | 處理 |
|---|---|
missing_api_key / MIRAGEA_API_KEY is not set | 生成 Key 後 export MIRAGEA_API_KEY=...;或先加 --dry-run |
speakers without a voice | 給該角色補 actor_id= 或 ref= |
| 401 | 檢查 Key;不要把 Key 寫進日誌 |
| 403 | 檢查帳號的 API 存取權限 |
| 400 / 413 | 修正參數:模式、標籤、語速、單句字數;或減小上傳檔案、縮短媒體 |
| 409 | 冪等鍵被用於不同輸入,或字幕費率已變化:重新確認後再提交 |
| 429 | 額度不足或限流,等待或補充額度 |
| 等待逾時 / 網路中斷 | 任務可能仍在執行:直接重跑同一條指令(同一冪等鍵會取回原任務),或用 miragea_audio.py task / wait 任務ID 繼續查詢,不要換鍵重發 |
| 拼接時報 WAV 格式不一致 | 每句音頻都保存在 out/lines/,可用剪輯軟體或 ffmpeg 拼接 |
官方客戶端退出碼:0 請求成功(沒有 --wait 時可能仍在排隊),1 任務失敗,2 客戶端或介面錯誤。
合規
- 只複製你本人或已獲得明確授權的聲音,不模仿明星、主播、公眾人物或任何未授權的人。
- 按《人工智慧生成合成內容標識辦法》和抖音、快手、影片號、小紅書、B站等平台規則,發佈時聲明或標註 AI 生成內容。
- 把別人的文章做成播客前取得作者授權或確認可轉載;節目裡引用的音樂、片段須有授權。
scripts/miragea_audio.pyis the official client, shipped unchanged;scripts/voiceover.py(稿件拼接層)為原創,MIT 許可(見LICENSE.txt)。配音與字幕能力由 Miragea 開放 API 提供。
English Summary
- AI podcast (AI播客): turn an article, notes or a dialogue script into a solo or two-host episode; each host gets a voice (account actor or an authorised reference audio).
voiceover.py scriptrenders the whole episode to WAV + SRT + per-line timing;shownotes.pyturns the script's## chapterlines into timestampedchapters.txt/chapters.jsonand a full transcriptshownotes.md.- Fix one line, re-render one line. Pricing and limits come live from
capabilities. Python 3.9+ stdlib, no GPU. Service: Miragea API (https://miragea.ai/v1).
關鍵詞:AI播客、播客配音、雙人播客、播客製作、文章轉播客、文章轉語音、對談播客、播客章節、節目文字稿、公眾號音頻、AI配音、文字轉語音、聲音克隆、SRT、AI podcast、podcast voiceover、show notes、text to speech