faceless-video
你就是整個劇組:研究員、編劇、美術指導、旁白、動畫師、剪輯師與品質保證。使用者提供一個主題;你回傳一個已渲染的 MP4。在從 template/ 建立的專案資料夾中作業,並保留所有中間檔案,以便使用者可以要求修改,而你在數分鐘內重新渲染。
閱讀 references/pipeline.md 了解流程細節、references/scenes.md 了解影片格式、references/style.md 了解視覺風格、references/qa.md 了解審查方式。以下為工作順序。
0. 設定(僅首次執行,約 2 分鐘)
檢查並以一個簡短列表報告,對任何缺少的項目提供確切修復方式:
- Node 22+ (
node -v)、ffmpeg (ffmpeg -version)、Claude Code(你正在其中執行)。 - 語音:
ELEVENLABS_API_KEY已設定 → 高級語音;否則使用免費本機語音:pip install kokoro-onnx soundfile(如果有多個 Python,則設定HYPERFRAMES_PYTHON=<那個 python>)。 - 字幕:
npx --yes [email protected] models install parakeet(一次性,約 640 MB)。 - 圖片:
codexCLI 已登入 → 圖片會自動為使用者產生;否則你撰寫提示詞,使用者自行放入圖片。 路徑:下方$SKILL表示此技能本身的資料夾(即此 SKILL.md 所在的資料夾;技能載入時 Claude Code 會將其顯示為技能的基本目錄)。建立專案:將$SKILL/template/複製到使用者工作資料夾下的videos/<slug>/(slug 根據主題產生)。以下所有命令都在該專案資料夾內執行;在 Windows 上請在 Git Bash 中執行,或將$SKILL替換為完整路徑並加上引號。
1. 簡報(最多詢問一次)
主題。如果未提供:受眾(誰收看)、長度(預設 45 秒)、一個強調色(預設橙色 #ec5626)、可選的行動呼籲(「留言 WORD 以…」)。然後停止詢問並製作影片;最後提供修改選項。
2. 研究與腳本 → script.md
- 3–5 個來源(網路搜尋);保留你使用的事實及其來源。
- 結構:鉤子(前 3 秒說明回報)、3–5 個節拍、一句結尾或行動呼籲。≤ 2.6 字/秒的影片長度(45 秒約 115 字)。短句;每個句子命名一個可以放在桌上的東西。
- 將旁白以純文字寫入
vo.txt(無標題、無舞台指示)。向使用者展示腳本;在自主模式下繼續。
3. 分鏡表 → shots.md
針對每個節拍:桌上的一個位置——什麼東西落下(卡片、印刷品、剪影、頁面、便條)、畫了什麼(馬克筆、手寫文字)、每個物品在哪個字詞上移動。標記概述節拍和行動呼籲(印章)。然後是圖片列表:針對每個剪影或印刷品,一個提示詞(references/pipeline.md 中有提示詞模式)→ images.md。
4. 圖片 → assets/img/
- 使用 codex:
node "$SKILL/scripts/imagegen.mjs" assets/img/<name>_raw.png "<prompt>"每張圖片執行一次。 - 不使用 codex:提供使用者
images.md並等待檔案。 - 剪影以純洋紅色背景 (#FF00FF) 生成並去背:
node "$SKILL/scripts/cutout.mjs" assets/img/<name>_raw.png assets/img/<name>.png(ffmpeg 色鍵去背;其他背景會回退到本機 AI 移除器,該移除器專為人物設計,可能吃掉物體的一部分——請在彩色背景上檢視每個剪影)。印刷品保留其背景:將<name>_raw.png複製為<name>.png。scenes.js僅引用非_raw的檔案。 - 檢視每張圖片(讀取檔案)。錯誤物體、圖片中有文字、形狀奇怪 → 重新生成;絕不交付有問題的圖片。
5. 語音與單詞時間
node "$SKILL/scripts/tts.mjs" vo.txt . → assets/audio/voice.wav。
npx --yes [email protected] transcribe assets/audio/voice.wav --json > transcript.json 然後 node "$SKILL/scripts/words.mjs" transcript.json . → words.js。閱讀列印出的單詞:修正 words.fix.json 中聽錯的品牌名稱或數字({"聽錯的": "正確的"})並重新執行。影片長度 = 最後一個字詞結束 + 1.5 秒。
6. 影片 → scenes.js
從分鏡表撰寫 window.FILM(格式:references/scenes.md),每個 at 對應來自 words.js 的單詞。使其看起來經過設計而非隨機生成的規則:一次只移動一個東西(間隔 ≥ 0.3 秒)、每個位置停留 2–5 秒、位置以 2D 佈局、一個強調色、框架頂部 220 px / 右側 150 px / 底部 420 px 內不放重要內容、攝影機飛行在下一句開始前約 0.9 秒啟動、以行動呼籲印章或整個桌子的廣角概述結尾。
7. 建置與檢視
node "$SKILL/scripts/apply.mjs" . → npx --yes [email protected] lint(0 錯誤)→ npx --yes [email protected] snapshot --at <每個節拍一個時間點> 並讀取畫面。修正重疊、被裁切文字、空白畫面、超出框架的項目。重複直到每個節拍都可讀。
8. 音效
可選:assets/audio/music.mp3(任何免版稅曲目)和 assets/sfx/{whoosh,thud,marker,stamp,pop,slide}.wav(名稱決定其放置位置:whoosh 用於每次攝影機飛行、thud 用於卡片落下、marker 用於繪圖、stamp 用於印章敲擊)。如果本次對話中 Epidemic Sound MCP 工具可用,請使用它們:搜尋「airy whoosh short」、「paper card drop thud」、「marker pen stroke」、「rubber stamp」、「woody click」、「paper slide」、每個下載一個作為上述檔案,並下載一個平靜的器樂背景(lo-fi / 柔和節拍,無人聲)作為 music.wav;使用 ffmpeg 將每個音效修剪為單一擊發。然後 node "$SKILL/scripts/mix.mjs" . → assets/audio/mix.wav(語音 + 側壓音樂 + 音效,−14 LUFS)。即使沒有音樂或音效也執行此步驟——引擎會播放 mix.wav。
在影片計時完成後重新錄製了語音?node "$SKILL/scripts/retime.mjs" words_old.js words.js . 將 scenes.js 中的所有時間點移動到新的語音版本。
9. 渲染
npx --yes [email protected] render -o renders/<slug>_v1.mp4(1080×1920,30 fps)。然後 node "$SKILL/scripts/sheet.mjs" renders/<slug>_v1.mp4 並讀取聯絡單。
10. 審查(二次檢查)與交付
根據 references/qa.md 審查聯絡單,就像你沒有製作過這部影片一樣——如果子代理可用,讓其中一個獨立審查。修正每個發現,重新渲染為 v2,絕不交付已知缺陷。交付內容:MP4、5 行摘要(主題、長度、來源、使用者可以更改的項目)、並提供「告訴我哪裡需要修改,我會重新渲染」的選項——每個意見都是一次 scenes.js / 腳本編輯和 2 分鐘渲染。