AI 视频创作中,一个容易被忽略的问题是:画面生成得足够漂亮,并不代表镜头已经讲清楚了故事。
人物应该从哪里进入?走到哪个位置停下?摄像机应该看向谁?什么时候切换镜头?这些决定通常藏在提示词里,直到视频生成完成,创作者才发现空间关系或节奏不符合预期。
我们在 Timeline Studio 中开发了一个浏览器端 3D 白模预演工作区,尝试把这些问题提前变成可以观看、调整和讨论的场景。
目前它仍是原型,重点是验证角色走位、镜头构图和剧本时间关系。本文介绍它的实现方式,以及这种工作流对 AI 视频创作的实际价值。
项目源码:Timeline Studio / ai-video-editor。这是一个开源、本地优先的视频编辑器,探索让创作者和 AI 智能体共同操作可编辑的工程。
一、为什么 AI 视频创作需要白模预演?
白模,也可以称为 Blockout,是用简单几何体和基础角色搭建场景的方法。
在这个阶段,创作者主要关心:
- 人物与道具的位置关系。
- 角色的移动方向、目的地和停顿。
- 摄像机的位置与观察目标。
- 动作、镜头和文字内容的时间安排。
例如,“一个人走到桌边,停下来,随后切换到另一个人的视角”,在文字中只有一句话,实际却包含空间、运动和剪辑三个层面的决定。
直接进入视频生成,需要模型同时理解这些决定。加入白模预演后,创作者可以先检查:人物是否走出了画面?停顿是否太短?切镜是否发生得太早?
我们的目标是把一部分生成后的返工,提前转化为生成前的调整。它是否能减少多少次重试,还需要实际项目统计,目前不提供未经验证的效率百分比。
二、技术架构:将场景数据与渲染分开
白模工作区采用 Three.js 构建,通过独立、延迟加载的界面进入,编辑白模不会直接改变原有视频时间线。
实现分为三个主要部分:
| 模块 | 职责 |
|---|---|
| 场景命令层 | 定义场景结构、编辑操作与参数校验 |
| Three.js 视口层 | 显示场景、处理选择与变换、播放和视频输出 |
| 工作区与对话层 | 管理编辑状态、时间轴、剧本以及 AI 修改审阅 |
场景以可序列化数据表达,核心结构包括:
{
revision,
duration,
objects,
motions,
shots,
script
}
其中,objects 保存角色与道具,motions 保存定时动作,shots 保存镜头时间范围及摄像机参数,script 保存带起止时间的文字段落。
这种设计让场景既能由界面操作,也能由受约束的 AI 命令修改。渲染器负责显示数据,场景规则由共享命令层统一管理。
三、角色动作、摄像机和剧本共用一条时间轴
只有静态摆放,还不足以验证视频叙事。白模需要回答“某个时间点正在发生什么”。
因此,角色动作、镜头和剧本共用同一个播放时间:
当前时间 t
├── 计算角色位置与朝向
├── 选择当前镜头
└── 定位当前剧本段落
目前角色移动使用时间区间内的线性插值。设起点为 P0、终点为 P1,动作时间范围为 t0 到 t1:
u = clamp((t - t0) / (t1 - t0), 0, 1)
P(t) = P0 + (P1 - P0) × u
同一套角色姿态与镜头选择函数同时用于预览和视频导出,减少两套实现产生的行为差异。
界面上,点击动作、镜头或剧本段落,可以跳到对应起点;剧本支持直接修改文字和起止时间。调整场景总时长时,已有的动作、镜头与剧本时间范围会同比例缩放。
需要注意:剧本时间是创作者可调整的编排数据,当前并非根据真实配音自动对齐。
四、让 AI 提交可审阅的场景修改
自然语言适合表达创作意图,但编辑器需要的是明确、可验证的操作。
在 Anna 集成中,我们让模型读取当前场景快照,并通过专用的 blockout_scene_edit 工具提交结构化修改建议。
例如,修改已有角色的行走动作,可以表达为:
{
type: "motion",
id: "walk-01",
objectId: "<已有角色 ID>",
kind: "move",
start: 0,
end: 3,
from: [0, 0, 0],
to: [2, 0, -1]
}
这些操作进入与手动编辑共用的命令引擎,检查对象是否存在、坐标是否合法、时间是否超出场景范围,以及相关动作或镜头区间是否冲突。
完整流程是:
读取场景快照
→ AI 提交结构化建议
→ 命令层校验
→ 用户审阅
→ 检查场景是否已变化
→ 应用为一次可撤销编辑
场景在等待期间发生变化时,旧建议不能直接覆盖新编辑。
模型也没有任意执行 JavaScript、加载外部模型或修改未知对象的权限。这让 AI 的参与落在明确的编辑能力范围内,也让创作者能够理解它准备改什么。
五、浏览器本地预览与导出
当前白模支持两类输出:
场景 JSON 保存结构化场景数据,便于检查、归档和后续开发。
白模 WebM 视频 输出真实的摄像机视角画面,分辨率为 1280 × 720,提供进度反馈和取消操作。实现使用浏览器画布流与 MediaRecorder,可用编码格式取决于浏览器支持。
手动场景编辑和预览在浏览器端运行;Anna 对话规划需要可用的宿主服务。当前场景按项目保存在本浏览器中,白模原型尚不承诺云端或跨设备同步。
六、对 AI 视频创作的贡献在哪里?
1. 把空间关系变成可见的创作依据
白模让“角色在谁的左边”“人物经过哪个道具”“摄像机能否看到动作”等问题,有了可以直接检查的画面。
它能帮助创作者建立明确的空间基准,但后续生成模型能否遵循这个基准,仍取决于模型和接口支持的参考输入。
2. 在生成前讨论镜头节奏
白模允许先安排动作持续多久、角色在哪里停留、何时切镜,再进入画面风格与细节生成。
这使团队讨论从“这个镜头感觉不对”,进一步变成“角色还没走到目标位置,镜头就切走了”。修改目标更具体,也更容易复核。
3. 为创作者与 AI 提供共同的场景描述
人物、动作、镜头和剧本都有明确身份与时间范围,AI 可以围绕具体对象提出修改,创作者也可以继续手动调整。
这种结构化表达,为可检查、可撤销的人机协作提供了基础。
4. 为后续生成流程保留可扩展的数据
场景数据可以为未来的镜头参考帧、逐镜头提示词或其他控制信号提供基础。
这些属于后续扩展方向,当前尚未形成“白模一键生成最终 AI 视频”的完整链路。现阶段,导出的白模视频主要用于预演检查、沟通,以及在外部工具支持时手动作为参考。
七、一个示例:先把八秒钟的故事讲清楚
假设要制作这样一个片段:
一名角色走向桌边,停下来,另一名角色转向他。
可以先把这八秒钟拆为:
| 时间 | 角色安排 | 镜头目的 |
|---|---|---|
| 0—3 秒 | 角色 A 走向桌边 | 交代人物和空间 |
| 3—5 秒 | 角色 A 停留 | 给关键动作留出观察时间 |
| 5—8 秒 | 调整角色 B 的朝向 | 切换镜头表达回应 |
这是编排示例,并非当前系统自动生成的成片。
预演时,优先检查角色是否被遮挡、走位是否清楚、镜头切换是否合理。确认这些基础决定后,再处理角色外观、场景风格和最终视频生成,创作方向会更明确。
八、当前边界与开源参与
目前已经实现的重点包括:
- 浏览器 Three.js 白模场景与基础角色、道具变换。
- 定时角色移动、停留和镜头切换。
- 与播放同步、可编辑的剧本段落。
- 经校验、审阅和冲突检查的 AI 场景修改。
- 浏览器本地场景保存、JSON 下载和 WebM 视频导出。
角色配音绑定、复杂表情、碰撞与 IK、外部网格导入、多章节创作,以及完整的视频时间线集成,目前仍未实现。
我们希望通过这个原型探索:当 AI 视频创作拥有明确的场景、动作和镜头数据后,创作者能否更早发现问题,并保留更多修改主动权。
如果你正在研究 AI 短剧、浏览器 3D、视频编辑器或智能体创作工具,欢迎查看项目、提交 Issue,或者参与相关模块开发。
项目仓库:GitHub · MartinDelophy/ai-video-editor
在线编辑器:Timeline Studio
本文介绍的是开发中的白模原型,公开站点与 Anna 版本的功能进度可能不同,请以实际版本为准。欢迎 Star 关注后续进展,也欢迎带着具体的镜头案例参与讨论。