動態圖像編輯 + 編輯介面
以使用者的語言與他們交談。字幕請使用說話者的原話(切勿改寫)。
路徑說明:ME 代表此技能資料夾,W 代表每個影片的專案資料夾。所有腳本皆為 bash/python/node;scripts/env.sh 會自動尋找 ffmpeg、node、python、Chrome 以及配套的引擎(engine/)。首次使用:請參閱 README.md → 安裝說明(在技能資料夾中執行 npm install,以及 pip install -r requirements.txt)。
規則(不可協商)
- 僅使用官方標誌,不得使用任何重新繪製或「仿製」的圖示。請從品牌官方網站取得(
capture_site.js)或詢問使用者。 - 品牌規範:若是為客戶製作,請從客戶網站(
captures/info.json)讀取顏色、字型與標誌,並將色票寫入parts/top.js頂端。若為使用者自己的影片,請詢問一次使用者的品牌規範,並保存在theme.json與top.js中。 - 網站擷圖:擷取客戶網站(完整頁面,包含桌面版與行動版),並在面板中使用(滾動瀏覽器視窗、裁切過的官方插圖)。Cookie 橫幅應隱藏,絕不接受。無法存取已登入的產品畫面:請告知使用者,並提議整合他們提供的螢幕截圖。
- 節奏:全螢幕 ↔ 面板(拉遠時放大進入,推近時縮小退出)、在重音單詞上推近(約每 2-3 秒一次)、恰好一個標誌性時刻(標誌/姓名揭示)、背景音樂在語音下方降低音量、音效(每次縮放時的嗖聲、彈出聲、點擊聲、打字聲、揭示時的衝擊聲)、跳接時的光閃。
- 付費廣告:頂部 14%(y < 270)及 y ≈ 1250 以下區域(Reels/TikTok 介面)不得放置重要內容;字幕需提高(
CAPDY);面板內不得有字幕(面板會以標題形式顯示文字);結尾卡 = 品牌標誌 + 網址 + 說話者的話語;不得編造任何主張或數字。 - 字幕絕不能蓋在臉上。從左到右的語言 →
projet.json中設定"sens": "ltr"(建置過程會修正文字順序);從右到左(阿拉伯語)→ 設定"rtl"。品牌名稱使用藥丸形狀(fx: "pill",顏色在projet.json → pill中設定)。 - 混音:使用者可在編輯器中設定語音/音樂/音效的音量。預設值:語音 100%,音樂 46%,音效 36%。務必將響度歸一化至 -14 LUFS。
- 每個動畫都是一個註冊元素(請見下方說明),以便使用者可以選取、移位、隱藏及註解。任何動畫都不能存在於註冊機制之外。
- 錨點:每個
wS(card, word)都必須指向該動畫所說明的單詞——執行scripts/ancres.py並閱讀其產生的表格;絕不猜測索引。
工作流程
- 準備:執行
bash $ME/scripts/preparer.sh <video> <W> <lang> "<Whisper 提示詞:專有名詞>"→ 複製來源、全幀裁切、畫面格、可能的剪輯點、逐詞逐句轉錄。然後進行背景中的人物去背(約 1 秒/幀;不要同時執行 Whisper——會佔用過多 RAM):python $ME/engine/mask.py u2net_human_seg <W> && python $ME/engine/make_head.py <W>。 - 客戶(如有):執行
node $ME/scripts/capture_site.js <url> <W>→ 產生captures/、assets/logo-*.png、顏色/字型。檢視擷圖,將有用的視覺素材裁切至W/assets/(例如插圖、適合滾動瀏覽器的長頁面)。 - 字幕:撰寫
W/cartes.json(使用原話 + Whisper 時間戳;每張 2-5 個單詞;hot、fx)→ 執行python $ME/scripts/cartes.py <W>。範本:templates/cartes.EXAMPLE.json。 - 編輯計劃:將腳本分段(鉤子、問題、產品、證明、行動呼籲…),為每段選擇:全螢幕或面板、要顯示的具體物件、一個標誌性時刻、音效。撰寫
W/plan-montage.md(範本templates/plan.EXAMPLE.md),並在動畫化之前簡要向使用者展示。 - projet.json(範本
templates/projet.EXAMPLE.json):包含nom、titre、langue、sens、outro、vol、musique_gain、pill、coupes、cadrage(進入面板的鏡頭 → 測量視窗)、cadrage_force(如果遮罩捕捉到背景)。然後執行python $ME/scripts/framing.py <W>。 - 場景 在
W/parts/中:top.js←templates/top.EXAMPLE.js(色票、CUTS/SEGB、PANELS、縮放ZP、CAPDY);primitives.js←templates/primitives.js;gfx.js←templates/gfx.EXAMPLE.js(SCENES_ED、每個動畫一個EL(...)、圖層、結尾卡、字型)。 - 音效:
W/sons.json(範本templates/sons.EXAMPLE.json):包含musique{bpm, intro_filtree, coupure = 揭示前的靜音, accords} 以及events=[元素|null, 時間|"fin+x", "音效[:參數]", 增益, [重複, 間隔]]。可用的音效:pop、bulle、clic、shutter、succes、buzz、tick、touche、impact、tape、whoosh_in:持續時間、whoosh_out:持續時間、ding:頻率:持續時間、shimmer:持續時間、riser:持續時間、souffle:持續時間。將每個音效連結到其對應的元素,以便在元素被移位或隱藏時音效能與之同步。 - 錨點:執行
python $ME/scripts/ancres.py <W>。 - 預覽:執行
python $ME/scripts/build.py <W>,然後執行node $ME/engine/04_render_frames.js <W> preview t1 t2 …→ 產生連絡表 → 像挑剔的編輯一樣審查(文字可讀?臉部清晰?廣告安全區域?)並在渲染前修正。 - 渲染:執行
bash $ME/scripts/rendu.sh <W>(背景執行,需時 3-6 分鐘) → 產生<nom>.mp4(+.srt/.txt)、音源分軌在mixage/pistes/、編輯器媒體檔。檢查 MP4 的 6-8 幀畫面、-14 LUFS 響度、檔案大小。 - 編輯器:執行
python $ME/scripts/editor_server.py <W> <port>(在 Claude Code 桌面版中:將其加入.claude/launch.json並使用預覽工具),開啟http://localhost:<port>/editeur/。驗證預覽、點擊選擇及播放功能是否正常。 - 監控註解:監看
W/comments.json,每當出現status == "à faire"的新註解時輸出一行(指令在references/editor.md中)。
處理註解
- 讀取註解(
target=el:<id>|scene:<id>|cap:<n>|audio:<track>、t、點擊位置x、y)。 - 將狀態設為「處理中」:
POST /api/comments/status {"id":…, "status":"en cours"}。 - 修改
parts/gfx.js(縮放/面板修改top.js、字幕修改cartes.json、音效修改sons.json)中的對應元素,並確保符合品牌規範及元素註冊機制。若請求不明確,請套用最佳選項並在回覆中提及替代方案。 - 執行
python $ME/scripts/build.py <W>(若音效有變更則加上sons.py) → 編輯器會自動重新載入其預覽。檢查 1-2 幀預覽畫面。 - 將狀態設為「完成」並附上簡短
reply(說明修改內容)——此回覆會顯示在編輯器中。提醒使用者他們可以點擊「渲染影片」。 - 一般性偏好(「我從不想要 X」)→ 將其加入本檔案中的規則。
元素註冊機制(與編輯器的合約)
EL(id, name, scene, layer, [x,y,w,h], ()=>[start,end], t=>{…繪製…})
layer:'panel'(在面板內部繪製,在彈出的頭部後方)·'full'(全螢幕,在前方)·'none'(全域:閃光、結尾卡)。t接收的是編輯器移位過的時間(EDITS.off);僅在你的視窗內繪製;若EDITS.hide[id]則隱藏。- 範圍
[x,y,w,h]用於在預覽中點擊:請保持其準確。 SCENES_ED= 列在編輯器左側的場景(id、label、a、b、kind)。- 縮放:每個
ZP條目即為元素zoom<i>(可在編輯器中移除)。
專案檔案
projet.json · cartes.json → caps.json(caps.orig.json = 編輯器基礎) · sons.json · parts/{top,primitives,gfx}.js · framing.js · edits.json(編輯器設定:off、hide、caps、vol) · comments.json · captures/、assets/ · mixage/pistes/ · editeur/ · <nom>.mp4/.srt/.txt。