载入中… | 今日精选 · 实时更新
每日精选全球 AI 与科技资讯
编辑部 · 北京时间 每日 08:00 更新
首页 ›

AIVS 视频工作室的选角与拍摄流程

· · 阅读 5 分钟

Andrew Arrow 用 Rust 写了一个 AI 视频工作室 AIVS,它能把剧本拆成拍摄计划并在 Apple Silicon 上逐段渲染和拼接,内置场景 Last Light 的早期计划总时长为 27 秒。

AIVS 的开发围绕一个五句对白的小场景展开。Sue 和 Joe 被困在荒漠公路旁,Joe 打开引擎盖后告诉 Sue 车出了问题。Andrew Arrow 想换演员来演这两个人,却不想因此重写角色的名字和对白,于是角色与演员被拆开:Sue 是角色,Ava 可以演她。

脚本最初把两个人直接命名为 Ava 和 Eli,与保存的角色档案同名,改成 Sue 和 Joe 后,演员库与故事里的人名互相分离。现在用户把 Ava 的肖像拖到任意一个 Sue 的对白块上,所有 Sue 台词都会分配给她,Eli 拖到 Joe 同理。点击对白块会打开一个选择器,也能清除指派。实现上 每个角色存一条绑定,而不是每行对白存一条,两个角色都完成绑定后,Generate video 按钮才会启用。

旧版本把演员信息嵌进一长段提示词。当前 Rust 端把剧本文本和结构化 cast 绑定发给 Python,绑定里按角色给出演员名,例如 JOE 对应 eli、SUE 对应 ava。Python 显式加载已保存的角色档案,角色名 Ava 不会因为与演员库共享同一个名字而被自动指派给自己。对白继续保留角色名,渲染时在名字下加入外貌和声音描述;指派只在一个会话内生效,GUI 剧本仍只是预览而不是脚本编辑器。

首版拍摄估算五句对白需要 14 秒,加入动作后总时长增至 32 秒,但长片段仍要模型自己构想整个场景。AIVS 于是把拍摄计划作为剧本和视频生成之间的独立步骤。Python 解析剧本为有序的动作和对白节拍,Codex 提出时长 4 到 12 秒 的镜头,每个镜头带提示词、起始状态、结束状态,并决定是否延续前一镜头。这一计划由三个镜头组成,分别 7 秒、11 秒、9 秒,覆盖车与 Joe 入场、海洋对白与明信片交接、合上引擎盖和走开。

Codex 决定机位,但 Python 会在开拍前检查计划。每个来源节拍必须且只能出现一次,顺序保持一致,镜头不能跨场景边界。对白经由 {{line_3}} 这样的占位符填入模板,Python 负责补回原始说话人、台词提示和文字,重复占位符、带引号的裸对白、时长不足以及超过 1,024 Gemma tokens 的提示词都会被拒绝。校验失败有一次修正机会,仍然失败就终止任务。

下一批改动来自渲染报告。Joe 从车里出来时没有开门动作,第一段镜头末尾出现乱码,一份合法镜头列表没有让表演在物理上变得合理。在第六秒画面上,要求的红色岩石荒漠变成了绿树成行的路。目前的导演指令文件要求 Codex 把开场画面和后续每个动作都纳入考虑:Joe 已经站在支起的引擎盖旁,车门关着,他绕过挡泥板入镜;场景若需要穿过关闭的车门离开,计划必须包含开门动作。明信片同样有要求:Sue 把明信片交给 Joe,后来又把它放回口袋,因此计划里要有人再把明信片还给 Sue。这些规则只存在于 director-instructions 文件中,改进场景安排时不需为特定车辆或道具修改 Python 代码。

start_state 和 end_state 字段只是连续性检查备注,模型实际收到的是组装后的提示词,所以开场位置、道具归属和安静结尾都要写进提示词本身。上一帧延续可以帮助保持构图,不能补上缺失的物理原因。GUI 现在显示已用时间,并流式输出 Codex 的规划过程,命令行可传入其他剧本走同一套计划、校验和渲染流程。

· END ·