Communitygithub.com

EMzhe/explainer-video-series

系列講解影片全流程製作(策劃→HTML動畫頁/文案→講解稿→配音→字幕→1080p成品→抖音封面橫豎雙尺寸),內建四道使用者確認關卡與發音修正能力。

explainer-video-series 是什麼?

這是一個專業的 AI 技能(skill),專為建構高品質、系列化的講解影片而設計,特別適合製作像《道德經》解讀這類的知識內容。它將整個影片製作流程自動化——從最初的內容策劃、講解稿撰寫,到 HTML 動畫頁面生成、語音合成、字幕疊加,最終輸出 1080p MP4 影片與抖音專用的橫豎雙尺寸封面。此技能的核心優勢在於其結構化的流程與多重品質把關:內建四道「門禁」(開工五問、講稿審閱、音色試聽、合成確認)確保每一步都經過使用者確認,減少返工;同時支援發音修正(例如「老子」強制讀為 lǎo zǐ),讓術語發音更精準。技能支援兩條視覺路線:預設的「HTML 動畫路線」能產生帶入場動畫與轉場效果的示範頁,提供確定性的逐幀渲染,動畫與旁白完美同步;備用的「靜態 PPT 路線」則適用於需要原生表格或複雜版面的場合。它相容於 Claude Code、Cursor 或 Codex 等支援自訂技能的工具,特別適合知識型自媒體創作者、教育機構或任何需要將書面內容轉化為生動影片的團隊。工作流程以一個統一的 JSON 講解稿為核心,並搭配一系列 Python 指令碼依序執行,從環境檢查、文字匯出、語音試聽,到最終的影片合成與驗證,整個過程高度自動化且可重複。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/EMzhe/explainer-video-series/tree/HEAD

在你喜歡的 AI 中提問

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

說明文件

系列講解影片全流程製作

把「一個主題」變成「一期成品」:策劃 → 頁面編排(HTML 動畫) → 講解稿 → 配音 → 字幕 → 1080p MP4 → 抖音封面(橫 16:9 + 豎 9:16)。 預設風格檔案沉澱自《道德經》講解影片系列實戰(新中式水墨 / 雲健男聲 / 白字黑發光字幕),整套可複用,逐項可覆蓋。

畫面路線(v2.0 起預設走 HTML 動畫;v2.1 圖文協同):

  • 預設:HTML 動畫頁——基於講解詞產生帶入場動效與頁間交叉淡化的 HTML 展示頁,確定性逐幀渲染成影片,動畫 100% 同步進成品(方案與編排規則見 references/html-animation.md)。
  • v2.1 圖文協同:內建水墨 SVG 場景庫(水波孤舟/漣漪/山巒/墨竹/望月/錦鯉)+ 條目圖示 + 外鏈圖片支援,按講解詞自動配對或明確指定,圖形部件錯峰入場與文字動效統一編排。
  • 回退:靜態 PPT 幀 + xfade(需要原生 PPT 表格/複雜版式、或用戶點名要 .pptx 時用)。

v2.3 起每期標配抖音封面:橫版 16:9 + 豎版 9:16,按主題 AI 生成成套(橫版錨點→使用者確認→豎版派生),不取影片幀;流程見階段 ⑥ 與 references/douyin-covers.md。

開工五問(每期開工先問;使用者說「按上期來」「老規矩」則全部取預設直接開工)

  1. 這期講什麼?(主題 / 經文章節)
  2. 內容深度:詳細講解 / 要點講解?(預設:詳細講解)
  3. 成品時長目標?(預設 6-7 分鐘)
  4. PPT 風格沿用新中式水墨?(預設:是)
  5. 音色沿用雲健、字幕白字黑發光?(預設:是)

風格檔案(使用者未指定時直接採用)

項預設值
PPT 風格新中式水墨:宣紙米白 + 墨黑 + 黛青 + 朱砂
字體標題 SimSun(宋體),正文 Microsoft YaHei(SlideDSL 一律用英文 font-family)
畫面元素SVG 水墨插畫(不用 AI 生圖,保真度 100%、可反覆改)
動畫HTML 動畫頁:標題 blur-in / 條目錯峰 fade-up / 頁間交叉淡化 / cue 要點強調(原「元素動畫被否」針對 ffmpeg 疊加方案,HTML 確定性渲染路線已於 v2.0 落地驗證)
音色zh-CN-YunjianNeural(雲健 · 男 · 渾厚)
語速+0%(整篇統一;僅當使用者明確要求才改,不得按內容密度分段變速)
字幕白字 + 黑色外發光(blur 0.8),透明背景,底部居中
畫幅1920×1080(16:9)
發音修正「老子」→ TTS 讀「老紫」(lǎo zǐ 文讀三聲),字幕仍顯示「老子」
抖音封面橫版 16:9 + 豎版 9:16;期名四字大字;AI 生成成套(錨點鏈),不取影片幀

