Communitygithub.com

explainer-editor

將一段直式(9:16)的人物自拍鏡頭,編輯成 Pipecorn 風格的解說短片,具備 After Effects 等級的動態效果。

explainer-editor 是什麼?

這個 AI Agent 技能「explainer-editor」旨在將一段原始的直式(9:16)人物自拍影片,快速轉化為 Pipecorn 風格的解說短片。其核心是創造一個「舞台」:說話者位於畫面下方一個圓角的黑色框架中,頭部會「浮出」框架;而當說話者陳述時,舞台上方會即時生成對應的視覺場景,這些場景之間以帶有光暈的鏡頭甩動(whip pan)、上升(rise)或推進(push)等運動連接,並帶有真實的動態模糊(motion blur)與彈性曲線(springs and expo curves)。整個畫面永遠處於緩慢的漂移與推近狀態,每個元素都會投射出柔和的陰影並帶有自身顏色的光暈。此技能基於「short-editor」技能引擎,支援 Pipecorn 平台,並內建了從轉錄、人像遮罩處理、版型生成到最終渲染的完整自動化流程。使用者只需提供一段自拍影片,AI 會根據預設的「解說語言」規則,自動規劃場景分鏡、生成視覺元素、動畫與音效,最終產出一支完整的短影片。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ihsaneGTM/gtm-skills/tree/main/plugins/video/skills/explainer-editor

在你喜歡的 AI 中提問

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

說明文件

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

…

[因原文截斷,以下內容省略]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相關技能