剪輯短影音 (HyperFrames)
已在「The Brief」展示片上獲得驗證。人們評斷影片的標準是節奏和敘事,而不僅僅是精緻度 — 單純將好看的場景拼湊起來的蒙太奇只會顯得「陽春」。賦予它一個帶有張力的故事。
1. 故事先行(在寫任何程式碼之前)
構思一個 5–8 拍的敘事,每個拍子展示一項能力,而剪輯本身則講述這個故事。經過驗證的模式: 鉤子(一個問題 + 一個時鐘)→ 工作蒙太奇(每個區塊一項技能)→ 轉折/阻礙(定格畫面、客戶回饋)→ 強行切入的答案 → 成效衝刺 → 交付完成 → 結束卡。 一個持續顯示的 HUD(跳剪的時鐘、階段標籤)能讓觀眾在快速剪輯中保持方向感。
接著在網格上製作提示表:150 BPM = 拍長 0.4 秒,小節長 1.6 秒(或 120 BPM = 0.5 秒)。每個剪輯、重擊和字幕都落在一個拍子上;區域變化發生在小節線處。鉤子 = 前 1.6–3.2 秒內每拍一個字。
2. 從模板開始
cp -R templates/chop-reel videos/<name> && cd videos/<name>
../../.venv/bin/python score.py # 寫入 assets/audio/score.wav
python3 build.py 169 # 寫入 index.html (16:9); build.py 916 則產生 9:16
npx --yes [email protected] lint && npx --yes [email protected] render -o ../../out/<name>-169.mp4
reel.js 結構 — 按以下順序編輯:
- 場景(Scenes):
function scene(g, l)在本地時間l繪製整個畫面。使用相對單位(W、H、M、PORT)以支援兩種比例;fit()將文字縮小至最大寬度。 - 片段(SHOTS):
[t0, t1, scene]— 剪輯序列。null表示由轉場覆蓋。 - 特效列表(FX lists):
PUNCH(每個剪輯處及額外拍子上,1.06 倍縮放在 0.2 秒內衰減)、FLASH(重拍處 2 幀白色閃爍,區域剪輯處半白色)、SHAKES[開始時間, 持續時間, 振幅]、WHIPS(場景之間帶動態模糊的推鏡,平均渲染 9 個子幀)。 - 影片片段(huashu 藝術、字幕工具渲染、AI 鏡頭)疊加在頂部,以
<video class="clip">形式放在build.py中,並在 GSAP 中使用各自的放大補間;畫布在底下繪製黑色。
3. 動作庫
對於具名動作,使用 motion-prompt 技能:node ~/.claude/skills/motion-prompt/scripts/motion-prompt.mjs get 001 043 會回傳每個動作的已發布規格(曲線、持續時間、過衝)。將這些數值精確地移植到 reel.js 中,並在註解中引用它們(// #043 甩鏡: …)— 使用者會注意到動作是「受啟發」還是被「直接使用」。有用的動作:#001 彈出、#005 遮罩揭露、#007 數字計數、#008 動態文字、#010 過衝、#017 遮罩、#020 穿越縮放、#023 故障效果、#024 衝擊抖動、#038 速度變換、#040 定格畫面、#043 甩鏡、#046 強行切入。
4. 音效
使用 score 技能:複製 examples/phonk_150bpm_45s.py 以獲得完整的陷阱/放克配樂,或擴展模板中的 score.py。reel.js 中的每個重擊/閃爍都應在同一時間點有對應的音效(撞擊、拍手、墜落前的上昇音、定格時的唱片刮擦聲、強行切入前的靜默)。旁白使用 Kokoro,音量壓低;字幕使用 caption-video。
5. 檢查與交付
- 以兩種比例分別截取每個區域的畫面並檢視:確保在 9:16 中沒有內容被裁切,文字不小於短邊的 4%。
- 渲染兩種版本,使用 loudnorm −14 LUFS,並同時傳送。命名為
out/<標題> (16x9).mp4/(9x16).mp4。 - 修改:更改 SHOTS / scene 函數 → 重新構建兩種比例 → 再渲染。