工作目錄約定

在工作區建 影片工作目錄/,每期一個子目錄(以主題命名):

影片工作目錄/{期名}/
├── {BASE} 講解稿.json          # 單一資料來源:標題/音色/發音修正/每頁講解詞(+頁面文案)
├── {BASE} 講解稿_可編輯.txt    # export_txt.py 匯出,供使用者記事本審閱
├── 01_deck/                    # deck.html(動畫展示頁,可預覽) + deck.json(時間軸清單)
├── 01_html_frames/             # f_XXXXX.png 逐幀 + frames_manifest.json(HTML 路線)
├── 01_frames/                  # frame_01.png ...(靜態 PPT 回退路線)
├── 02_audio/                   # slide_01.mp3 ... slide_NN.mp3(逐頁語音)
├── 配音試聽/                   # 多音色試聽 mp3 + 配音試聽.html
└── 03_output/                  # 成品 {BASE}(帶字幕).mp4

BASE = 期名(若含「講解稿」字樣自動剝除)。講解稿 JSON 用 Python json.dump 程式化生成,禁止手寫含中文引號的 JSON(會跳脫報錯)。 封面畫布 {期名}-抖音封面.miora 按生成媒體交付規範放工作區根,雙尺寸 PNG 在其 _assets/ 目錄。

分階段流程(含 4 道確認關卡,每道關卡拿到使用者答覆再繼續)

開工前(首次或環境異常時)先跑環境體檢:python scripts/doctor.py,MISSING 補齊再開工。 節奏底線、閘門清單、BGM 與改版範圍表見 references/pacing-and-gates.md (融合自 liyupi/ai-promo-video-maker 的方法論:節奏硬標準 / 資料校驗 / 雙閘門 / 改版紀律)。

階段 ① 內容策劃(關卡 1:開工五問)

按五問確定方案後,產出簡短策劃包(文案結構 / 視覺方案 / 音訊方案),使用者認可後進 ②。

階段 ② 頁面編排(HTML 動畫路線 = 預設)

  • 不再做 PPT:直接程式化生成 {BASE} 講解稿.json,逐頁寫講解詞 text; 每頁可選 title(頁面標題)、points(螢幕條目陣列)、layout(title/bullets/quote/end)、 cues(要點強調,見下)——缺省時由講解詞自動推導(規則見 references/html-animation.md), 但正式製作建議明確給出,品質更穩。
  • 頁數按內容深度定(詳細講解約 8 頁);表格/資料仍建議走靜態 PPT 回退路線。

階段 ②′ PPT 製作(靜態回退路線)

  • 用 workbuddy-pptx(SlideDSL)製作幻燈片,頁數按內容深度定(詳細講解約 8 頁)。
  • 演講者備註(notes)= 逐頁講解詞:一次寫入,多處複用(影片配音 / DOCX 時間軸 / 剪映導入)。
  • 字體用英文名(SimSun / Microsoft YaHei),中文名不渲染。
  • 配色與元素按風格檔案;表格/資料頁優先原生 PPT 元素。

階段 ③ 講解稿定稿(關卡 2:講解稿審閱)

  1. 從 PPT notes 提取講解詞,程式化生成 {BASE} 講解稿.json(結構見下)。

  2. 匯出可編輯文字供審閱:

    python scripts/export_txt.py "{BASE} 講解稿.json"
    
  3. 明確提示使用者用記事本開啟 txt 逐頁審閱;使用者改完返回後同步回 JSON:

    python scripts/import_txt.py "{BASE} 講解稿.json" "{BASE} 講解稿_可編輯.txt"
    

    使用者僅回覆「文案可以」無修改時跳過同步。

