渲染——音樂、音效、字幕、最終匯出
輸入:videos/<video>/,內含已核准的 storyboard.json(已配合語音:包含 audio 與 timing)以及已核准的 audio/voice-script.json。輸出:
audio/music.wav 選取或生成的音樂
audio/mix.wav 最終聲軌(語音 + 壓低的音樂 + 音效),-14 LUFS
audio/mix.json 每個聲音事件(鏡頭、提示、檔案、時間)供檢查
render/final.mp4 1080x1920(依格式設定),30 fps,H.264 + AAC
render/cover.png 全解析度封面 / 縮圖
render/qc.json 品質檢查報告
此階段不改變視覺或文字。錯誤的動畫或時間 → 分鏡 / 語音技能。預設免費: 圖書館或程式碼生成的音樂、程式碼生成的音效。付費音樂(AI 生成)僅在使用者要求或批准估價時使用。
步驟 1 — 音樂
- 讀取分鏡腳本的
music.mood/notes與影片長度。 - 在
studio/library/music/中尋找(index.json列出帶有情緒標籤、bpm、授權的曲目)。選取最佳配對;若無配對則告知。 - 無配對 → 生成免費備用方案,並在揭示鏡頭的開始處加入情緒提升(「drop」)(場景開始時間 — 根據持續時間/轉場計算):
node studio/scripts/make-music.mjs --out videos/<video>/audio/music.wav --duration <s> --mood upbeat|calm|cinematic|tense --bpm <n> --drop <s> [--silence <from>-<to>](tense:小調、心跳脈搏、未解決的結尾;--silence在揭示音效之前靜音一段視窗 — 在緊張情緒中,滴答時鐘會跟隨其後)。宇宙影片:遵循universe.json→music/sfx。 圖書館曲目:複製/轉換為audio/music.wav;修剪、淡出與壓低將在混音中處理。 - 記錄到
storyboard.json→music.file、music.source(曲目 + 授權,或「code-generated」)、可選music.db(預設壓低前 -16 dB)。
步驟 2 — 音效
提示已存在於每個鏡頭的 sfx(純文字,由語音階段錨定到影格或口說詞彙)。混音器透過 studio/library/sfx/index.json 將詞彙對應到聲音(由 node studio/scripts/make-sfx.mjs 生成;自訂聲音放在 custom,優先檢查)。repeat + every 讓提示重複播放;syncEnd: true 將其放置在鏡頭結尾;升高音效在它們的提示處結束。轉場呼聲為選擇性(--auto-whoosh)——使用者偏好克制音效:僅在標誌性時刻(最多約每 2 秒 1 個提示,大多數轉場無提示)。若分鏡腳本有遠多於此的提示,則在混音前將其削減為關鍵時刻並告知。修正混音器輸出的任何「No sound matched」行,方法是加入關鍵字或自訂聲音——絕不改變分鏡腳本的設計。
步驟 3 — 混音
node studio/scripts/mix.mjs videos/<video>(--dry 可預覽事件數量)
語音保持在頂層;音樂被語音壓低(側鏈壓縮)並在結尾淡出;音效在 -12 dB(--sfx-db,或 storyboard.sfxDb);母帶限制器與正規化至 -14 LUFS / -1.5 dBTP。設定 storyboard.finalAudio。更改任何音訊後重新執行。
步驟 4 — 字幕
社群格式預設開啟。在 storyboard.json 中:
"captions": { "enabled": true, "y": 83, "size": 50, "skipLines": ["L11"] }
- 短語(≤ 4 個詞彙,平衡,在停頓處分割)來自語音時間軸;口說詞彙以品牌的強調色高亮顯示。
skipLines:語音行數,其詞彙已顯示在畫面上(電話號碼、URL)。- 每個鏡頭:
captionY(畫面百分比)可移動字幕位置、captions: false可在畫面上已有相同詞彙時隱藏字幕(例如名字下方三分之ㄧ處)。 - 保持在安全區域內(預設 83%)且不遮擋重要設計元素。
透過一張連絡板檢查(字幕會在有人說話的影格顯示):
node studio/scripts/render.mjs videos/<video>/storyboard.json --sheet --scale 0.25 --out <scratchpad>/captions-sheet.png
查看一次;使用 captionY / captions: false 修正衝突。
步驟 5 — 最終渲染、封面、品質檢查
node studio/scripts/render.mjs videos/<video>/storyboard.json --final
node studio/scripts/render.mjs videos/<video>/storyboard.json --cover
node studio/scripts/qc.mjs videos/<video>
品質檢查必須通過:解析度、影格率、編碼格式、長度 = 分鏡腳本、音量 -14 ±1.5 LUFS。警告(真實峰值、靜音間隔、黑影格)→ 解釋或修正。不要觀看 MP4;將 render/final.mp4(與封面)連同品質檢查摘要與混音內容(音樂來源、音效事件數量、字幕開關)發送給使用者。
步驟 6 — 核准
使用者滿意 → 在 storyboard.json 中設定 "status": "final" → render,完成。更改:音樂/音效/字幕調整 → 此處的步驟 1–5;視覺或時間軸更改 → 分鏡 / 語音技能,然後重新執行此階段。