與旁白同步的 Motion Canvas 動畫
結果:animacao/ 資料夾內含位於 http://localhost:9000 的 Motion Canvas 專案,以及一個帶透明度的 ProRes 4444 4K .mov 檔案。已在影片「Windows Recall」上驗證(長度 8:43,67 個場景 + 12 個空白,90% 覆蓋率)。
姿態
從頭到尾執行,不做任何詢問;僅在最後通知(場景數量、文字百分比、需要檢查的圖片/照片、轉錄可能錯誤的名稱、如何在 CapCut 中匯入)。僅在使用者未要求渲染時才要求最終渲染。
技能自動發布(使用者規則,2026-10-14)— 務必 COMMIT + PUSH
此技能是一個 git 儲存庫(origin = github.com/Chimarrao/claude-skill-video-editor,分支 master)。對技能任何檔案(SKILL.md、腳本、模板、範例、參考資料、資產、資料庫)所做的每次修改,都必須在修改完成後立即自動提交並推送,無需確認:scripts/publicar.sh "簡短說明變更內容"(重新產生不含轉錄的 banco/assets.publico.db,執行 git add -A、commit 和 push)。請勿提交 banco/assets.db 或 20 分鐘的影片(已在 .gitignore 中)。如果推送失敗(網路/憑證問題),通知使用者並保留本機 commit。在最終摘要中提及技能已發布。
終端機風格選單(變體 V07 "Terminal ls",使用者於 2026-10-14 選擇)
plano_dados.py:MENU_ESTILO = "terminal",TITULO_MENU = "piores-sos"(變為 ~/piores-sos),MENU_DETALHES = ["1994 · 已取消", ...](每行右側欄位),MENU_EXTENSOES = False。元件 src/lib/menuTerminal.tsx(與瀏覽器相同的 API);視窗 880 像素,x=−500,標題過長(> 15 個字元)會縮小為字體 84;LOGOS_COM_PLACA = ["logo_microsoft"] 強制為灰色/深色線條標誌使用白色卡片。首次使用:「史上最爛的作業系統」(5 個系統,含 B-roll 的列表)。
- 來自模擬器/低解析度螢幕(640×480)的 B-roll 會以「覆蓋」裁切方式放大:可作為唯一素材;但優先使用 1080p+。作業系統影片中的遊戲片段(例如 Vista)— 在交付前,必須透過每個片段中間的螢幕截圖檢查所有片段。
從「史上最爛的作業系統」複審中學到的教訓(2026-10-15)— 技能會從每次編輯中學習
以下每一項都來自使用者的修正,並已成為程式碼或測試中的規則:
- 標誌製作不良(例如 Windows ME 帶有重疊的「Microsoft」— 來自 SVG 像素化的 artifacts):在使用前,務必在白色背景上檢查每個標誌;使用 PIL 清理/裁剪影像,並將良好版本儲存在
assets/和資料庫中。優先使用乾淨的官方標誌;切勿使用帶有重疊文字的標誌。 Secao(開場/結尾卡片)的標誌:所有標誌必須大小相同 — 3 個小方形(卡片 96 像素,圖片 64 像素);寬標誌(例如 Microsoft wordmark)會變形:改用方形圖示(logo_win11_icone)。plano.py在長寬比不是 ~1:1 時發出警告。- 語音中的列舉必須在動畫中完整顯示(「錯誤、不穩定、效能、市場排斥、歷史影響」= 5 個項目,不是 4 個)。在
transcricao.txt中閱讀所說的句子並計算項目數;標籤必須忠於實際用詞(使用所說的術語:「不穩定性」)。測試:scripts/testes/testar_rotulos_vs_fala.py(檢查每個標籤在 [t−4, t+12 秒] 範圍內是否與語音匹配;假陽性在改述時是正常的,請閱讀警告)。 - 項目卡片的間距/平衡:兩邊邊距相等,區塊之間留有間隙。終端機 840 像素,x=−450;標題 800 像素,x=+440(左右邊距相同,它們之間約 70 像素)。切勿讓任何一邊貼邊/留空;透過螢幕截圖檢查最長和最短的名稱。
- B-roll 中的人物:裁剪並跳轉到沒有人的片段(網路攝影機、主持人、觀眾)。測試
scripts/testes/testar_clipes_sem_pessoas.py(在代理檔案上使用 OpenCV 的 Haar 分類器;需要在 venv 中安裝opencv-python-headless<4.11)。要找到乾淨的片段,請對來源進行掃描(每 5 秒取樣一次,列出沒有臉部的連續片段,長度 ≥ 40 秒)。撲克牌/圖示可能會導致假陽性。 - YouTube 詞彙:避免在標籤中使用可能導致去 monetization 或具有攻擊性的詞彙(「死胎」、「死亡」、「自殺」……):改為中性詞(「滯銷」、「無設備」)。適用於卡片、選單詳細資訊、標題和事實。
- 渲染:模板
project.meta中的resolutionScale為 2(4K)— 對於 1080p,在渲染前將其調整為 1,並在前 90 秒使用 ffprobe 確認;計劃可能已改寫 meta。 - 務必在渲染前對每個片段的中間進行視覺掃描(遊戲畫面、相機拍攝顯示器、新聞報導);腳本無法取代肉眼。
標準回覆格式(使用者要求 — 在狀態更新中務必使用)
當使用者詢問「目前進度如何?/接下來呢?」或在任何長時間專案的更新中,請以此格式回覆(簡短,葡萄牙語,所有任務都附上大概時間):
- 標題:任務狀態(大概時間,包含機器當前負載)。
- 表格
| # | 任務 | 狀態 | 時間 |使用 ✅ 已完成(時間「完成」) · 🔄 進行中(實際進度,例如:「7:53 / 14:29(54%)」,以及剩餘時間) · 🟡 部分完成(缺少什麼) · ⏳ 等待中(依賴於什麼)以及每項任務的預計時間。包含直到最終交付的所有步驟(轉錄、對齊、計劃、在 9000 上驗證、使用者調整、渲染、CapCut、所用影片報告)。 - 當你看到某件事時: 下一次視覺驗證和完整交付的預測(加上使用者的時間)。
- 如果有任何事停滯/緩慢,說明實際原因(例如:機器負載)和選項(例如:切換到更快的模型),不要獨自決定。 在回覆前,真正衡量進度(最後的時間戳記、檔案百分比);從不未經檢查就重複估計。參考估計:large-v3 轉錄 ≈ 音訊長度的 2–4 倍(機器負載時更長);對齊 ≈ 5 分鐘;1080p 渲染 ≈ 影片長度的 1–2 倍;4K ≈ 5 倍;CapCut ≈ 3–5 分鐘。
第一步:詢問使用者 — 除非使用者已回覆或要求「不要問」
- 影片類型(定義風格、場景和模板;當新類型出現時,在此處新增):
- 無 B-roll 的列表(僅透明覆疊;例如:「所有程式語言」):項目依序編號。每次切換項目時,會出現選單(VS Code 的檔案總管,Monokai 主題),其重點欄會從前一個項目滑動到新項目,旁邊是大型卡片
#NN 名稱(+ 副標題 年份·作者)。然後顯示官方標誌、創作者(照片+姓名)、簡要事實、程式碼視窗、統計資料和標誌圖形(使用這些語言的公司/工具)。主題 Monokai;衝擊性標題採用終端機風格;HUDNN/TT 名稱顯示在右下角。範例:exemplo/plano_dados_linguagens_LISTA_sem_broll.py。 - 無 B-roll 的網誌(僅透明覆疊;例如:「Windows Recall」):在深色圓盤上的線條圖示圖形、標誌/照片、報導風格的衝擊性標題(
ESTILO_TITULO='reportagem'),語氣嚴肅。範例:exemplo/plano_dados_recall_WEBDOC_sem_broll_*.py。 - 無 B-roll 的論點列表(僅透明覆疊;「對比」;例如:「Windows 7 比 Windows 11 好」):包含少量項目作為論點/論證(4–6 個),而非物件。與無 B-roll 的列表使用相同引擎:瀏覽器選單(
TITULO_MENU="ARGUMENTOS",檔案hardware.md…),卡片#NN 主題+ 副標題論點 N · …,左側為「反派」/主題標誌,右側為事實、比較(A 與 B 的表格,勝出者為綠色,例如:需求)、畫面(帶說明的螢幕截圖/照片)、圖形(標誌/圖示的扇形圖)、使用日曆圖示的時間軸和衝擊性標題。無程式碼視窗。在論點區塊前/後:背景脈絡(Secao+ G 場景)和結論/CTA。覆蓋率 92–100%。範例:exemplo/plano_dados_windows7_ARGUMENTOS_sem_broll.py。 - 含 B-roll 的列表(例如:替代作業系統;使用者提供的支援影片):與無 B-roll 的列表相同的瀏覽器選單/卡片
#NN/HUD/Monokai,但影片和動畫交替出現(項目以影片開始;短動畫 ≤ ~30%,無程式碼,少量文字;參見「影片 ↔ 動畫交替」)。分析Assets/中的影片(位於音訊旁),僅將 B-roll 放置在項目內部,並交付一個新的 CapCut 專案(基礎音軌 = 連續填充;上方是帶有留空的剪輯;覆疊.movalpha;旁白)。參見「類型:含 B-roll 的列表」。B-roll:參見「網路影片」(自 2026-10-12 起已授權)。 - 含 B-roll 的網誌(敘事性,非列表;例如:電子投票機、帶支援影片/圖片的報導):根據腳本混合網誌動畫(圖形/樹狀圖、箭頭、標誌、人物照片、日期、
比較、畫面、標題 ≤5%)、B-roll 影片和圖片(使用者放在Assets/中),以及中間的短列表(「8 層…」;使用ListaCurta元件)。輸入:.wav+Assets/(只有這些檔案會變成 B-roll/背景圖片;標誌/圖示/人物照片繼續來自資料庫)。交付:覆疊 + 新的 CapCut 專案(填充 → 帶留空的 B-roll → 覆疊 → 旁白)。參見「類型:含 B-roll 的網誌」。 - (其他類型會出現;如果使用者要求新的類型,與他們一起定義模板並在此處記錄。)
- 無 B-roll 的列表(僅透明覆疊;例如:「所有程式語言」):項目依序編號。每次切換項目時,會出現選單(VS Code 的檔案總管,Monokai 主題),其重點欄會從前一個項目滑動到新項目,旁邊是大型卡片
- 覆蓋率百分比 附圖表/動畫(無 B-roll 的網誌預設 90%;無 B-roll 的列表通常 100%;大量螢幕 B-roll 的影片 = 40–60%;含 B-roll 的列表:覆疊覆蓋 100%,但在影片片段中較輕;含 B-roll 的網誌:動畫片段約 90%,影片本身在 B-roll 片段中算作已覆蓋)。記錄在
COBERTURA = (min, max)中。 如果請求已包含所有資訊,則不要詢問;在最終摘要中確認選擇。
類型:無 B-roll 的列表 — 模板(語言影片,Monokai;也是含 B-roll 的列表的基礎)
- Monokai 主題(
src/lib/monokai.ts:背景 #272822,粉紅 #f92672,綠 #a6e22e,藍 #66d9ef,橘 #fd971f,黃 #e6db74,紫 #ae81ff,註解 #75715e;等寬字型)。面板rgba(39,40,34,.95)帶 14% 白色邊框。 - 每個項目中的程式碼範例:VS Code 視窗(
janelaCodigo),包含標題列、活動列、檔案分頁、行號、狀態列和由highlight.js著色的 tokens → Monokai(scripts/tokenizar.mjs讀取codigos_fonte.json{id:{arquivo,linguagem,hl,cor,codigo}}並產生src/scenes/codigos.json;COBOL 有自己的 tokenizer)。簡短片段(4–10 行),具有代表性(例如:Rust move/borrow、TypeScript 類型錯誤、COBOLADD A TO B GIVING C)。 - 創作者:真实姓名 + 真实照片(圆形裁剪;群组 = 单张照片 + 多个姓名)。照片來源:Wikipedia REST API(
/api/rest_v1/page/summary/<title>→originalimage)+Special:FilePath/<file>?width=700,帶 User-Agent 和sleep ≥1s(速率限制 429);GitHub/Bluesky 頭像;官方頁面(例如:lua.org/images/team.jpg)。使用scripts/recorte_rosto.py(OpenCV Haar;安裝opencv-python-headless<4.11— 5.x 沒有 CascadeClassifier)進行自動臉部裁剪。在聯絡表中檢查所有照片(搜尋有時會傳回錯誤的人、標誌或植物)。沒有可靠照片 → 使用Pessoas([(None, nome, papel)])顯示剪影;通知使用者。 - 真實標誌:Simple Icons(
cdn.simpleicons.org/<slug>,名稱:cplusplus、dotnet、vuedotjs、nodedotjs…)— Java/C#/Microsoft/Windows/Blizzard 不存在:使用 Wikimedia(C_Sharp_Logo_2023.svg、Duke_(Java_mascot)_waving.svg、Microsoft_logo_(2012).svg)。標誌以白色卡片形式出現(logoCard/placa=True);沒有官方標誌 → 使用單色縮寫(ASM、COBOL、SQL)。 - 衝擊性標題(Monokai/終端機):Monokai 面板,帶粉紅色條,
// tag,全大寫等寬行,前綴>,逐字輸入 + 游標閃爍,關鍵字*rosa*/*v:verde*/*a:azul*/*l:laranja*/*y:amarelo*/*r:roxo*。在項目內部使用Titulo([...], dur, tag, em)(疊加在頂部並自行消失);在項目之間使用Tx(...)。最大TITULOS_MAX%(5)以及對頻道有意義的句子(令人難忘的名言:「沒有函數,只有段落」)。風格參考:程式碼編輯器的打字機效果 + 動態排版(每次少量詞語,強烈對比)。 - 時間軸(
Tempo)緊接在介紹之後(項目按時間順序,交替側,均勻間距)和章節(Secao)卡片用於轉場。 - 基於句子的錨點
F("所說的段落")而非秒數:在音訊剪輯後仍能存活。vigiar_audio.sh(在背景執行)檢測../pronto.wav何時變更(穩定 45 秒),複製,重新轉錄(MODELO=medium)並執行plano.py;然後檢查plano.log和編輯器。 - 轉錄:對於技術性葡萄牙語語音,使用
MODELO=medium(small 會弄錯名稱和術語)。僅在標籤中修正轉錄錯誤的名稱(Bacchus→Backus、「Dennis Rich」→Ritchie、「Liddorff」→Lerdorf),而不是在音訊中。
類型:含 B-roll 的列表(影片分析 + CapCut 專案)
輸入: 使用者指定旁白音訊(.wav);同一資料夾中存在 Assets/ 包含影片(有時有圖片)。僅使用這些檔案。
流程(「無 B-roll 的列表」所做的所有事情 — large-v3 轉錄 + 對齊、plano_dados.py、視覺驗證、資產 — 加上以下步驟;僅在使用者要求時才渲染 4K):
- 分析(在規劃之前):
python scripts/broll/analisar_broll.py— 掃描Assets/中的每個影片檔案(寬度、高度、fps、長度、無聲部分)。評估 B-roll 質量:解析度(首選 1080p+)、內容類型(螢幕錄影、網路攝影機、遊戲、幻燈片)、有無人臉。產生broll_report.json。 - 在腳本中放置 B-roll:在
plano_dados.py中,對於每個場景,決定 B-roll 持續時間(通常是場景長度的 30–60%,取決於類型)。僅在填充 B-roll 位置時使用影片片段(場景開始/結束或語音暫停時)。始終保留一部分場景僅使用動畫覆疊。 - 手動放置 B-roll(在生成
plano.py後):執行scripts/broll/posicionar_broll.py— 分析文字轉語音時間戳記和場景持續時間。為每個場景選擇最佳的 B-roll 片段(優先考慮無聲、高解析度、無人臉)。產生broll_placement.json檔案。 - 產生 CapCut 專案(在 Motion Canvas 渲染後):
scripts/capcut/gerar_projeto.py— 從模板建立新的 CapCut 專案:- 基礎音軌:音訊旁白(
.wav)連續播放。 - 影片軌道:B-roll 片段放置在有留空的位置(僅在指定時出現)。
- 覆疊軌道:從 Motion Canvas 渲染的
.mov檔案(alpha 透明)— 覆蓋整個時間線。 - 檔案輸出:
projeto_capcut/包含 CapCut 專案檔案(.draft)。
- 基礎音軌:音訊旁白(
- 交付:最終交付包含
animacao/(Motion Canvas)+projeto_capcut/(CapCut)+broll_report.json。
類型:含 B-roll 的網誌(敘事性影片 + CapCut 專案)
與含 B-roll 的列表類似,但腳本是敘事性的(非列表):
- 動畫:網誌風格(圖形/樹狀圖、箭頭、標誌、照片、
比較、畫面、時間軸、標題)。無列表特定元素(無瀏覽器選單、無#NN卡片)。 - B-roll:混合支援影片和圖片(來自
Assets/)。位置:用於說明具體概念,而非填充。 - CapCut 專案:與含 B-roll 的列表相同(連續旁白 + 帶留空的 B-roll + 覆疊
.mov)。
從 B-roll 分析中學到的教訓(2026-10-20)
- B-roll 的解析度很重要:始終偏好 1080p+ 影片用於 B-roll。如果只有 720p 可用,可以接受,但需通知使用者。
- 避免 B-roll 中的網路攝影機鏡頭:網路攝影機錄影(640×480,角落有小視窗)通常畫質低且使人分心。跳過或裁剪這些。
- 檢查 B-roll 中的品牌/標誌:如果 B-roll 顯示競爭對手的產品或不相關的品牌,裁剪或模糊它們。
- 保持 B-roll 簡短:每個 B-roll 片段最多 5–8 秒。更長的片段會讓觀眾感到無聊。必要時拆分。
- B-roll 中的人物:如果 B-roll 包含人物(主持人、觀眾),確保他們與內容相關且授權正確。否則,裁剪他們。
- 無聲檢測:使用分析中的無聲部分來放置 B-roll,避免與語音重疊。
測試與驗證
scripts/testes/testar_rotulos_vs_fala.py:檢查所有標籤是否與時間戳記 t−4 到 t+12 秒範圍內的語音匹配。報告假陽性(改述)。scripts/testes/testar_clipes_sem_pessoas.py:檢查 B-roll 剪輯中是否有人臉。使用 Haar 分類器,對代理檔案進行操作。需要opencv-python-headless<4.11。- 視覺驗證:在 http://localhost:9000 上檢查 Motion Canvas 專案。檢查所有場景、標籤、標誌、佈局。檢查 B-roll 放置。
- 渲染驗證:在前 90 秒使用 ffprobe 檢查解析度和編解碼器。
- 使用者的最終審查:在使用者進行最終審查後,如果需要,根據他們的回饋進行調整。
版本控制與發布
- 所有變更必須自動 commit 和 push,無需確認。
- 使用
scripts/publicar.sh "變更訊息"。 - 不要 commit
banco/assets.db(已在 .gitignore 中)或大的影片檔案。 - 如果推送失敗,通知使用者並保留本機 commit。
終端機風格選單(顯示)
選單顯示為帶有選項的終端機視窗,使用等寬字型。
TITULO_MENU:顯示為~/piores-sos風格的路徑。MENU_DETALHES:每行右側的詳細資訊(例如:「1994 · 已取消」)。MENU_EXTENSOES:如果為 false,則不顯示副檔名。LOGOS_COM_PLACA:這些標誌具有白色背景卡。
額外提示
- 對於
Secao場景中的所有標誌,保持大小一致(卡片 96 像素,圖片 64 像素)。 - 在動畫中反映語音中的確切文字。
- 保持佈局平衡(左右對稱,留白)。
- 在標籤中使用中性詞彙(避免敏感的 YouTube 詞彙)。
- 渲染前檢查解析度設定。
- 在渲染前務必對 B-roll 片段進行視覺掃描。