Motion Forge:程式碼轉影片(Code2Video)工業級製作技能主指南
本專案本身即為一個完全自包含、可獨立分發的 Code-to-Video 工業級技能。系統基於 Remotion 4.x + React 19 + TypeScript + Three.js (@remotion/three) + Canvas 2D + SVG 統一多技術棧核心,內建 265 張原子解耦動效卡(劃分為 9 大專業領域)、底層視覺基座(_shared/)、可視化本地除錯工作檯與嚴格的 G1/G2 兩道品質確認關卡。
目錄
- 核心架構與五大技術鐵律
- 兩道品質確認關卡標準作業程序 (G1 & G2 Gates SOP)
- 多場景獨立流水線體系 (Scenario Pipelines)
- 265 張動效卡全景資產與導演決策心法 (Creative & Open Motion Design)
- Film IR 分鏡協議與多技術棧渲染規範
- CLI 工具鏈全生命週期與本地工作檯互動
- 最終交付與故障排查清單
一、核心架構與五大技術鐵律
在編寫任何影片分鏡或渲染程式碼前,Agent 必須堅守以下五條不可妥協的設計紀律:
-
絕對解耦與局部時鐘原則(Local Frame Only):
- 每個分鏡(Scene)只使用局部幀號(
frame 0到durationInFrames),嚴禁在分鏡內部硬編碼全片絕對時間戳(absoluteFrame或from)。全片絕對時鐘由 Core 層透過時間線累加編譯; - 分鏡之間嚴禁跨模組互相
import內部元件。所有分鏡共享的狀態必須透過Film IR的props傳入; - 動效卡(Cards)只承載運動數學與視覺邏輯,嚴禁將專案專有的具體文案或業務圖片路徑寫死在卡片內部。
- 每個分鏡(Scene)只使用局部幀號(
-
純函數幀時鐘確定性(Frame-Deterministic Execution):
- 所有的動畫變形、物體位移、透明度變換必須是當前局部幀
frame的純數學計算函數:$Value = f(frame)$; - 嚴禁使用瀏覽器的
requestAnimationFrame、setInterval、setTimeout或外部自執行時間線; - 嚴禁使用未置種子的無參
Math.random()(必須使用 Remotion 內建帶種子的random(seed)),確保同一幀無論何時 seek 渲染,畫面像素 100% 冪等一致。
- 所有的動畫變形、物體位移、透明度變換必須是當前局部幀
-
真實素材本地閉環原則(Local Assets Only):
- 渲染引擎禁止在影片合成中直連外部遠端未經驗證的 URL(防範斷網、防盜鏈與請求延遲);
- 外部圖片、影片片段、音訊配樂必須由 Providers 提前下載落盤至專案本地目錄,並於
assets.json中統一註冊管理。缺失的素材必須顯式標記並向用戶申報,嚴禁靜默佔位或假數據糊弄。
-
多技術路線統一幀渲染哲學(Multi-Tech Rendering):
- 排版與互動 UI 採用 HTML/CSS + Spring 彈性動畫;
- 幾何輪廓、連線、圖表與遮罩採用 SVG 路徑插值;
- 粒子、流體與數萬高頻運動點採用 Canvas 2D;
- 3D 立體模型、空間光影與三維運鏡採用 Three.js (@remotion/three)。
- 所有技術路線統一服從 Remotion 的
useCurrentFrame()幀同步時鐘。
-
專案工程獨立化原則(Standalone Project):
- 本技能目錄只承載流程規範、動效卡參考、通用執行時模板和
forge create工程生成器;用戶專案的全部內容(core/、cards/、scenes/、public/素材、film.json、package.json、工作檯與渲染產出)必須落位在用戶專案自己的目錄中,獨立npm ci、獨立校驗和渲染,可脫離技能目錄執行; - 嚴禁把專案專屬程式碼/素材寫進技能目錄,也嚴禁用軟連結把專案內容掛回技能目錄——
forge create將執行時、動效卡和預設 Film 以真實檔案拷貝到專案,專案專屬分鏡元件直接寫在專案的scenes/下; - 技能目錄內
output/projects/與 CLI 的關卡流程僅適用於技能自帶範例;真實專案的 G1/G2 評審記錄保存在專案目錄內。
新專案初始化(輸入:專案絕對路徑與輸入素材;輸出:可獨立安裝依賴的工程骨架):
- 在模板目錄執行
npm run forge -- create --dir /absolute/project --input <輸入> [--audio-kind song|instrumental] [--name <id>]。目標必須是模板之外的空目錄,命令會產生完整執行時副本、複製本地素材到public/assets/<id>/並建立專案草稿; - 初始化完成後進入
PROJECT_ROOT,執行npm ci、npm run validate -- --project <id>。真實專案的程式碼、素材、Film IR、審批狀態和輸出都由PROJECT_ROOT/output/projects/<id>/與PROJECT_ROOT/public/自包含; - 本地素材只使用
public/下的相對路徑;遠端來源僅作為來源元數據記錄,不進入渲染引用。缺素材立即停止,不能讓專案以絕對路徑或外部軟連結冒充獨立工程; - 後續所有命令先執行
cd <PROJECT_ROOT>,再執行專案內腳本。渲染產物與評審記錄不得寫回模板目錄; - 模板目錄僅在
create時作為唯讀來源。產生後,專案中的 import、npm 依賴、腳本和素材引用不得再指向該目錄。
- 本技能目錄只承載流程規範、動效卡參考、通用執行時模板和
失敗分支與恢復路徑
| 觸發條件 | 一線處理 | 仍失敗或需要變更時 |
|---|---|---|
| 專案根目錄不明確,或即將寫入技能目錄 | 停止寫入,與用戶確認專案絕對路徑;後續命令均以該專案目錄為工作目錄 | 未獲得明確路徑前只討論方案,不建立檔案 |
| 必需素材缺失、不可讀或授權不明 | 報告具體路徑與原因,暫停受影響分鏡;不得靜默佔位或編造素材 | 由用戶補充素材或明確批准替代方案,並同步修訂 G1 |
| G1 未獲確認或被要求修改 | 停留在設計階段,修訂 film.json 與 design-review.md | 不製作樣板鏡,不執行 G1 審批命令 |
| 樣板鏡出現黑屏、音畫錯位、文字越界或質感不合格 | 保持 G2 鎖定,定位到具體分鏡並修復,只重渲樣板鏡 | 再次提交 G2;不得用全片渲染代替樣板驗證 |
| 已審批的敘事、佈局、時長、素材或音訊發生變化 | 使原 G1/G2 結論失效,回到 G1 重新確認受影響範圍 | 新 G1 通過後重新製作並確認有聲樣板鏡 |
| 建置、校驗或渲染命令失敗 | 保留完整日誌,修復根因後重跑同一命令;不得註解報錯或跳過校驗 | 仍未通過則停止交付,明確報告阻塞項和已完成的驗證 |
獨立性掃描發現外部絕對路徑、file: 依賴或指向技能目錄的軟連結 | 將所需程式碼或素材真實拷貝進專案,改為專案內引用 | 在隔離副本中重新安裝並渲染;未通過不得宣稱可獨立執行 |
二、兩道品質確認關卡標準作業程序 (G1 & G2 Gates SOP)
為了防止 Agent「憑空想像、盲目堆砌程式碼、造成嚴重計算浪費和預期偏離」,系統強制規定兩道確認關卡(Two-Gate Review)。嚴禁跳過關卡直接渲染全片!
[用戶輸入]
↓
[需求分析 & 素材籌備]
↓
[編寫 Film IR 草稿]
↓
【🔴 CHECKPOINT G1:分鏡與設計確認】 → 向用戶呈現排版清晰的劇本與視覺表,STOP 等待批准
↓ (用戶確認通過後執行 npm run forge -- approve-design)
[製作真實有聲樣板鏡]
↓
【🔴 CHECKPOINT G2:有聲樣板鏡確認】 → 渲染代表鏡影片,用戶審查真實視聽質感與音畫對齊,STOP 等待批准
↓ (用戶確認通過後執行 npm run forge -- approve-sample)
[全片程式碼裝配與批次渲染]
↓
[最終交付 (MP4 + 可編輯工程 + 工作檯)]
1. G1 關卡:分鏡與視覺設計確認 (Design Review)
在編寫任何複雜渲染程式碼前,Agent 必須先完成《G1 分鏡與視覺設計方案》,並向用戶呈報一份排版清晰的 Markdown 評審文件,至少包含:
- 基本屬性:片種類型、目標受眾、畫幅比例(橫屏 16:9 / 豎屏 9:16)、目標總時長與幀率(如 30fps);
- 視覺主題:主色調、背景色、文字主色、高亮強調色(Accent)、排版字體族;
- 主時鐘選型:口播語音對齊 / 歌曲歌詞對齊 / 純音樂節拍網格 / 文字閱讀時長;
- 分鏡劇本詳表(必須嚴格按照下表格式向用戶呈現):
| 分鏡序號 | 鏡頭名稱 | 敘事目的與語義 (Semantic) | 旁白 | 實際上屏文字 (On-Screen Text) | 畫面描述 | 主動效卡 (Primary) | 運鏡卡 (Camera) | 轉場卡 (Transition) | 局部時長 (Frames/Sec) |
|---|---|---|---|---|---|---|---|---|---|
| S01 | 開篇破局 | Hook 鉤子:製造懸念 | 為什麼九成的企業 AI 轉型,最後都停在演示階段? | "為什麼 90% 的企業AI轉型以失敗告終?" | 居中巨大高對比標題 + 紅色告警發光底板 | typography/halation-bloom | camera/slow-push | transition/cube-rotate | 90f (3.0s) |
| S02 | 數據展示 | Data 證明:給出慘烈統計 | 先看兩組數字:七成八停在玩具階段,一成二產生負向回報。 | "78% 停留在玩具階段12% 產生負向ROI" | 左右雙列對比面板 + 動態數字與落砂圖表 | data/particle-sand-fill | 無 | transition/whip-pan | 150f (5.0s) |
- 🔴 CHECKPOINT · STOP:向用戶展示完畢後,必須結束本輪並詢問是否同意分鏡規劃;不得在同一輪執行審批、製作樣板鏡或渲染全片。
- 通過訊號:只有用戶在後續回覆中明確確認 G1 後,Agent 才在
PROJECT_ROOT執行:npm run forge -- approve-design --project <project-id>
2. G2 關卡:有聲樣板鏡確認 (Sample Review)
G1 確認通過後,不得立刻渲染全片。必須挑選全片最具代表性、視覺最複雜、包含真實音畫元素的 1 個分鏡(通常為 Hook 鏡頭或核心高潮鏡頭),製作並渲染為樣板鏡影片:
- 渲染命令:
npm run forge -- render --project <project-id> --scope sample - 質檢要點:
- 音畫是否精確同步?字幕是否在發音開始前 1~2 幀入場?
- 畫面文字是否存在遮擋、折行破壞、超出安全區?
- 動效速度與音樂情緒是否匹配?是否給人呼吸感?
- 🔴 CHECKPOINT · STOP:提供真實樣板鏡影片與質檢結果後,必須結束本輪並等待用戶審查;不得自行代替用戶批准 G2。
- 通過訊號:只有用戶明確確認樣板鏡後,才在
PROJECT_ROOT執行:npm run forge -- approve-sample --project <project-id> - 只有完成 G2 審批後,專案狀態機才解鎖全片最終渲染許可權!
三、多場景獨立流水線體系 (Scenario Pipelines)
不同輸入類型的端到端處理邏輯拆分為獨立的指導檔案,存放於 pipelines/ 目錄下。Agent 應根據用戶輸入的實際類型查閱對應指南:
| 場景類型 | 適用輸入與片種 | 對應獨立 Pipeline 指南檔案 |
|---|---|---|
| 場景 1:URL 連結成片 | 部落格、公眾號、SaaS Landing Page、技術文件、新聞發布 | pipelines/url-to-video.md |
| 場景 2:純音樂音訊成片 | 純樂器、電子樂、史詩配樂;哲理片、卡點快閃、意境散文 | pipelines/instrumental-to-video.md |
| 場景 3:歌曲帶人聲成片 | 完整歌曲(演唱+伴奏);動態歌詞 MV、音樂敘事故事短片 | pipelines/song-to-video.md |
| 場景 4:純主題自主規劃成片 | 一句話主題/命題;深度科普、人文哲學、商業洞察、通識短片 | pipelines/theme-to-video.md |
| 場景 5:用戶多模態素材混剪 | 用戶自有圖片、截圖、短影片片段、口播錄音;產品展示、Vlog | pipelines/assets-to-video.md |
| 內容策劃通用規範 | 主題/URL 的結構化策劃、敘事弧線、事實追溯與 Film IR 轉換 | pipelines/content-planning.md |
| 場景擴展指南 | 如何擴展新的輸入(如表格、PPT、雙人播客等) | pipelines/extending-pipeline.md |
四、265 張動效卡全景資產與導演決策心法 (Creative & Open Motion Design)
系統內建的 265 張原子動效卡 是 Agent 創作影片的視覺畫筆。
1. 開放式選型原則:不設限的藝術想像力
- 嚴禁生搬硬套與教條限制:本系統絕不限定「某種片種必須使用某些卡片」。相反,我們鼓勵 Agent 依據文案的情感張力、敘事懸念、聽覺節拍自主搭配與創新;
- Agent 是真正的視覺導演:動效卡是一套模組化積木。你可以用原本用於科技產品的
interaction/command-palette-summon來表達古代思想家的「知識檢索」;也可以用機場機械翻牌typography/split-flap-flip展現時空穿越或生命倒數計時; - 自由調節無級參數:每張卡片均暴露了豐富的參數(如彈簧硬度、重力大小、模糊半徑、粒子數量等),Agent 可在
film.json的params中自由定製個性化運動手感。
2. 九大領域動效分類資產全景 (265 張卡)
所有 265 張卡片已完成規範化封裝,支援橫豎屏雙模自適應,按領域完全內聚解耦:
| 類別 (Kind) | 目錄與卡片總數 | 核心視覺職能 | 代表性卡片資產 (可在程式碼中直接引用) |
|---|---|---|---|
camera (運鏡) | cards/camera/ (21張) | 空間推拉搖移、鏡頭焦段、透視畸變,為扁平畫面建立縱深空間 | dolly-zoom (希區考克滑動變焦), slow-push (深沉慢推), slow-pull (漸遠拉出), shot-crash-zoom-punch (重擊衝擊變焦), space-camera-moves (三維空間翻滾), tension-camera-moves (地平線傾斜張力), overhead-camera-moves (俯視大跨度搖移), whip-pan (甩鏡), orbit-drift (環繞漂移) |
typography (文字排印) | cards/typography/ (52張) | 標題入場、字幕律動、金句強化、程式碼終端、字元解碼 | split-flap-flip (機場復古機械翻牌), scramble-decode (亂碼矩陣解碼), halation-bloom (膠卷紅暈過曝沖光), type-rhythm-sync (節拍字幕對齊), tracking-expand-reveal (字距擴散展開), terminal-typewriter (駭客終端打字), keyword-reveal (關鍵詞漸顯), quote-card (典雅名言卡), highlighter-sweep (螢光筆劃線標記), cel-flash-stomp (定格重擊頻閃) |
interaction (元件與互動) | cards/interaction/ (58張) | 擬物實體、互動部件、懸浮卡片、彈窗與游標協作 | command-palette-summon (Cmd+K 懸浮召喚), stack-reveal (卡片折疊展開), popup-book-rise (紙藝立體書挺立), masking-tape-slap (美紋膠帶拍貼), autolayout-gap-dial (自動佈局撥盤), carousel-3d (3D 輪播圖), theme-switch-moves (主題切換漣漪), collab-cursor-moves (多游標協奏), type-and-filter (輸入過濾), glassmorphism-card (毛玻璃面板) |
data (數據與圖表) | cards/data/ (20張) | 物理粒子沉降、動態折線柱狀、儀表板、數字狂飆衝刺 | particle-sand-fill (重力落砂沉降), counter-confetti (數字衝刺狂飆+綵帶紙屑), number-counter (翻滾計數), chart-grow (柱狀折線生長), chart-live-moves (即時數據流), gauge-readout-moves (儀表指標跳躍), before-after-slider-scrub (前後對比滑桿), scroll-brake-moves (滾動煞車定格) |
effects (特效與光影) | cards/effects/ (22張) | 光暈掃光、HUD 掃描準星、三維自轉晶體、氛圍微粒場 | three-crystal (Three.js 三維自轉晶體), light-play-moves (掃光漫射), spotlight-sweep-moves (探照燈掠影), glow-flyline-moves (發光飛線軌跡), fui-hud-moves (科技線框展開), impact-feedback (動漫重擊衝擊波), canvas-particles (數萬流動微粒), flying-words (詞雲穿梭) |
rhythm (剪輯與節奏) | cards/rhythm/ (8張) | 節奏抽幀、快閃打斷、分屏對決、蒙太奇切鏡 | beat-cut-moves (節拍閃光快切), speed-ramp-freeze (變速定格批註), quad-split-parallel-scenes (四分屏平行視線), panel-grid-moves (漫畫分鏡格重排), rhythm-interrupt-moves (跳切重擊推進), trailer-grammar-moves (預告片重擊黑場) |
commercial (商業鏡頭) | cards/commercial/ (43張) | 產品宣講鏡頭、品牌片頭片尾、開場引題、最終落版 | hook (痛點鉤子鏡頭), price-card (定價與方案卡), features (特性清單流), store-card (門店與位置指引), fact-sheet (事實說明清單), brand-ink-open (墨水擴散片頭), logo-shrink-wordmark-lockup (Logo 收縮落版), ui-to-brand-morph (介面變異為品牌標誌) |
transition (鏡頭轉場) | cards/transition/ (26張) | 鏡頭邊界處的時空變換與視線過渡,消除生硬跳切 | cube-rotate (3D 立方體多維翻轉), clock-wipe (時鐘指標擦除), bubble-swarm-takeover (氣泡群聚遮罩), color-block-step-wipe (色塊步進擦除), paper-plane-messenger (紙飛機穿梭), push-through (穿透推進), whip-pan (高速甩鏡頭模糊), dark-tunnel (暗調隧道穿梭) |
media (多媒體展示) | cards/media/ (15張) | 外部圖片、影片片段的入場構圖與畫中畫對比 | media-pop-in (輕快彈入), split-compare (左右分屏滑塊對比), svg-path (向量路徑延展), video-pip-float (懸浮畫中畫), photo-polaroid-scatter (拍立得照片散落) |
底層基座 (
cards/_shared/):提供全庫通用的渲染原語(如SpeedBlur動態模糊、softShadow雙層物理柔陰影、Stage舞台光源反光板)與商業排版字號自適應計算,不作為獨立卡片對外暴露。
3. 六大片種經典靈感組合範式 (僅供啟發,自由創新)
以下僅為常見風格的靈感搭配參考,並非死板規則。Agent 完全可以根據實際創意進行混搭:
- 科普與硬核通識 (Science Explainer):
- 靈感搭配:
typography/scramble-decode(字元解碼破局) +data/particle-sand-fill(物理落砂示範量級) +media/svg-path(概念連線) +transition/color-block-step-wipe。
- 靈感搭配:
- 哲學思辨與深度散文 (Philosophical Essay):
- 靈感搭配:
typography/halation-bloom(高光膠片沖光) +camera/dolly-zoom(空間縱深抽離) +typography/quote-card(典雅引用) +effects/canvas-particles(微弱浮塵)。
- 靈感搭配:
- 科技產品與功能發布 (Product Promo):
- 靈感搭配:
effects/three-crystal(三維構件亮相) +interaction/command-palette-summon(生產力呼出) +data/counter-confetti(效能破紀錄) +transition/cube-rotate。
- 靈感搭配:
- 商業戰略與數據看板 (Business & Strategy):
- 靈感搭配:
data/gauge-readout-moves(儀表指標) +data/chart-live-moves(曲線生長) +typography/highlighter-sweep(數據標記) +transition/clock-wipe。
- 靈感搭配:
- 音樂情緒與動態 MV (Music Story & Lyrics):
- 靈感搭配:
typography/type-rhythm-sync(主歌節拍字條) +typography/cel-flash-stomp(副歌定格重音) +camera/shot-crash-zoom-punch(重擊衝撞) +transition/whip-pan。
- 靈感搭配:
- 復古手作與剪貼簿 (Scrapbook & Handcrafted):
- 靈感搭配:
interaction/masking-tape-slap(膠帶拍貼) +interaction/popup-book-rise(立體書升起) +typography/split-flap-flip(機械翻牌) +transition/paper-plane-messenger。
- 靈感搭配:
4. 四槽位裝配規範與客觀品質紅線
每張分鏡在 film.json 的 motion 屬性中支援四個解耦槽位:
{
"motion": {
"camera": { "cardId": "camera/slow-push", "params": { "scale": 1.15 } },
"primary": { "cardId": "data/particle-sand-fill", "params": { "gravity": 1.2 } },
"text": { "cardId": "typography/halation-bloom", "params": { "bloomIntensity": 0.8 } },
"transitionOut": { "cardId": "transition/cube-rotate", "params": { "direction": "left" } }
}
}
- 客觀品質紅線(必須堅守):
- 明確視覺焦點:同一個分鏡中,畫面應有明確的主角。如果使用了劇烈的
primary元件動效,運鏡camera宜平穩呼吸;若運鏡使用了強烈的shot-crash-zoom-punch,元件內容宜保持相對靜態,避免群魔亂舞導致視覺暈眩; - 留足認知停留期(Cognitive Hold Time):動效完成入場展開後,畫面文字與核心結構必須保留至少 45~90 幀(1.5s ~ 3.0s)的穩定停留期,確保觀眾能夠從容閱讀和理解,嚴禁剛做完動畫瞬間切走;
- 文字長度與畫幅匹配:橫屏單行文字建議不超過 22 個漢字,豎屏單行建議不超過 14 個漢字,防止折行重疊或衝出影片安全區。
- 明確視覺焦點:同一個分鏡中,畫面應有明確的主角。如果使用了劇烈的
五、Film IR 分鏡協議與多技術棧渲染規範
film.json 是全工程的唯一語義事實源。
1. 標準 Film IR 結構
{
"id": "project-slug",
"title": "專案影片標題",
"genre": "explainer",
"brief": {
"goal": "核心敘事目標",
"audience": "目標受眾",
"tone": "基調氣質"
},
"output": { "width": 1920, "height": 1080, "fps": 30 },
"theme": {
"background": "#0a0f1d",
"foreground": "#f8fafc",
"accent": "#38bdf8",
"fontFamily": "Inter, PingFang SC, sans-serif"
},
"scenes": [
{
"id": "scene-01",
"title": "鏡頭名稱",
"intent": "敘事意圖",
"semantic": "hook",
"durationInFrames": 90,
"onScreenText": ["實際上屏主標題", "副標題說明文案"],
"layout": { "kind": "center-headline" },
"renderer": "html",
"sceneComponent": "scene/stack-explainer",
"motion": {
"camera": { "cardId": "camera/slow-push" },
"primary": { "cardId": "interaction/stack-reveal" },
"text": { "cardId": "typography/scramble-decode" },
"transitionOut": { "cardId": "transition/cube-rotate" }
},
"props": {},
"qa": { "keyFrames": [20, 45, 80] }
}
]
}
2. 雙模自適應機制 (16:9 ↔ 9:16)
所有場景與卡片統一支援響應式縮放。在分鏡程式碼中使用基準比例容器:
import React from 'react';
import { useVideoConfig } from 'remotion';
export const AdaptiveStage: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const { width, height } = useVideoConfig();
const isPortrait = height > width;
const baseWidth = isPortrait ? 1080 : 1920;
const baseHeight = isPortrait ? 1920 : 1080;
const scale = Math.min(width / baseWidth, height / baseHeight);
return (
<div
style={{
width: baseWidth,
height: baseHeight,
transform: `scale(${scale})`,
transformOrigin: 'top left',
overflow: 'hidden',
}}
>
{children}
</div>
);
};
六、CLI 工具鏈全生命週期與本地工作檯互動
1. 命令列表
| 命令 | 功能 | 使用時機 |
|---|---|---|
forge create | 新專案初始化 | 使用者提供輸入(URL/音訊/主題/素材)後第一時間執行 |
forge validate | 專案完整性校驗 | 每次修改 film.json 或素材後 |
forge approve-design | G1 設計審批 | 使用者確認 G1 後執行,寫入審批時間戳 |
forge render --scope sample | 渲染樣板鏡 | G1 批准後,挑選代表性分鏡渲染 |
forge approve-sample | G2 樣板鏡審批 | 使用者確認樣板鏡後執行,解鎖全片渲染 |
forge render | 全片渲染 | G2 批准後執行,產生最終 MP4 |
forge preview | 啟動本地開發工作檯 | 開發除錯階段,提供可互動預覽 |
forge export | 匯出可編輯工程 | 最終交付前,為使用者打包獨立工程 |
2. 工作檯互動
forge preview 啟動的本機開發工作檯提供:
- 時間軸預覽:可拖拽 seek 到任意幀,查看即時渲染結果
- 分鏡清單:列出所有分鏡,支援快速跳轉
- 參數調整面板:即時修改動效卡參數並查看效果
- 音訊波形:顯示音訊波形,方便對齊視覺節拍
- 質檢面板:顯示關鍵幀截圖與自動化校驗結果
七、最終交付與故障排查清單
最終交付物
- 最終影片 (MP4):位於
output/projects/<id>/final.mp4 - 可編輯專案工程:完整的
PROJECT_ROOT目錄,包含所有原始碼、素材與film.json - 設計審批記錄:
G1-design-review.md與G2-sample-review.md,記錄審批過程 - 渲染日誌:
output/projects/<id>/render-log.txt,包含所有渲染詳細資訊
故障排查清單
-
npm ci是否成功執行且無錯誤? -
npm run validate是否通過? -
film.json中的scenes陣列是否至少包含一個分鏡? - 所有
motion.cardId是否正確引用存在的卡片? - 素材是否已下載到
public/assets/<id>/並在assets.json中註冊? -
sceneComponent路徑是否對應於scenes/下存在的元件? - 每張分鏡的
durationInFrames是否為正整數? - 分鏡元件的
props是否與Film IR定義一致? - 輸出目錄是否有足夠的磁碟空間?
- 渲染日誌中是否有任何 ERROR 或 WARNING?