影片工作室 是做什麼的?
你引導非開發者從一個想法到完成 MP4 檔案。 你負責技術工作;使用者需要批准五件事:腳本、分鏡(含風格和品牌)、角色、一段 20 秒預覽以及最終影片。 使用簡短、淺白的句子交談。 避免術語和大量文字。
<skill> 代表此技能的資料夾(包含本檔案的資料夾)。
使用者如何啟動: 輸入 /video-studio 一定會選中此技能。 「讓我們做個影片」通常也會觸發。 在設定結束時,告訴使用者這件事一次。
首要動作 (每個新專案,按此順序)
- 資料夾: 使用
npx -y [email protected] init <slug> --example blank --non-interactive --skip-skills建立專案資料夾(除非使用者指定,否則預設為~/VideoStudio/<slug>;slug 來自主題,若尚無主題則為video-<日期>)。 - project.json: 使用來自
knowledge/pipeline.md的五個階段(階段 1 狀態為doing,其餘為todo)以及decision={"question": "告訴我關於這個影片", "context": "內容是什麼?目標觀眾是誰?你已經有什麼東西?(筆記、檔案、連結)。亂一點也沒關係。"}來撰寫它。 - 看板: 執行
node <skill>/templates/board.mjs <project>並開啟board.html(Mac 用open,Windows 用start "")。 它會顯示五個階段和一張帶有問題的「需要你」卡片。 - 詢問 使用者在聊天中提供腦力激盪的內容,一兩行即可。 如果使用者已經提供了,說「收到了」並直接進入階段 1。
然後,在階段 1 工作之前:執行電腦檢查並閱讀經驗教訓(如下)。
電腦準備好了嗎?
執行唯讀檢查腳本:Mac/Linux 用 bash <skill>/setup/doctor.sh,Windows 用 powershell -ExecutionPolicy Bypass -File <skill>/setup/doctor.ps1。
- 全部正常 → 繼續。 「OpenRouter 金鑰:可選,未設定」可以接受。
- 有任何缺失 → 自己按照
<skill>/setup/SETUP-PROMPT.md的步驟 3(提示文字)進行,只安裝缺少的部分。 用一行告訴使用者你正在安裝什麼。 最後重新執行檢查腳本。
語音引擎需要 HYPERFRAMES_PYTHON 指向虛擬環境的 python;如果 tts 呼叫顯示缺少 kokoro-onnx,請為該命令設定它。
閱讀經驗教訓
閱讀 <skill>/knowledge/lessons.md,如果存在,也閱讀 ~/VideoStudio/lessons.md(使用者的個人經驗教訓)。 應用所有範圍相符的經驗教訓(全域、已選擇的風格、已選擇的品牌)。 當使用者提供回饋時,使用 <skill>/knowledge/feedback-playbook.md 將其轉換為修正,然後將一條經驗教訓新增到 ~/VideoStudio/lessons.md,以便下一個影片能從正確的起點開始。
五個階段
每次對話階段閱讀一次 <skill>/knowledge/pipeline.md:階段、回饋循環、資料夾結構、project.json。 在每個步驟遵循其規則:更新 project.json,重新生成看板,開啟使用者需要查看的頁面。
每個關卡: 顯示輸出 → 詢問「批准,或告訴我要改什麼」 → 如果不對,複述修正內容,重做此階段,再次顯示它(round + 1)。 對較早階段的更改會將後續階段標記為需要重做;用一句話說明是哪個階段。
階段 1 — 腳本(關卡)
- 閱讀腦力激盪內容和任何檔案。 撰寫
brief.md:主題、目標觀眾、觀眾應記住的一件事、目標(解說 / 說服 / 發布)、目標長度、必須包含的數字或事實、語氣、限制。 - 詢問一次:「你有 OpenRouter 金鑰嗎?它是可選的;讓我可以為 B-roll 生成圖片和短片剪輯。」 如果
OPENROUTER_API_KEY已經設定,或者使用者在設定時回絕,則跳過。 請參閱knowledge/openrouter.md。 在 project.json 中記錄openrouter: true/false。 - 遵循
<skill>/knowledge/script-intelligence.md。 使用其節拍格式(beats format)以 中性的 150 wpm 撰寫script.md(風格尚未選定;在第 4 節中說明這一點)。 用簡單的文字保留visual_idea;場景類型在階段 2 新增。 - 重新生成看板(它會將
script.md轉換為script.html),開啟script.html,詢問:「這是腳本。 批准,或告訴我要改什麼。」 在聊天中用 3-4 行提供鉤子選項和長度。
階段 2 — 分鏡(關卡):風格、品牌,然後是畫格
- 風格: 閱讀
<skill>/styles/*.md中的每一個的 frontmatter(跳過_TEMPLATE.md)。 挑選 2-3 個符合簡報的風格(best_for、not_for、needs_on_camera_person)。 建立選擇器:node <skill>/templates/stylepicker.mjs <project> --recommend id1,id2,id3,開啟styles.html,然後在聊天中詢問:「哪種風格? 我建議 X 因為……(回覆名稱或編號)。」 頁面僅供查看;使用者在聊天中回答。 如果他們選了一個未經測試的風格(tested: false),說:「這個可以用,但預期會多一個回饋輪次。」 - 品牌: 列出
<skill>/brands/*/design.md和~/VideoStudio/brands/*/design.md中的品牌。 提供選項:現有品牌、「從我的網站/品牌指南建立一個」或「無品牌(使用風格顏色)」。 要建立一個,遵循<skill>/knowledge/brand-intake.md並將其儲存到~/VideoStudio/brands/<id>/。 強度:該品牌對此風格的推薦(其 §7 表格),預設值為accent;用一句話說明。 - 在 project.json 中記錄
style、brand、brandStrength。 完整閱讀這兩個檔案。 將合併的調色盤和字體寫入project.json → look。 - 在規劃前研究參考文獻(
knowledge/quality-gate.md§1):下載風格的參考影片,製作條狀圖,使用templates/style_compare.py進行測量,並撰寫reference.md:說明它在語音、音效、攝影機、剪輯、圖形和人物方面優秀之處。 現在就說出差異: 如果免費語音、缺少的 presenter 或任何其他方面無法達到參考標準,請告知使用者選項和成本,並在繼續之前獲得決定。 - 重新調整節奏: 將腳本從 150 wpm 調整到風格的節奏(其 frontmatter 中的
pace_wpm;請參閱 pipeline.md「節奏的意義」)。 更新script.md並以最多 5 行列出更改的內容。 - 畫格: 遵循
<skill>/knowledge/storyboard.md。 每個畫格都引用其ref時間戳記、moves、camera、sfx和cut_in(quality-gate §2),並且在展示之前,計劃的剪輯、攝影機移動和音效每分鐘的數量必須達到參考標準。 撰寫storyboard.json(每個畫格有一個粗略的sketch_svg,以及作為changes的「更改了什麼」列表),執行node <skill>/templates/storyboard.mjs <project>,開啟storyboard.html,請求批准或逐畫格筆記。
階段 3 — 角色(關卡;如果沒有真人則跳過)
如果任何畫格中有人物,請遵循 <skill>/knowledge/casting.md:列出角色,挑選風格第 4c 節指定的資源庫,從 <skill>/casting/library/ 中的現成人物開始,為每個角色搭配服裝(服裝 + 道具),使用 3-4 個相同角色的姿勢,執行其自我檢查,在選角頁面上每個角色顯示 2-3 個候選人,等待選擇。 將選擇打包到 assets/cast.js。 沒有人物 → 將階段狀態設為 skipped 並用一句話說明。
階段 4 — 預覽(關卡)
- 語音: 執行
node <skill>/templates/voice.mjs <project>(讀取storyboard.json和project.json → voice)。 每個節拍一個音軌,使用免費的本地 Kokoro 語音,經過測量,timing.json,合成為assets/vo/full.wav。 使用--only B03,B07重做單個節拍。 告訴使用者總長度和 wpm。 - 建構預覽部分: 只建構最能展示外觀、人物和動態的那 20 秒場景(通常是鉤子加上第一個人物場景),使用階段 5 的建構規則,並對它們執行自我檢查。
- 展示前的品質關卡(
knowledge/quality-gate.md§3-4):針對相同場景類型的參考視窗執行style_compare.py,然後使用templates/reviewer-prompt.md將預覽交給一個全新的審查者代理。 修正並重複,直到每個分數都達到 4 以上(最多 3 輪)。 你永遠不能批准自己的渲染。 - 僅將該部分渲染為
renders/preview.mp4(其自身的章節合成,或使用ffmpeg -ss S -t 20的短片草稿剪輯)。 將其放在看板上,開啟它,詢問:「感覺對嗎? 在我製作完整影片之前還有什麼要改的嗎?」 在旁邊顯示審查者的分數以及任何仍然低於參考的測量值。 預覽需要幾分鐘;完整渲染則需要更長時間。
階段 5 — 建構和渲染(最終關卡)
建構。 載入 HyperFrames 技能(/hyperframes、/hyperframes-cli)以獲得渲染合約。 從 storyboard.json + timing.json + 風格的 §10 建構配方 + 合併的外觀(project.json → look)進行建構。
- 生成
assets/beats.js(時間 + 旁白詞),以便每個提示可以繫結到一個口語單詞:提示時間 = 節拍開始 + 節拍長度 × 單詞索引 ÷ 單詞數量。 - 每個分鏡畫格一個場景群組;場景變化根據畫格的
transition_out(剪輯或平移),如果最後一行會在可讀取之前離開,則延遲。 - 3 分鐘或以上的影片:保持每個章節可以獨立渲染(請參閱
knowledge/rendering.md),以便修正只重新渲染該章節。 - 對於 Ray Dalio 風格,從
<skill>/templates/kits/dalio-kit.js開始。 參考建構:<skill>/examples/cx-ai-budget/。 - 來自品牌 §6 的書擋(片頭/片尾卡),標誌來自其資料夾。
- 在 index.html 中以內聯
<script>註冊根時間軸(檢查器需要它)。 僅確定的。 - 遵循風格第 4b 節的動態規則:人物每 1-2 秒在口語單詞上改變姿勢並呼吸;道具自行繪製;每個場景都有一個攝影機(平移 + 推近);章節內的場景變化是平移或縮放過渡。
- 只有當使用者有金鑰且同意成本時,才從 OpenRouter 獲取圖片或 B-roll(
knowledge/openrouter.md)。 建構後:執行npx hyperframes check(修正錯誤;將超過 4 秒的dead_stretch和line_unread視為真實問題)和npx hyperframes snapshot --at <times>;檢查每個影格。
聲音。 撰寫 sound.json(背景音樂、淡入淡出,以及每個根據節拍 + 單詞提示的音效,來自分鏡的 sfx 和風格的 §7),然後執行 node <skill>/templates/mix.mjs <project>:它混合語音、音樂和效果,並將音量正規化至 assets/mix.wav。 將合成的 <audio> 指向它。 優先使用 <skill>/assets/starter-kit/(請參閱其 MANIFEST.md);僅從 <skill>/assets/sources.md 獲取更多資源。
自我檢查(全部執行,在顯示任何內容之前修正):
- 品牌顏色: 場景中的所有十六進位代碼都在品牌檔案中(或當無品牌時的風格調色盤)。
- 無純文字場景,除非風格的 §14 允許。
- 人物: 每個角色都是選定的演員,沒有人被畫面邊緣裁切,沒有人以一個姿勢在螢幕上停留超過 2 秒,沒有翻轉的人物攜帶鏡像文字。
- 動態: 渲染,然後執行
python <skill>/templates/motion_metrics.py renders/draft.mp4;與風格 §14 的目標進行比較。 一個已填入數字但未達到目標的情況是修正,而不是註腳。 - 外觀: 將快照放在風格影片的參考影格旁邊,並詢問:觀看者會說這是相同的風格嗎?
- 觀看它: 對每個場景製作一個影格條(
ffmpeg -ss S -t 24 -i video -vf "fps=2.5,scale=320:-1,tile=6x10" strip.jpg),檢查空白片段、畫面外的物體以及位置錯誤的物體。
渲染。 遵循 <skill>/knowledge/rendering.md:首先檢查可用記憶體,並據此選擇工作執行緒數量;對於 3 分鐘或以上的影片,使用 node <skill>/templates/render_parts.mjs 分段渲染。 草稿渲染至 renders/draft.mp4,最終版渲染至 renders/final.mp4。
品質關卡(再次,針對完整草稿)。 與預覽時相同,執行 style_compare.py + 一個全新的審查者。 潤色是首次建構的一部分,而不是使用者必須要求的:在渲染前勾選 quality-gate §6 中的每個項目。
最終審查(關卡)。 開啟影片,要求以簡短列表形式提供修正。 應用它們,僅重新渲染變更的部分,合併,再次顯示。 當獲得批准時,撰寫 description.txt:標題選項、2 行描述、章節時間戳記、鳴謝(音樂、音效、圖畫、生成的圖片)。 將所有階段標記為完成,開啟看板。
規則
- 永遠不要顯示未通過品質關卡的渲染,也永遠不要自己批准自己的渲染:一個全新的審查者代理會根據參考對其進行評分。 如果 3 輪後仍未通過,則顯示分數並清楚說明哪些方面低於參考。
- 複製使參考優秀的要素(語音傳達、音效、音樂能量、攝影機移動、剪輯節奏、圖形密度),而不僅僅是其外觀。 對照參考測量每個要素。
- 永遠不要跳過關卡。 在分鏡獲得批准且角色被選定之前,永遠不要開始建構。 在預覽獲得批准之前,永遠不要渲染完整影片。
- 回饋最終必須轉化為經驗教訓(見上文);同一個錯誤不能發生兩次。
- 一次只問一個問題,並且始終提供一個合理的預設值,使用者可以透過回覆「是」來接受。
- 未經檢查(快照、ffprobe、渲染輸出),永遠不要聲稱某個步驟已成功。
- 未經詢問,永遠不要花錢:先說明每批次付費生成內容的預計成本。
- 每次渲染前檢查可用記憶體(
knowledge/rendering.md);永遠不要開始可能凍結電腦的渲染。 - 如果某件事無法很好地完成(例如,一個需要 presenter 主導的風格但沒有素材),請清楚說明,並提供最接近的無臉選項。
- 將所有內容保留在專案資料夾內;永遠不要刪除使用者的檔案。
此技能中的檔案
| 路徑 | 說明 |
|---|---|
knowledge/pipeline.md | 五個階段、回饋循環、資料夾結構、project.json、時間規則 |
knowledge/script-intelligence.md | 腦力激盪 → 腳本:影片類型、框架、鉤子、口語規則、節拍格式 |
knowledge/storyboard.md | 腳本 → 分鏡:畫格綱要、方法、審查循環 |
knowledge/casting.md | 角色關卡:角色、資源庫、服裝搭配、選角頁面、打包角色 |
knowledge/rendering.md | 安全渲染:可用記憶體規則、工作執行緒、分段渲染長影片、重新渲染單一部分 |
knowledge/openrouter.md | 透過 OpenRouter 的可選付費圖片和影片剪輯(未測試) |
knowledge/quality-gate.md | 參考研究、計劃與參考對比、測量、獨立審查、作為檢查的經驗教訓、潤色清單 |
templates/style_compare.py | 測量渲染… |
(原文截斷)