explainer-editor:在說話者上方舞台上展開的解說
使用者在一段他們自己對著鏡頭說話的直式影片。這個技能將他們放在一個暗色舞台底部的框架中,他們的頭部從框架中浮出,並在他們說話的同時,在他們上方繪製他們所解釋的內容,具有 After Effects 編輯的動態和光線:場景之間由攝影機移動連接,元素飛行、上升並帶有動態模糊地彈入,每個元素都有自己的陰影和光暈,舞台上每大約一秒就有一個新事物,每個動作都有音效。他們的文字一次一個地,在舞台和他們之間流動。每分鐘幾次,一個相機閃光會切到他們的全螢幕畫面。
短片的呈現方式是固定的:§ 解說語言(請見下方流程)。它是根據使用者為客戶編輯的一段短片(108 秒,文字鉤子指南)逐幀測量,然後在第一版編輯時審核(2026-10-05:“一點都不像 After Effects,不是動態設計,螢幕上東西太少,很無聊,缺少嗖嗖聲”),接著在第二版時再次審核(“好多了;但元素周圍的小陰影和光暈還是不夠,全黑的背景沒有襯托出它們;這裡有一個包含很多非常輕的聲音的素材包”):這兩次評語的每一行現在都是一條規則。每次處理新的影片都從它開始(init.sh 會建立骨架);不要重新打開它。
這個技能運行在 short-editor 技能引擎上。 它的渲染、混音、人像遮罩、預覽、建置和驗證都是該引擎的檔案,如同在 ../short-editor/SKILL.md § 先決條件、§ 檔案位置以及 § 4 到 § 6 中所寫的那樣;這個檔案說明了差異之處。此技能自己的部分包括:版型(layout.mjs:說話者的框架和全螢幕的呼吸畫面,由引擎的 build.sh 和 preview.mjs 取代它們的縮放來執行)、舞台(stage.mjs:攝影機、場景、動態模糊、元素、字幕、動態的音效)、背景音樂(bed.mjs)、靜態圖片(stills.mjs)和測量(measure.mjs)。在第一次剪輯前和每次執行時,都請閱讀:
../../references/pitfalls.md§ 轉錄與字幕,§ 工作方法:編輯時會遇到的陷阱(其他章節在步驟到來時再讀:§ 在手動測量音效前的音訊,§ ffmpeg 和 § 在執行你自己的指令前的 Shell;引擎的工具則遵循其餘部分)../../references/brand-kit.md,當編輯需要顯示它們時:使用者的真實標誌、畫面截圖和數字,絕不使用虛構的,以及他們的品牌設定一次在workspace/brand/中(§ 你的品牌,設定一次)$X/example/:參考專案,包含一個已交付編輯的所有檔案(stage.theme: "light"用於其淺色版本);$X/example-2/:該技能從頭開始對另一個影片執行的結果(兩個鏡頭、安靜的錄音、沒有呼吸畫面),以及那次執行更改了什麼
在步驟需要時閱讀:../../references/audio-spec.md 關於音量標準(響度標準,如何測量聽到的音量)。引擎的元素:node plugins/video/skills/short-editor/scripts/api.mjs <module> [figure],永遠不要使用它們的來源。
我無法觀看或收聽影片。 頭部在哪裡、單詞從哪裡開始、嗖嗖聲有多大聲:每一個都是測量值。
verify.mjs立於「準備好了」和損毀檔案之間;measure.mjs判斷音效設計是否被聽見。永遠不要跳過它們。
以下所有路徑都相對於 GTM by Pipecorn 資料夾的根目錄。$X 表示 plugins/video/skills/explainer-editor/scripts(此技能),$E 表示 plugins/video/skills/short-editor/scripts(引擎)。使用它們的絕對路徑執行。
先決條件(預檢:在任何工作前檢查)
引擎所需的:ffmpeg + ffprobe 在 PATH 中(brew install ffmpeg)和 python3(Xcode Command Line Tools)是必需的,且無法從此處安裝;如果缺少一個,請停止並說出指令。其他所有東西都會自行預置:引擎的 bootstrap.mjs(node 套件、語音轉文字虛擬環境、音樂庫)會在 init.sh、transcribe.sh 和 build.sh 內部執行,而 init.sh 會獲取字型:Inter(ExtraBold, Bold, SemiBold, Medium;SIL Open Font License,來自 npm 套件 inter-ui,通過 jsDelivr)和 Instrument Serif Italic(Google Fonts,OFL)到專案的 assets/fonts/。不會在全系統範圍內安裝任何東西。swiftc 用於建置人像遮罩:沒有它的話,頭部不會從框架中浮出(框架只會裁切說話者),且舞台會繪製在上層;請告知使用者。
檔案位置
如同引擎所說,且只能這樣做:每個編輯一個工作目錄,workspace/projects/<slug>/,slug 不能與其他專案重複;完成的檔案 workspace/videos/<slug>.mp4;永遠不要使用其他專案的檔案,即使是同一個影片;暫存檔案在專案的 tmp/ 中,而不是 /tmp。此技能的 scripts/ 保持唯讀。使用者的圖片(截圖、標誌、他們影片的影格)放在專案的 assets/ 中。
流程
0. 設定工作目錄
$X/init.sh workspace/projects/<slug> <source.mp4> workspace/videos/<slug>.mp4 [--theme light]
引擎的骨架(從檔案讀取 project.json、SFX 素材包在 assets/sfx-top5/),然後是此技能的 plan.mjs 和 edl.mjs、project.json 中解說語言的鍵值(style: "explainer"、layout:$X/layout.mjs 的路徑、blurBand 0)、sfxMasterDb 設定為基於影片人聲(其響度 + 15.3 dB,每低於 −20.5 LUFS 再加 0.13 dB:這樣家庭音響聽起來就像在基礎技能中一樣,無論影片的音量如何)、字型、一個 1080x1920 的主畫布用於較小的直式影片(第二次執行時保留),以及主題(stage.theme:dark(預設)或 light;--theme light 設定它;已設定的專案會保留其設定)。從該目錄執行後續所有指令。
0.2. 一次問完問題
主題(暗色(預設)或亮色:相同舞台,白色玻璃,深色文字,較柔和的陰影)、音樂(音樂庫 plugins/video/assets/music/;預設為 Convergence;告知非 Mixkit 的曲目可能會封鎖影片的營利功能)、速度(預設為 ×1;較慢的語速在 ×1.1 時效果更好),以及使用者可以提供的圖片:他們產品的截圖、他們談論的影片影格、他們的標誌、真實數字。使用者未提供的內容,則使用他們的文字和內建的象形圖繪製,絕不使用虛構的畫面或數字。從 GTM by Pipecorn 頁面執行時,第一則訊息的簡短說明會回答這些問題(主題來自其備註:「light」代表亮色主題):根據以下規則決定,不要再問。
Pipecorn 通用結尾:每種風格的 BONUS,每次都問,預設關閉
(plugins/video/references/pipecorn-generic.md):大約 6 秒在影片最尾端,顯示 Pipecorn,然後其數值在一個位置中輪流替換,然後再次顯示 Pipecorn,沒有音樂。不 · 是,以及要顯示哪些數值(1 到 4 個;node $E/generic.mjs --list;預設為電話覆蓋率、接通率、管道)。
讓你的聲音更好聽:一個 BONUS,每次都問,預設關閉
(plugins/video/references/voice-clean.md):ElevenLabs 的聲音隔離器會移除錄音中的房間回音和噪音。不 · 是,讓我的聲音更好聽。它需要 ElevenLabs 連接器:如果沒有金鑰,用一行說明它存在(設定 › 連接器 › 新增金鑰)然後繼續。如果選擇「是」,在步驟 1 之前:node plugins/video/motion/voice.mjs clean <source>,然後 project.json 中的 source 變為 <…>-voice.<ext>(長度相同,畫面不變)。
1. 逐字轉錄
$E/transcribe.sh --lang en # 實際「說」的語言;然後 project.json 中的 "lang"
words.json,以原始影片的時間碼為準。永遠不要翻譯。如果一段影片充滿了重新開始,先使用引擎的 rough-cut.mjs 組合(short-editor/SKILL.md § 0.7),然後再次轉錄。然後 node $E/words.mjs(引擎的):words-fixed.json,每個單詞的開始時間被移出靜音區域,對齊到實際人聲;每個單詞的真實結束時間在停頓之前;有疑問的單詞會被列出;words.mjs env|end|say 用於讀取其中一個(short-editor/SKILL.md § 1)。不要為此使用自訂腳本。
2. 遮罩與框架
node $E/matte.mjs # 人像遮罩(需要 swiftc),每分鐘影片約需 1 分鐘
node $X/layout.mjs --measure --write # 頭部位置 → project.json stage
node $X/layout.mjs --print # 框架、字幕、呼吸畫面
--measure 會找出影片的鏡頭(來源剪輯點,如同 verify.mjs 找到它們的那樣),並在每個鏡頭中讀取遮罩上的頭部(每個鏡頭 32 個影格):框架的寬度會將最長鏡頭的頭部放在與參考範例相同的大小(226 像素寬;近距離的影片會獲得較窄的框架並置中,因此肩膀和胸部會進入畫面:在工作範例中為 598 像素,其頭部佔影片寬度的 38%,在第二個影片中為 782 像素;--keep-frame 會保留參考範例的 942 像素並警告框架將只顯示大部分臉部);在每個鏡頭中,框架的頂邊會通過頭部通常頂端下方 88 像素處(參考範例),因此頭部會從中浮出;字幕會根據頭部通常升高的高度(最多 90 像素)向上移動,並保持在其上方 20 像素處;全螢幕時頭部會佔寬度的 45%。包含多個鏡頭的影片會獲得 stage.shots(每個鏡頭的裁切、字幕和全螢幕取景;攝影機在剪輯點切換,框架保持不變)。在預覽中檢查它(§ 5)。在此風格中,來源剪輯點發生在說話者框架內部,是畫面的一小部分:verify.mjs 可能會將其報告為「在全螢幕畫面之下」(第二個影片);透過框架自身的差異來檢查它是否落在其框架上,而不是用肉眼。
3. 閱讀轉錄稿,撰寫分鏡表
這是判斷步驟,也是整個工作的核心。在撰寫任何程式碼之前,先完整閱讀轉錄稿並將分鏡表寫成一個列表:包括場景,以及在每個場景中,哪個元素在哪個單詞出現。
-
場景,由攝影機移動連接。 一個場景是一個想法(承諾、產品、流程、步驟、列表、比較):持續 4 到 8 秒,然後攝影機移動到下一個。預設移動是甩動(向右平移:舊場景模糊地向左離開,一道光線橫掃而過,新場景到來);當下一個想法更深入時使用上升(舊場景向上離開);當新場景回答了舊場景的問題時(一個「為什麼」、一個揭露)使用推進穿透舊場景;切換僅在呼吸畫面後使用。盡量不要連續使用兩個相同的移動。
-
一個場景到來時是完整的。 在場景自身時間放置的元素,會與攝影機一起移動進入(當移動結束時它已經在那裡:參考範例從未在移動後顯示空舞台);稍後出現的元素則會在其對應的單詞時進入。當場景中的事物一個接一個被命名時,將它們全部放在場景的開始時間,處於黑暗中或失焦狀態(
dim: 0.6,blur: 10),並在其單詞出現時點亮每個元素(.blurTo(on(i), 0).lit(on(i))及其音效):舞台從第一個影格就充滿內容,並在每個單詞時仍然移動(第二個影片的角色和頻道,2026-10-05)。 -
每隔大約一秒就有新事物。 每個命名了事物、數字、步驟、陳述的短語,都會在其單詞上獲得一個元素或一個移動:元素進入、標籤揭露、在某物周圍繪製標記、某物被點亮、場景移動。超過 2 秒沒有新事物出現在舞台上就會被認為無聊:這是第一版編輯的評語(2026-10-05)。
-
標題用兩行簡短文字為章節命名,關鍵詞使用襯線字體(
*Killer* Text Hooks),在數字或聲明行上有一個紅色方塊(3 Winning Types Of)。它會隨著章節而改變,舊的標題在上升消失後,新的文字才會升起。 -
何時使用何種元素:
所說的內容 元素 N 個事物、步驟、規則的列表 S.list:從左側飛入的長條,標籤在每個被說出之前都是模糊的(reveal),正在解釋的那個被點亮(focus),其結果在其末尾彈出(glyph: "check"、"cross"…);header將一個長條變成章節的標題名稱、術語、定義 S.pill(其中包含一個象形圖:glyph)、S.arrow從它所命名的東西指向它、S.ping(ring: true)環繞該事物、S.mark(圓圈、框架、底線)繪製在強調它的單詞上由部分組成的事物、原因及其影響、鏈條 S.tree(子元素依序掉落,每個都用火花連接)、S.wires用於連接任意兩者組合、比較 S.equation(+、=)、一個VS標誌搭配S.shake和畫面干擾效果產品、工具、平台 使用者的標誌( S.icon,其光暈,ring讓電話響起)、S.card或S.phone中的截圖、S.prompt在使用時打字輸入範例、影片、系列 使用者圖片的 S.cards,或影片本身的影格(stills.mjs)搭配player卡片搜尋、多個來源、群眾 帶有 glyph的S.cards網格,一個接一個被點亮(掃描效果)數字 S.count爬升到該數字,或彩色文字({g:22 Days}綠色,{r:A Few Weeks}紅色)好 / 壞、是 / 否 S.glyph(綠色磚上的check,紅色磚上的cross),長條的結果行動呼籲 標題( Comment "X",To Get The *Skill*),S.file用於他們發送的內容 -
呼吸畫面(
FULL):硬切到說話者全螢幕(進入時有相機閃光,離開時有嗖聲),除了字幕外不繪製任何東西。用於告白、妙語、強烈意見;持續 2 到 6 秒;永遠不在前 15 秒內。非說話頭部的鏡頭(B-roll、廣角鏡頭)會全螢幕顯示:[from, to, { zoom: 1 }]。呼吸畫面之後的場景會在它後面打開(S.scene(<breather end> - 0.45, "push")),這樣當呼吸畫面結束時它就在那裡了。 -
僅限真實名稱和真實數字(brand-kit.md):如果需要畫面或數字但使用者未提供,則使用他們的文字和內建的象形圖繪製,或直接刪除該元素。
-
字幕是逐字的:`fi
…
[因原文截斷,以下內容省略]