影片 Podcast 製作小工具 (Video Podcast Maker Nano)
一個供個人使用的 7 步驟流程:研究 ∥ 素材 → 腳本 → TTS → 音頻檢查點 → 影片 → 預覽檢查點 → 4K 渲染 ∥ 發布套件。無捆綁腳本、無硬編碼後端、無模板。此技能擁有邏輯並預設自主運行;TTS 後端和影片工具則依每個影片選擇(參閱工具選擇(每個影片))。
使其無論工具選擇為何都能運作的關鍵——三個不變原則:
- 檢查點絕不跳過——但誰來檢查則由政策決定。 存在三個檢查點:腳本(步驟 2 後)、音頻(步驟 3 後)、預覽(渲染前)。預設檢查者是代理自身(自我驗證,定義於每個檢查點);專案的 AGENTS.md/CLAUDE.md 可將任何檢查點升級為人為關卡——參閱監督政策。
- 音頻是主時鐘。 最終影片的持續時間必須與旁白音頻相符,誤差在 ±0.5 秒內(兩者皆使用
ffprobe)。視覺效果需配合音頻長度,反之則否。 - 腳本變更會使下游所有項目失效。 編輯腳本 → 重新運行腳本檢查點,然後依序執行 TTS → 音頻檢查點 → 視覺效果 → 預覽檢查點 → 渲染。切勿手動修補時間。
監督政策
預設模式為自主:流程從頭到尾執行,代理執行每個檢查點的自我驗證。工作專案的 AGENTS.md/CLAUDE.md 可透過每行一個設定來覆寫每個檢查點:
Checkpoint 1 (script): human— 在步驟 2 後暫停,直到使用者批准腳本。值得這麼做:後期修改腳本需要完整重新執行一次。Checkpoint 2 (audio): human— 使用者在視覺效果前聽取完整音頻。當 TTS 誤讀在後期難以察覺時值得這麼做。Checkpoint 3 (preview): human— 使用者在渲染前審查草稿。對於風格敏感的頻道值得這麼做。
未提及的檢查點保持由代理驗證。專案政策檔案起始於 AGENTS.template.md(位於此 SKILL.md 旁):將其複製到影片專案根目錄作為 AGENTS.md(加上一個 CLAUDE.md 副本給 Claude Code)並填入工具繫結。此技能絕不會在任何地方上傳或發布任何內容——發布套件是磁碟上的檔案;發布始終是人類在此流程外的行為。
工具選擇(每個影片)
在步驟 3 之前,一次性決定 TTS 後端和影片工具,優先順序如下:
- 專案繫結優先。 工作專案中已填寫的
AGENTS.md/CLAUDE.md(參閱監督政策)即為使用者的常駐規格——使用它,無需掃描,無需猜測。如果使用者在對話中指名某個工具,則覆寫該檔案。如果政策檔案遺失或仍包含模板佔位符(/absolute/path/to/...),則透過規則 2-3 解決繫結,然後將解析後的值寫回專案政策檔案,以便下次運行時從繫結狀態開始。 - 自動檢測已安裝的技能。 掃描對話中可用的技能,尋找能夠執行該工作的技能——影片:包裝了創作工具(Remotion, HyperFrames, CapCut, ...)的技能;TTS:任何包裝了 TTS 引擎的技能。排除端到端流程技能(例如其他 video-podcast-maker 變體,如果已安裝):它們像此技能一樣是流程,而非後端——在此處調用它們會嵌套工作流程並使檢查點數量加倍。找到一個合適的 → 使用它;找到多個 → 選擇最符合專案語言和輸出需求的。將選擇記錄在
research.md中;在最終摘要中呈現。切勿阻塞等待工具確認。 - 未找到任何工具。 回退到使用者已有的純 CLI(ffmpeg 加上任何 TTS CLI)並告知使用者——切勿未經提示就安裝新工具。如果 TTS CLI 無法輸出字幕時間,則透過將腳本均勻分割到音頻持續時間來推算提示時間,並在檢查點 2 標記此近似值。如果使用者指定的工具缺失或無法滿足最低能力要求,則告知使用者並降至規則 2,而非臨時湊合。
最低能力要求(適用於規則 1-3):TTS 選擇必須產生旁白音頻加上字幕時間;影片選擇必須能匯出一個草稿影片檔案(用於檢查點 3 驗證)和 4K 解析度。即時預覽是額外獎勵,絕不能替代草稿匯出。輔助工作無需選擇:研究使用內建網路搜尋,靜態圖片/封面則使用影片工具的靜態圖片匯出或任何圖片工具,持續時間檢查使用 ffprobe。如果 ffmpeg/ffprobe 缺失,則報告並停止——±0.5 秒的不變原則無可協商,且不能為了維持運行而跳過它。
工作目錄佈局
一個影片的所有成品位於 videos/{name}/ 中({name} = 小寫英文,連字號分隔)。音頻/時間檔案的名稱會根據所選後端調整;重要的是檔案集:
videos/{name}/
├── research.md # 步驟 1 — 事實 + 來源
├── podcast.txt # 步驟 2 — 旁白腳本
├── podcast_audio.wav # 步驟 3 — 旁白音頻 (名稱依後端而定)
├── podcast_audio.srt # 步驟 3 — 字幕時間 (或後端的等效格式)
├── assets/ # 步驟 1 — 圖片/BGM + sources.md(每個素材的來源 + 授權)
├── video-project/ # 步驟 5 — 影片工具產生的任何內容
├── final_4k.mp4 # 步驟 7 — 3840×2160 渲染
├── cover.png # 步驟 7 — 影片封面
└── publish_info.md # 步驟 7 — 標題 / 描述 / 標籤 / 章節
工作流程
進入點檢查(步驟 1 之前)。 在專案根目錄(或使用者命名的目錄)尋找 videos/{name}/。如果它已包含先前對話中的成品,則這是疊代——從受影響的最早步驟開始(參閱疊代),不要重新執行步驟 1。僅在無任何成品存在時才從步驟 1 開始。
步驟 1 — 研究 ∥ 收集素材
從一次調查過程中產生的兩個平行輸出(事實和素材來自相同來源):
研究 → research.md。調查主題(網路搜尋、論文、使用者的指示)。提煉到 research.md:事實、數字及其來源。腳本中聲稱的每個數字都必須能追溯到這裡——沒有來源的精確數字是捏造的;刪除它或標明出處。
素材 → assets/。將視覺效果和封面將使用的所有內容收集到 videos/{name}/assets/:每個章節的圖片/插圖/螢幕截圖、品牌標誌、背景音樂。兩個來源,按優先順序:
- 使用者提供 — 使用者提供或指向的檔案;複製到
assets/,切勿原地引用。 - 自動收集 — 首先尋找官方素材(產品橫幅、規格卡、螢幕截圖),否則使用免費/授權素材集(unDraw SVG、Pixabay/Pexels、OpenMoji / Microsoft Fluent Emoji / Google Noto Emoji、
@lobehub/icons用於品牌標誌)。
在收集時將每個素材的來源 URL + 授權記錄在 assets/sources.md 中(需要歸屬的素材集必須在步驟 7 的影片描述中註明來源)。某個章節沒有合適的素材?不要偽造螢幕截圖——改為對該章節回退到純文字佈局(或通用的免費授權插圖),將此決定記錄在 assets/sources.md 中,然後繼續;在人類模式下可選擇詢問使用者。缺失的素材可以在步驟 5 之前的任何時間添加。
步驟 2 — 腳本 → podcast.txt,然後檢查點 1
僅口語文字,無 markdown。使用 [SECTION:xxx|display-label] 標記將腳本分割成片段(小寫英文名稱,例如 [SECTION:hero|intro])——每個影片片段一個章節。此標記慣例是腳本、TTS 分塊和視覺佈局之間的可攜式合約;任何 TTS/影片工具都可以使用它。標記是結構化元數據:永遠不會被朗讀,也永遠不會作為字幕文字顯示——TTS 和字幕僅使用標記之間的文字。
風格規則(語言無關):參閱腳本風格(語言無關)。
檢查點 1 — 腳本自我審查(強制)。 針對每條腳本風格規則驗證腳本,然後將其章節與 assets/ 進行比對:列出沒有匹配素材的章節,根據上述無素材規則收集或回退,並記錄哪些章節沒有素材。在人為模式下(專案政策),則暫停並將腳本移交——直到使用者明確批准前,不要執行 TTS。音頻、時間和視覺入場都源於腳本;後期修改腳本需要完整重新執行一次。
步驟 3 — TTS
運行所選的 TTS 後端(Azure, Edge, fish, minimax, ... — 無論對話選擇了哪個)。產生:
- 旁白音頻(WAV/MP3)
- 字幕時間(SRT 或等效格式,提示文字 = 腳本原樣)
在合成前處理發音,無論旁白語言為何:無法機械推導的品牌/術語讀音(Qwen 讀作其中文品牌名,MoE 逐字母拼讀)應根據後端機制放入別名/音素列表中——切勿放入腳本文字中(否則會洩漏到字幕中)。
步驟 4 — 音頻檢查 — 檢查點 2
代理自我驗證(自主模式):使用 ffprobe 將音頻持續時間與腳本的粗略估算進行比對(依語言語速;僅用於捕獲嚴重錯誤,如靜音或截斷檔案);驗證腳本中的每個品牌/術語令牌都有別名/音素條目(涵蓋性檢查——實際發音正是人類模式檢查點 2 的目的);檢查是否存在指示合成失敗的靜音或裁剪片段(使用 silencedetect/volumedetect)。如果發現問題,修復別名列表缺口並重新合成。在人為模式下,使用者改為聽取完整音頻;誤讀 → 修復別名列表(非腳本),重新合成,重新檢查。
步驟 5 — 製作影片
使用所選工具(Remotion, HyperFrames, CapCut, ...)將視覺效果剪輯到旁白音頻,使用 assets/ 作為素材池。podcast.txt 中的章節標記驅動佈局;字幕提示驅動文字入場。將草稿檔案保留在 videos/{name}/ 中。
步驟 6 — 預覽檢查 — 檢查點 3
代理自我驗證(自主模式):檢查草稿匯出(一個可搜尋的影片檔案——最低能力要求保證了有一個):為每個章節提取一個影格(ffmpeg -ss <mid-section-time> -i draft.mp4 -frames:v 1)並檢查每個影格是否有佈局溢出、缺少字幕、損壞的素材引用;驗證草稿持續時間與旁白音頻的誤差在 ±0.5 秒內。每次修改後修復並重新驗證。在人為模式下,使用者親自審查草稿(如果工具有即時預覽則使用,否則使用草稿匯出);僅在明確確認(「渲染」)時才進行渲染,且每一輪修改都需要重新確認。
步驟 7 — 4K 渲染 ∥ 發布套件
平行運行(渲染是長時間的阻塞工作;發布套件不依賴於它):
- 渲染 為 3840×2160 →
final_4k.mp4。在宣告完成前,驗證持續時間與旁白音頻的誤差在 ±0.5 秒內。 - 發布套件 →
publish_info.md(標題 / 描述 / 標籤 / 章節時間戳——每個章節從其第一個提示的 SRT 時間開始)和cover.png(如果可用,從影片工具的靜態影格產生,否則使用任何圖片工具;可重複使用assets/中的素材)。publish_info.md的素材來源章節從assets/sources.md複製。
腳本風格(語言無關)
來源: 完整技能的
video-podcast-maker/references/natural-narration.md(反AI風格) +script-polish.md(深度編輯)是規範來源; 此處是語言無關的提煉。先在該處編輯規則,然後鏡像到 此處——不要分支規則並使其漂移。
旁白語言是使用者腳本所使用的任何語言——此流程預設為中文,但以下規則適用於任何語言的口語體。這些規則在檢查點 1 強制執行;大聲朗讀每個章節——如果卡住,請拆分句子。
- 日常口語散文,非書面散文。 每句一個想法,主詞在前,無嵌套從句,不用 — 或 · 作為連接詞。句子長短交錯;輕微的第一人稱是可接受的。
- 連接詞替換。 將書面連接詞(此外 / 然而 / 因此 / 總而言之)替換為日常用語,或刪除。刪除列舉式開場白(首先 / 其次 / 最後),直接進入下一個要點。
- 殺戮清單。 刪除公式化填充詞:企業流行語、「值得注意」、「眾所周知」、「革命性」、「顛覆性」、「無縫」、「讓我們拭目以待」——以及其在旁白語言中的等效詞。
- 結構性提示。 動詞-名詞殼(「執行最佳化」)→ 具體行動 + 結果(「將審批從三步驟縮減為一步」)。「不是X而是Y」→ 直接陳述Y。三者並列(「同時A、B和C」)→ 僅保留資訊量最大的項目;兩個比三個好。模糊加強詞(「顯著地」)→ 一個數字或可察覺的後果。模糊歸因(「專家說」)→ 具名來源 + 日期,否則刪除句子。標語式結尾(「前景光明」)→ 以具體事實、數字或下一步行動作結。
- 數字使用阿拉伯數字(
86.1,1.5G,9B)——字幕是腳本原樣,因此應書寫在螢幕上應顯示的形式。切勿為了修正TTS誤讀而將口語形式寫入腳本;請使用後端的別名/音素層。 - 數字必須可追溯到
research.md——沒有來源的精確數字是捏造的;刪除它或標明出處。
疊代
- 腳本已變更 → 重新執行檢查點 1(人為模式下由人類執行),然後從步驟 3(TTS)開始,經過檢查點 2 和 3 直到渲染。切勿手動編輯時間。
- 音頻已重新合成(相同腳本,不同聲音/語速)→ 重新執行檢查點 2;如果時間沒有偏移,視覺效果可以保留;渲染前重新執行檢查點 3。
- 僅修改視覺效果 → 編輯並重新執行檢查點 3。
- 重複使用相同的
videos/{name}/目錄。