建置與匯出影片
變數 VV、PY 與 videomotion 技能中相同。HF 為 npx -y [email protected]。輸入資料位於 <du-an> 目錄中:storyboard.json、words.json、timeline.json、mix.wav。
1. 根據樣式準備
- 載入樣式標籤中的字型(標籤內的 Google Fonts 行):
"$PY" "$VV/tools/fonts.py" <du-an> "VT323" "Be Vietnam Pro:400,700"會輸出至fonts/和fonts.css。 theme.css:從標籤調色板定義:root變數:--bg、--ink、--accent、輔助顏色、--cap-bg、--cap-ink(字幕需達到 4.5:1 對比度)。- 如果樣式具有貫穿整個影片的連續背景(地圖、紙張、黑板、網格):撰寫
compositions/_nen.html(id 為_nen),所有場景的背景設為透明。 "$PY" "$VV/tools/assemble.py" <du-an>:生成index.html,複製字型,為尚未建立的場景建立暫存檔案。"$PY" "$VV/tools/packets.py" <du-an>:為每個場景打包工作指令至checks/packets/<id>.md。
2. 平行分配場景
在同一則訊息中同時觸發所有場景,每個場景分配給一個代理,代理類型為 videomotion:vm-canh(已聲明 model: sonnet、effort: medium:始終使用最新的 Sonnet)。簡短的指令:
建置場景
<id>。工作指令包:<du-an>/checks/packets/<id>.md。模板:$VV/templates/scene.html。請正確寫入檔案<du-an>/compositions/<id>.html。
如果工作階段沒有 vm-canh 代理(例如技能未透過外掛安裝,或使用其他工具):則使用通用代理,設定 model: "sonnet"、effort: "medium",並囑咐其先閱讀 $VV/agents/vm-canh.md。如果工具不支援子代理,則依該檔案內容依序自行建置。
如果少於 3 個場景,則自行建置,無需分配。
3. 合併與技術檢查
"$PY" "$VV/tools/assemble.py" <du-an>
cd <du-an> && npx -y [email protected] check
修正直到顯示 Check passed,且 0 個錯誤(錯誤發生在哪個場景檔案,就修正該檔案)。字幕的 timeline_track_too_dense 警告為正常現象。無需審批表或人工審核;使用者若想預覽,可執行 npx -y [email protected] preview --background。
4. 渲染與音訊合成
"$PY" "$VV/tools/assemble.py" <du-an> --no-audio
cd <du-an> && npx -y [email protected] render --output renders/raw.mp4 > renders/render.log 2>&1
"$PY" "$VV/tools/audio/mix.py" srt <du-an>
"$PY" "$VV/tools/audio/mix.py" final <du-an> --video <du-an>/renders/raw.mp4 --name <slug>-<ddmmyyyy>
"$PY" "$VV/tools/assemble.py" <du-an>
渲染在背景執行(每秒影片約需 2 秒電腦時間)。--no-audio 是必選的:mix.py final 會完整合成 mix.wav。最後的 assemble 命令會將 index.html 恢復為有音效的版本,以便預覽。
5. 最終檢查一次
執行 ffprobe renders/<ten>.mp4:確認尺寸正確、包含音訊串流、時長與 words.json 中的 total 相符。使用 ffmpeg 抽取影片中間的一幀進行視覺檢查。輸出 renders/<ten>.mp4 和 phude.srt。