构建并导出视频
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. 并行分配场景
在同一条消息中发送所有场景,每个场景一个 agent,agent 类型为 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 agent(技能未通过插件安装,或使用其他工具):使用通用 agent,设置 model: "sonnet"、effort: "medium",并要求其先阅读 $VV/agents/vm-canh.md。工具不支持子 agent 的,则按该文件依次自行构建。
少于 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。