/edicion — 含動態圖形 + Premiere XML 的編輯流程
輸入:一段原始影片(或一個包含原始影片 + 支援素材的資料夾:Kling/AI 剪輯、PNG、音樂、SFX)。
輸出:在影片所在資料夾中建立 <NAME>_EDIT/,內含 <NAME>_v1_premiere.xml、Assets/{MG,Subtitulos,SFX,Envato}、LEEME.md。不預先渲染 MP4 預覽(使用者要求以加快速度):透過步驟 5 的連絡表單進行視覺檢查。
以 rioplatense 西班牙語(voseo)與使用者溝通。在較長的步驟之間簡短通知進度。
路徑:SK = 此技能的資料夾,內含此 SKILL.md(Claude Code:~/.claude/skills/edicion;Codex:~/.codex/skills/edicion)· 腳本在 $SK/scripts · 引擎在 $SK/engine/engine.html · 目錄在 $SK/reference/escenas.md · 範例在 $SK/reference/ejemplo_jobs.js。
專案工作目錄:<carpeta>/<NAME>_EDIT/.work(持久化,允許在另一個會話中製作 v2)。
一律使用 python3 -I 執行 Python(Windows:py -3 -I)。傳遞含空格的路徑時請使用引號。支援 macOS 和 Windows:在 PowerShell 中使用 \ 的路徑,$env:VAR 取代 VAR=...,以及腳本的標誌(例如 --t=end-0.4)取代環境變數。
0 · 準備
- 計時器:一旦知道名稱,立即建立工作目錄並執行
python3 -I $SK/scripts/timing.py start "<work>"。腳本會自動記錄每個步驟花費的時間。 - 相依性:
python3 -I $SK/scripts/doctor.py(Windows:py -3 -I $SK\scripts\doctor.py)。如果任何項目顯示 ✗,執行其指示的命令(通常為安裝程式:在 Mac 上為bash $SK/scripts/install.sh,在 Windows 上為powershell -ExecutionPolicy Bypass -File $SK\scripts\install.ps1),然後再次檢查。 - 資料夾清單:使用
ffprobe檢查每個影片(時長、fps、旋轉角度、nb_frames)、PNG 大小、音訊時長。原始影片通常為 1920×1080,旋轉 90 度(= 直式 1080×1920,30 fps)。 - 檢查支援素材:
ffmpeg -vf "fps=2,scale=150:-1,tile=10x2"→ 檢視圖像。辨識每個剪輯/照片說明了什麼(鉤子、笑點、隱喻)。如果有場景,使用scdet偵測剪輯點。 - 檢視原始影片的一個影格(衣服顏色 → 字幕顏色,請參閱 escenas.md)。
1 · 轉錄
python3 -I $SK/scripts/transcribe.py "<crudo>" "<work>" → 附帶時間碼的片語列表。
Whisper 會對雜訊產生幻覺("Gracias"、"Gracias por ver el video"、"Suscríbete al canal"、"CC por…"):使用以下指令驗證這些區域以及任何疑問:
python3 -I $SK/scripts/check.py "<work>" 21.9-26.3 ...(語音 ≈ −5…−25 dB;雜訊 ≈ −48…−70 dB)。
2 · 決定腳本(編輯標準)
- 刪除重複的片語、假開頭、不完整的鏡次以及失誤。面對同一內容的多個鏡次,保留最後一個完整的。
- 修正字幕文字(voseo:"querés"、"tenés"、"dejá";"método IDEAS";專有名詞)。
- CTA:如果錄製了多個替代方案,預設使用 "mandame un mensaje(ito)"(使用者明確選擇)。其他的在 LEEME 中列出其原始影片時間碼。如果有一個不重複的 CTA 列表(不同的選項,沒有相同的開頭),可以全部保留為 OPCIÓN 01/02…。在最終回覆中說明你選擇了哪一個。
- 寫入
<work>/segs.json:邏輯片段列表(每個 = 共享一個圖形的想法),每個包含從轉錄/檢查結果中取得的[a, b, "texto"]片語。
3 · 精準剪輯(必須)
python3 -I $SK/scripts/tighten.py "<work>" 根據語音的真實能量裁剪每個片語,並刪除 ≥ 0.25 秒的內部停頓(閱讀、側視、呼吸)。使用者明確要求無靜音剪輯:不要留下任何停頓。
建立 <work>/config.json(如下)並執行 python3 -I $SK/scripts/edl.py "<work>" → 輸出每個片段的時長和時間碼,並重新轉錄該剪輯:確認沒有遺漏或多出任何單詞。如果開頭遺失,使用 check.py 檢查並調整 segs.json。
{ "name": "SIGN_SPINNER", "version": 1, "fps": 30, "tail": 1.2,
"src": "/abs/crudo.mp4", "edit_dir": "/abs/carpeta/SIGN_SPINNER_EDIT",
"caption_colors": {"act":"var(--hot)","kwAct":"var(--lime)","kw":"#FFB08A"},
"keywords": ["pacientes","scroll","correctas"],
"broll": { "kl": {"path":"/abs/kling.mp4","frames":97,"rate":24,"w":1080,"h":1916},
"s1": {"path":"/abs/foto.png","still":true,"w":941,"h":1672} },
"music": {"path":"/abs/musica.wav"},
"face": {"top": 0.22},
"markers": [["HOOK",0],["CTA · Mandame un mensaje",17]] }
tail = 最後的額外秒數(對著鏡頭),以便閱讀最後一個圖形。
face.top = 頭頂在畫面中的高度(0–1)(在步驟 0.4 的影格中檢視):限制最大縮放以避免裁切到頭頂。music 由 envato.py use 補全(或來自影片資料夾的路徑)。可選:sfx_max(整個編輯中 SFX 的最大數量,預設為 5)、sound_design: "manual"、max_zoom。
4 · 設計動態圖形 → <work>/jobs.js
基於 reference/ejemplo_jobs.js 和 reference/escenas.md。固定風格(使用者很喜歡,不要更改):帶有單色引導句和橙色點的奶油色卡片、大寫的 Bricolage 標題、橙色強調、✓ 青檸色、帶有顆粒感和分層擦拭的全螢幕。
規則:
- 使用者限制(必須遵守):3 個全螢幕 (
fs) 和整個編輯中最多 3 個疊加動態圖形 (ov/ov2:卡片、列表、貼紙、標章…)。其餘為字幕、重新構圖和 B-roll。為那些能從視覺呈現中獲得最大效益的想法選擇 3 個 MG(正在構建的列表、一個數據、CTA),而不是重複已經說過的話。 - 字幕 vs. MG:字幕全程運行,但當有 MG(ov、ov2 或 fs)時會自動消失以避免競爭;MG 一結束字幕就會恢復。無需採取任何動作:render.js 會處理。因此每個 MG 必須能夠獨立說明該段落的內容,且最好不超過相應想法的時長(2–5 秒)。
- 將每個 MG 與觸發它的詞語同步(
W(seg,'palabra'))。 - 在 3 個最強的收尾處使用覆蓋臉部的全螢幕 (fs),持續 1 到 3 秒,分散放置。交替使用墨水 / 橙色 / 奶油色背景。
- 在前 2 秒內使用強力的鉤子:上方大文字,如果有一個有趣的或視覺化的支援剪輯,讓它進入鉤子(加上貼紙和箭頭或 HUD)並配上強勁的音樂。
- B-roll:首先使用資料夾中的素材(Kling/AI 剪輯、照片),用來說明所說的內容(隱喻:倉鼠輪、標誌、X 光)。靜止照片使用 Ken Burns 效果
[100,112]。此外,3 個 Envato 片段(步驟 4a)。在 B-roll 之上,僅使用貼紙/HUD/標章。 - 來自影片資料夾的額外音訊(相機、腳步聲等)使用
X()。 - SFX:自動(步驟 4b)。除非要更改音效,否則無需提供
J()的最後一個參數。 - 當隱喻需要時使用新場景(按照 escenas.md 將它們添加到 engine.html)。不要重複使用來自其他不適用場景的固定文字(例如
hook顯示 MARKETING DESDE CERO)。 - 僅在一個卡片必須放在另一個疊加層之上時(例如 tracker)使用
ov2軌道。
4a · 語意 B-roll + Envato 音樂
Envato MCP 僅用於搜尋(不下載也不授權)。envato.py 透過 HTTP 呼叫它,因此在 Claude 和 Codex 中即使未配置 MCP 也能運作。
- 選擇腳本中的 3 個時刻,其中真實圖像會有所幫助:一個具體情況(診間中的患者、某人在滾動)、一個視覺隱喻或一個透過視覺更容易理解的數據。分散放置(前三分之一、中間、CTA 之前),持續 1.5–3.5 秒,絕不能在全螢幕期間或最終 CTA 中,並且在該時刻的卡片可以是貼紙/HUD 或沒有卡片的段落中。
- 搜尋(使用具體的英文術語,描述圖像,而非腳本中的詞語):
python3 -I $SK/scripts/envato.py search "<work>" video "<terms>" --vertical [--sub Medical]。如果結果很少,在不加--vertical的情況下重複(橫向影片將裁切為中央)。檢視<work>/envato/<search>.jpg工作表(第 n 行 = 候選 #n)並選擇:真實(非庫存姿勢)、主體居中且適合 9:16、光線和顏色與原始影片相似、無文字,並且擴展所說的內容而非重複。 - 使用:
python3 -I $SK/scripts/envato.py use "<work>" <key> <search>#<n>(將預覽註冊到config.broll)並在jobs.js中使用B('<key>', seg_origen, inicio, dur)定位它。 - 音樂:
python3 -I $SK/scripts/envato.py search "<work>" music "<sty>" --mood <mood> --tempo "<bpm>" [--genre <genre>](始終為純器樂)。根據影片基調和其呈現的能量曲線(平穩,無長時間下降;對於充滿活力的影片使用Upbeat (110-140 BPM),對於溫暖的影片使用Medium (90-110 BPM))進行選擇,並執行envato.py use "<work>" music <search>#<n>。如果使用者在資料夾中留有音樂,則使用該音樂("music": {"path": ...})。音量在 XML 中自動設定:鉤子處大聲,語音下降低,結尾處升高(hook_gain0.3 ·bed_gain0.08 ·outro_gain0.22 ·offset= 歌曲中開始的秒數,以便進入一個有能量的部分)。 - 授權和下載:同時,XML 使用帶水印的預覽(前綴
PREVIEW_)。如果代理有瀏覽器且已登入 Envato 會話:顯示列表(envato.py report "<work>")並僅要求一次確認;然後,在每個連結上:Download → 為以影片名稱命名的專案授權 → 下載原始檔案(影片使用最高解析度的直式/HD;音樂使用 WAV)。如果沒有瀏覽器或沒有會話,向使用者提供連結表。然後執行python3 -I $SK/scripts/envato.py collect "<work>"(在~/Downloads中搜尋,解壓縮,複製到Assets/Envato並取代預覽),然後重新執行build_xml.py。絕對不要使用來自其他素材庫的素材或跳過搜尋。
4b · 音效設計(自動,使用技能庫)
所有 SFX 都存在於 $SK/assets/sfx/<category>/<id>.wav,歸一化為 −16 LUFS,並在 catalog.json 中描述(時長、各類別的音量和 anchor = 正好落在事件上的擊中點或起點)。查看完整列表:python3 -I $SK/scripts/sfx_import.py --list。在組建 XML 時,只有使用到的 SFX 會被複製到 Assets/SFX。
| 類別 | 何時使用 |
|---|---|
whoosh | 全螢幕進入、擦拭、強烈的卡片轉換 |
build | 在剪輯或收尾之前(reverse-whoosh;riser ≈ 6 秒,僅透過 ID 用於最大的收尾) |
pop | 卡片、貼紙、列表項目的出現 |
click | 介面:搜尋、DM、追蹤按鈕、勾選 |
ding | ✓ 勾選、成功、想法、正面數據 |
error | ✗、刪除線、迷思、錯誤的事物(game-over 是機器人語音:幽默使用) |
hit | 收尾、標章、衝擊 fs(bass-drop 僅透過 ID,每個影片最多 1 個) |
glitch · poof | 某些東西出錯、損壞或消失 |
zoom · bounce · wind | 推近或放大鏡 · 幽默彈跳 · 魔法出現 |
foley · splash · car | 字面意義上的:僅當所說或所見的內容相符(書寫、關閉、拉伸、馬桶、水、汽車) |
使用者規則:整個編輯中最多 5 個效果,巧妙選擇。 超過此數量會顯得很突兀。
自動(預設):收集候選時刻(每個圖形的進入及其內時刻:✓ → ding,標章/收尾 → hit,搜尋/DM/追蹤 → click,全螢幕 → whoosh,切換到 B-roll → whoosh),並僅選擇最重要的 5 個:收尾和全螢幕 > 鉤子 > CTA > 切換到 B-roll > 卡片 > 內部細節,彼此間隔至少約 6 秒(在短影片中 ≥ 3 秒)。音量較低(相對於語音約 −11 到 −14 dB)。變體交替使用。
在審查計劃時,思考每個效果是否有增益;如果沒有,則移除它(J(..., null))。少即是多:3 個恰到好處的效果勝過 5 個。
手動(覆蓋該圖形的自動設定;計入 5 個的上限):
- 特定類別或 ID:
J(..., 'pop')·J(..., 'bass-drop')·J(..., null)= 無聲。 - 在時間線的某個秒數上放置獨立的音效:
S('splash', W(4,'水'))·S('car-pass-2', t, {增益:.25, 時長:3})。 字面 SFX(foley、splash、car)永遠不是自動的:僅在它們有助於笑點或隱喻時使用S()放置它們。node render.js --plan列出所有 SFX(自動的標記為(auto))。 要添加新的音效:python3 -I $SK/scripts/sfx_import.py <file> --id <id> --cat <category> [--anchor peak|onset] [--max 4] --desc "..."(裁剪、歸一化並註冊)。
4c · 重新構圖和縮放(根據話語自動)
render.js 決定 V1 每個剪輯的縮放比例並寫入 framing.json;XML 使用關鍵影格應用它:
snap(快速縮放 100→118 %)用於鉤子 ·punch(124 %)用於強調的片語:帶有!、在短剪輯中帶有關鍵詞、或在標章/bigword 下方(最多每 6 秒一個) ·push(慢速靠近)用於問題和 CTA ·tight(114 %)/wide(100→103 %)交替使用以掩蓋跳接(連續剪輯之間始終 ≥ 8 % 的差異) · 被 fs 或 b-roll 覆蓋的剪輯保持wide。- 最大縮放來自
config.face.top(不裁切頭部);預設為 124 %。 - 要強制一個構圖:在 jobs.js 中使用
F(seg, 'punch')或F.clip(i, 'wide')。
5 · 創意指導、測試和渲染
node $SK/scripts/render.js "<work>" --plan(列出圖形、SFX 和構圖及其時間碼;偵測未找到的詞語)。- 創意指導:
node $SK/scripts/director.js "<work>"→ 報告(direction.md)+ 時間線(timeline.png,檢視它)。檢查是否有任何衝突:超過 3 個 MG 或 3 個全螢幕、MG 下方可見的字幕、同時出現兩個卡片、卡片遮擋 B-roll、B-roll 覆蓋全螢幕、兩個 SFX 重疊、SFX 距離太近(< 6 秒)、音訊剪輯交叉、構圖衝突(punch覆蓋push)。解決所有衝突(調整時間、移除 SFX、更改圖形類型)。之後,如果已選擇 Envato 素材,調整direction.md的 B-roll 部分:在每個 B-roll 片段附近添加一個帶有 T 秒圖示(🔶)的註釋,表示 B-roll 何時開始和結束,並驗證它不會與同一片段中的其他 MG 或字幕重疊。 - 測試:
node $SK/scripts/render.js "<work>"(僅建立 XML)。python3 -I $SK/scripts/tighten.py "<work>" --frames驗證剪輯點。如果可能,最後再次執行 director.js — 可以對最終 XML 進行最後一次自動檢查。 - 總結:
python3 -I $SK/scripts/timing.py stop "<work>"(顯示總時間)並向使用者回報所用的總時間以及LEEME.md中可能包含的關鍵決策。