FilmFlow: Agentic System for 3D Virtual Film Cinematography
Yiming Zhang, Jiarui Guo, Haojia Wei, Yifei Liu, Yifan Yang, Hongjie Zhang, Xue Yang, Zhihang Zhong
cs.CV
2026-10-22
四个代理把文字或参考视频收成可重叠原子运镜,在500条文字任务上盲测通过率为84.3%,排第一的比例为61.0%。
运镜要变成能播放的轨迹,难在主体正在动,多条运镜还叠在同一段时间里。边绕边升高,环绕没结束就往前推。路径躲开了碰撞,构图和节奏仍可能是错的。
CinemaTraj 把运镜段按顺序接上,主要处理静态场景里的碰撞和遮挡。ChatCam 和 FilmAgent 用语言代理调工具或协调制片,不直接输出可重叠的连续轨迹。参考视频的常见做法,是把估计出的位姿搬进新场景。尺度一偏,运动主体就容易出画。
FilmFlow 接收一句指令或一段参考视频,写成 Blender 关键帧。角色动画沿用场景原有的,系统只规划相机。
四个代理都调用 gpt-6-astra,推理力度为 medium。一次只做一条连续镜头。
Interpreter 把指令对到物体,写出关系 G 和脚本 B,只含时长、主体和画面,不排操作表。参考视频另附抽样帧和 LingBot-Map 相对位姿。位姿尺度未核对,只当运动线索,落点在目标场景重算。
Scout 先定开场。差的起点会限制后面每一步。每轮最多 6 个候选,最多两轮。三项等权打分,分别是对齐、可读和构图,接受线 0.70。不过线就留最高分,此后开场锁死。
Director 用 22 种原子操作写时间表,每条有种类、参数和起止时间。位置、朝向、焦距、焦点、手持和静止都在库中。区间可以重叠,环绕、推近和升高能够同时发生。一句「边绕边推」,就写成同一时段里同时生效的几条操作。
执行器把操作展开为绝对状态,减去起点得到相对量,再按通道合成。平移相加,转角按轴相加,焦距按比例相乘。环绕和推拉先于横移与升降,然后逐帧写成关键帧。
Critic 看渲染。先查穿模和能否执行,再以六项等权分决定是否接受,线为 0.62。六项覆盖对齐、可读、构图、叙事、连贯和电影感。反馈点名操作和时间段。最多改三轮,另加两次校验修补,开场保持锁定。参考视频按时间戳比运镜。脚本要求的遮挡不扣分。
示例只来自开发场景,须过检查和 Critic,测试场景不入库。最多三个关键词描述运镜目的,用 Jaccard 系数取一条。细化时示例固定,当前反馈优先。
平均 6.23 次调用、69.5k token(输入 65.9k,输出 3.7k),约 2.23 分钟,不含导出。
CinemaBench 含 150 个场景,动态 73、静态 77。每场 5 条指令,共 750 条文字任务,另有 60 段参考视频。50 个开发场景只建示例库。数字来自 100 个测试场景的 500 条文字任务和 40 条参考视频。每场 1 易、2 中、2 难,正文只给总平均。
外部模型打分,避免用 FilmFlow 自己的 Critic。对齐和运动用 VideoReward,画质用 DOVER(0 到 100)。Probe 是 CameraBench 给出的运镜匹配概率,只作辅助。
文字任务:
| 方法 | 对齐 | DOVER | 运动 | Probe |
| LAMP | -1.747 | 41.54 | 0.209 | 0.564 |
| GenDoP | -1.768 | 39.63 | 0.257 | 0.597 |
| CinemaTraj | -1.788 | 44.65 | -0.068 | 0.618 |
| FilmFlow | -1.461 | 47.60 | 0.555 | 0.829 |
对齐分全为负。对 CinemaTraj,DOVER 47.60 对 44.65,运动 0.555 对 -0.068,Probe 0.829 对 0.618。
参考视频:
| 方法 | 对齐 | DOVER | 运动 | Probe |
| 零样本 VLM | -1.417 | 35.86 | 0.041 | 0.502 |
| LingBot-Map | -1.472 | 35.55 | 0.278 | 0.521 |
| VGGT-Ω | -1.491 | 34.88 | 0.176 | 0.533 |
| FilmFlow | -1.224 | 41.77 | 0.289 | 0.750 |
运动与 LingBot-Map 接近,0.289 对 0.278。DOVER 41.77 对 35.86,Probe 0.750 对 0.533。零样本基线同样调用 gpt-6-astra,直接输出关键帧。
消融的文字运动分:完整模型 0.555,只许顺序执行 0.536,无示例 0.447,无 Critic 0.430,无 Scout 0.387。重叠比顺序执行只高 0.019。参考视频去掉 Critic 后,DOVER 从 41.77 降到 37.21;去掉示例后,运动从 0.289 降到 0.172,Probe 从 0.750 升到 0.766。
42 人盲评,各 10 条文字和 10 条参考视频,完成排序为文字 420 份、参考视频 397 份。五分制下,文字任务 FilmFlow 的对齐、画质、流畅为 4.2、4.4、4.3,CinemaTraj 为 3.5、3.7、3.6。通过率 84.3%,LAMP 42.1%,GenDoP 46.2%,CinemaTraj 63.8%。排第一占 61.0%,CinemaTraj 占 21.2%。参考视频通过率 82.1%,LingBot-Map 77.3%,VGGT-Ω 73.3%,零样本 63.0%。排第一占 63.2%,三者为 17.4%、17.1%、2.3%。通过率离得近,名次差得很远。
拿到的是可改的操作时间表和关键帧。场景与动画须先在 Blender 里。失败时能看见是环绕角太大,还是位置锁松得太早。
灰模可作视频生成的结构条件。附录用 Seedance 换提示,外观变了,构图和时机仍跟渲染走,没有数字。
自动分里,Scout 和 Critic 的跌幅大于禁止重叠。重叠是在写「同时」,运动分只多出 0.019。人评差距大于 DOVER 上 47.60 对 44.65 的差别。成本约 69.5k token、2.23 分钟,绑在 gpt-6-astra 上。较小模型微调能否打平,论文没有结果。
750 条里 50 条手写,700 条由 gpt-6-astra 按样例生成。测试集手写仅 30 条,且无单独分数。规划器是同一模型,措辞可能互相贴近。
测试场景动态 46、静态 54。超过一半主体不动,论文要处理的是运动主体。易、中、难没有分表。参考视频自动分只有 40 条,未给方差。
GenDoP 与 LAMP 不跟运动主体,并按目标包围盒得到尺度 s 再缩放,LAMP 乘 s/64,GenDoP 最长轴放到 2s。位姿基线换轴后直接渲染。CinemaTraj 本就是顺序原语,面向静态场景。领先里夹着设定差异。
开场选定后即锁定。一例两轮未过 0.70,0.68 的机位被固定。接受后隔离带仍穿过躯干,结尾仍漂移。0.62 的接受线挡不住这些残差。
最好的对齐分仍是 -1.461。灰模生成没有指标。部分资产不能再分发,复现要自备文件。