階段 ④ 配音(關卡 3:音色試聽,硬關卡 voice_confirmed)

  1. 生成試聽頁讓使用者選音色:

    python scripts/preview_voices.py 配音試聽
    
  2. 使用者選定後寫入 JSON 並置 voice_confirmed=true(缺它 TTS 與合成直接拒絕執行):

    python -c "import json;p='{BASE} 講解稿.json';d=json.load(open(p,encoding='utf-8'));d['voice']='zh-CN-YunjianNeural';d['rate']='+0%';d['voice_confirmed']=True;json.dump(d,open(p,'w',encoding='utf-8'),ensure_ascii=False,indent=2)"
    

    語速預設 +0% 不動;僅當使用者明確要求變速才改,且整篇統一。

階段 ⑤ 成品合成(關卡 4:合成前向使用者確認開工)

順序:合成語音 → 生成動畫頁 → 渲染幀 → 合成影片(HTML 路線);或 渲染幀 → 語音 → 影片(靜態路線)。

HTML 動畫路線(預設):

  1. 合成逐頁語音(必須先做——頁面時長取自真實語音時長):

    python scripts/tts_synth.py --narration "{BASE} 講解稿.json" --out 02_audio
    
  2. 生成動畫展示頁(deck.html 可用瀏覽器 #preview 預覽動畫):

    python scripts/gen_html_deck.py --narration "{BASE} 講解稿.json" --audio 02_audio --out 01_deck
    
  3. 逐幀渲染(只渲染動畫視窗,幾分鐘內完成):

    node scripts/render_html_frames.mjs --deck 01_deck --out 01_html_frames
    
  4. 合成影片(concat 幀序列 + 逐句字幕,白字黑發光預設樣式):

    python scripts/compose_html_video.py --deck 01_deck --frames 01_html_frames --audio 02_audio --narration "{BASE} 講解稿.json" --out 03_output
    

    預設產出 {BASE}(帶字幕).mp4;--also-plain 加出無字幕版; --bgm <檔案> 加背景音樂(自動 ducking,旁白起時壓低音樂;曲庫 Mixkit 免費可商用,須使用者試聽後定)。

靜態 PPT 回退路線:

  1. 渲染畫面幀(首選 PowerPoint COM,需本機裝 PowerPoint):

    powershell -ExecutionPolicy Bypass -File scripts/export_frames.ps1 -Pptx "{BASE}.pptx" -OutDir 01_frames
    

    已有 PDF 時可用 pymupdf 路徑:python scripts/pdf_to_frames.py "{BASE}.pdf" 01_frames 1920。 渲染後抽查 3 頁(首頁/內容密的一頁/表格頁)確認無字體異常。

  2. 合成逐頁語音:同上 tts_synth.py。

  3. 合成影片(靜態頁 + xfade + 逐句字幕):

    python scripts/compose_video.py --frames 01_frames --audio 02_audio --narration "{BASE} 講解稿.json" --out 03_output
    
  4. 驗證交付:入場/轉場點抽幀確認動畫正常、無黑閃;頁中段抽幀確認字幕; 跑成品閘門:python scripts/verify_output.py --video "03_output/{BASE}(帶字幕).mp4" --deck 01_deck (規格/時長/響度/黑幀/靜音全過才交付);present_files 交付。

階段 ⑥ 抖音封面(每期標配:橫版 16:9 + 豎版 9:16)

成品交付時一併給封面,方便直接上傳抖音。不取影片幀——按本期主題 AI 生成成套,交付 .miora 畫布 + 雙尺寸 PNG; 提示詞模板 / 意象對照 / 品檢清單見 references/douyin-covers.md。使用者明說不要封面時跳過。

  1. 文案:期名四字做圖上唯一大字(如「有無相生」);不加副題小字(必糊);除主文案外畫面零文字。
  2. 成套錨點鏈(硬規則):橫版錨點(純文生圖 1920×1080)→ 使用者確認 → 豎版以錨點為參考圖派生(1080×1920,豎向三段式);風格 token 原文複用,禁止兩張盲發。
  3. 視覺:與成品同風格(宣紙米白 + 墨黑 + 黛青 + 朱砂、水墨暈染、疏朗留白);意象從本期主題取(如「有無相生」→ 圓月 + 水中月影倒影)。
  4. 尺寸照實:模型取整可能給 1920×1072 / 1072×1920(差 8px),如實報告;使用者要精確再補邊到標準值。
  5. 交付:工作區根 {期名}-抖音封面.miora + 雙尺寸圖卡片;封面文案與尺寸記入 需求確認.md。

(需要文字 100% 可控或跨期複用模板時,改走可編輯設計稿排版匯出;預設 AI 生成。)

階段 ⑦ 微調迭代

  • 每期目錄維護 需求確認.md:五問答案 + 每輪修改記錄(使用者原話入檔),收到反饋先記後改、 只重做必要步驟(改動範圍→重做步驟對照表見 references/pacing-and-gates.md)。
  • 字幕樣式/顏色調整 → 見 references/subtitle-style.md(ASS 顏色是 BBGGRR 反序,必讀)。
  • 發音問題 → 只改 tts_replacements 重跑 TTS + 合成,字幕不動。
  • 字幕同步 → compose 優先讀 02_audio/timing_XX.json(TTS 句級真實時間軸,tts_synth 自動產出)。
  • 畫面/動畫問題(HTML 路線)→ 改講解稿 JSON 的 title/points/visual/cues 或 gen_html_deck.py 編排 → 重跑 生成 deck → 渲染 → 合成(音訊複用,除非講解詞也改了)。
  • 畫面問題(靜態路線)→ 改 PPT 重導幀,音訊複用。
  • 封面修改 → 文案/意象不對只重出對應件;風格整體不對重出錨點再派生(見 references/douyin-covers.md)。

階段 ⑧ 交付驗收(自檢清單)

  • 畫面:字體/配色無異常;表格頁(若有)渲染正確
  • 動畫:標題/條目入場自然、頁間轉場平滑、cue 強調與講解對位(HTML 路線)
  • 配音:可聽清、無吞字、語速全篇統一
  • 發音:文讀詞正確(如「老子」= lǎo zǐ)
  • 字幕:與語音逐句同步、樣式統一、無溢出裁切
  • 轉場:交叉淡化平滑、無黑閃、無空白幀
  • 時長:≈ 目標時長(±10 秒)
  • 格式:1920×1080 / H.264 / AAC / .mp4
  • 封面:橫豎兩版四字無缺筆、風格成套、尺寸照實(清單見 references/douyin-covers.md)

講解稿 JSON 結構(單一資料來源)

{
  "title": "老子今讀-上善若水",
  "voice": "zh-CN-YunjianNeural",
  "rate": "+0%",
  "voice_confirmed": true,
  "tts_replacements": { "老子": "老紫" },
  "slides": [
    { "idx": 1, "text": "第一頁講解詞……" },
    { "idx": 2, "text": "第二頁講解詞……",
      "title": "水的三種品格", "points": ["利他,滋養萬物", "不爭,甘居下位"],
      "cues": [ { "t": 4.5, "dur": 0.9, "target": 0 } ] }
  ]
}
  • idx 從 1 連續編號,與 frame_XX.png(靜態路線)/ slide_XX.mp3 嚴格對應。
  • HTML 動畫路線每頁可選欄位:title(頁面標題)、points(螢幕條目陣列)、 layout(title/bullets/quote/end)、cues(要點強調:t=頁內相對秒、target=條目序號 0 起、 dur=強調時長、action=pulse);圖文協同(v2.1):visual(水墨場景 water/ripples/mountain/ bamboo/moon/fish,缺省按講解詞關鍵字自動配對)、icons(條目圖示 droplet/wave/mountain/moon/leaf)、 image(外鏈圖片路徑,內嵌右欄)。缺省時由講解詞自動推導,正式製作建議明確給出。
  • tts_replacements:發音修正表,只作用於 TTS 輸入,字幕與可編輯文字保持原字。通用系列留空 {}。
  • voice_confirmed 預設 false,關卡 ③ 置 true,否則腳本拒絕合成。

常見失敗速查

症狀原因處理
字幕外框顏色和預期不符ASS 顏色是 BBGGRR 反序紅=&H000000FF 藍=&H00FF0000 黑=&H00000000
文讀詞被讀成白話音(如老子 lǎo zi)TTS 預設取口語讀法加進 tts_replacements 重跑 TTS
PPT 字體不渲染中文名無法辨識用 SimSun / Microsoft YaHei
一步合成白屏/濾鏡鏈崩xfade 後疊 overlay 覆蓋拆兩步:先底板再疊加;逗號跳脫 \,
幀

相關技能