渲染 —— 音乐、音效、字幕、最终导出
输入: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生成)仅在用户要求或批准估算后使用。
第一步 —— 音乐
- 读取分镜的
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)。
第二步 —— 音效
音效提示已存在于每个镜头的 sfx 中(纯文本,由配音阶段锚定到帧或口语单词)。混合器通过 studio/library/sfx/index.json 将单词映射为声音(由 node studio/scripts/make-sfx.mjs 生成;自定义声音放在 custom 中,优先检查)。repeat + every 多次播放提示;syncEnd: true 将其放置在镜头末尾;riser 在其提示处结束。转场呼啸声是选择加入的(--auto-whoosh)—— 用户偏好克制的声音:仅关键时刻(最多约每2秒1个提示,大多数转场无提示)。如果分镜的提示远多于该数量,则修剪至关键时刻后再混音并告知用户。修复混合器中任何“No sound matched”的行 —— 通过添加关键词或自定义声音,绝不更改分镜设计。
第三步 —— 混音
node studio/scripts/mix.mjs videos/<video>(--dry 预览事件数量)
人声保持在顶部;音乐被侧链压缩并淡出;音效为 -12 dB(--sfx-db 或 storyboard.sfxDb);主输出限制并标准化至 -14 LUFS / -1.5 dBTP。设置 storyboard.finalAudio。任何音频更改后重新运行。
第四步 —— 字幕
社交格式默认为开启。在 storyboard.json 中:
"captions": { "enabled": true, "y": 83, "size": 50, "skipLines": ["L11"] }
- 短语(≤ 4个单词,平衡,根据停顿分割)来自配音时间轴;正在说的单词以品牌的突出颜色高亮。
skipLines:VO 行中已经显示在屏幕上的词(电话号码、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 修复碰撞。
第五步 —— 最终渲染、封面、质量检查
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(和封面)连同质量检查摘要及混音内容(音乐来源、音效事件数量、字幕开关状态)发送给用户。
第六步 —— 批准
用户满意 → "status": "final" 写入 storyboard.json → 渲染完成。更改:音乐/音效/字幕调整 → 回到此阶段的第1-5步;视觉效果或时机更改 → 回到分镜/配音技能,然后重新运行此阶段。