ai-chatbot/docs/video-canvas-director-motion-2026-09-17.md

4.8 KiB
Raw Permalink Blame History

3D 导演台镜头轨迹修复与验收(2026-09-17)

此前导演台只保存静态机位,运镜素材库只向提示词追加文字。静态机位截图生成视频的验收不代表连续镜头轨迹可用。本次补齐时间轴、真实 3D 播放和视频导出,未部署生产环境。

完成的功能

  • 场景增加 motion 数据:2–15 秒、最多 100 个关键帧、相机位置、注视点、FOV、线性/缓入缓出插值和循环设置。兼容没有轨迹的旧场景;轨迹随原有画布保存链路持久化,不需要数据库迁移。
  • 支持记录、覆盖、编辑、删除关键帧及修改时间;重复时间和无效数据拦截。调整时长按比例缩放关键帧时间。
  • 推进、拉远、90° 环绕、横移预设;黄色轨迹与关键帧标记、完整轨迹总览。
  • 播放、暂停、循环、时间轴定位;预览时关闭手动相机操控。进入编辑时从当前预览机位继续,避免跳回旧机位。页面进入后台时暂停预览。
  • 导入/导出带版本号的 JSON 轨迹文件;文件限制 256 KiB,坏文件不会覆盖现有轨迹。
  • 按真实相机轨迹录制无声 MP4,隐藏网格、辅助轴和路径,支持取消;浏览器不支持 MP4 编码时明确提示更新浏览器。切到后台、关闭导演台、渲染错误或超时会停止录制并释放媒体轨道,不把部分文件当成功结果。
  • 导出结果可预览、下载、上传为真实视频节点;保存实际时长,供剪辑使用。视频上传使用现有 canvas-video-process 用途参数。
  • “发送首帧与运镜到视频节点”真实渲染 0 秒机位,建立导演台→首帧→视频节点连线,携带完整轨迹元数据及精简的自然语言运镜描述。模型、尺寸等继续由视频节点选择;不自动发起计费生成。

实测中修复的回归

  • 使用整个关键帧覆盖机位会把关键帧 ID 写成相机 ID,导致后续 FOV 编辑失效。现在仅合并 position、target、fov,保留相机身份,并有专门回归测试。
  • WebM 原始录制缺失 duration,影响剪辑;改为 MP4。实际产物为 H.264,包含可读取的时长。
  • 预览/录制时 OrbitControls 仍可能约束相机距离;改为显式设置相机朝向,录制期间锁定交互,避免改变轨迹。
  • 从预览切换到录制时,React 更新可能重新显示轨迹辅助线;加入录制锁,确保辅助线不进入导出画面。

验收证据

浏览器使用生产组件进行本地独立验收;测试页仅将画布保存与对象存储替换成本地适配器,不伪造 WebGL、时间轴或编码结果。本轮没有调用收费 AI 模型,也未重新验证生产数据库/对象存储的整条链路;原画布持久化和真实万相链路见 2026-09-16 验收记录。

检查 结果
环绕、推进与时间轴 浏览器真实播放,循环后仍持续播放;暂停及定位到终点有效
轨迹总览 相机切换到轨迹包围盒总览视角
自定义 JSON 导入 3 秒、2 个关键帧,位置与 FOV 参数生效
坏文件导入 显示无效数据提示,保留原轨迹
暂停时选择场景对象 预览不跳回编辑机位;场景区域像素对比无变化
关键帧更新 第二帧 FOV 改为 65° 并记录,完整刷新后恢复
首帧传递 从 0 秒机位生成 1280×720 PNG,回调收到首帧及 2 帧轨迹
横屏 MP4 1280×720,H.264,150 帧,4.998 秒,无音轨
播放中切换导出 1280×720,90 帧,3.0005 秒;从轨迹起点完整导出,画面无辅助线
竖屏 MP4 720×1280,H.264,90 帧,3.002 秒,无音轨
逐帧检查 对比初始、中间、结尾帧,视角连续变化,非静态图片录制
取消导出 浏览器中取消后恢复按钮与编辑状态,未出现成功产物
录制生命周期 自动化验证正常结束、取消、后台事件及渲染失败均释放轨道与帧回调
代码验证 TypeScript 源码检查通过;49 条定向回归测试通过

浏览器自动化的多标签切换未可靠触发页面可见性事件,因此后台处理依靠事件级回归验证,不将该次标签切换算作真实后台场景通过。下载链接已接入原生下载;本轮媒体文件通过组件上传回调留档,并用 FFprobe 核验。

本地 .qa/director-motion/ 留存测试 MP4、逐帧截图与探测结果,不提交生成文件和本地测试适配器。

AI 生成与真实轨迹的边界

真实 3D 导出使用配置的轨迹。当前阿里云首帧模型接入接收首帧与运镜文字,不接收可精确执行的相机轨迹参数,因此 AI 生成仍可能偏离预设,界面已明确说明。需要精确复现时使用“导出真实运镜视频”。AI 识图重建仍是独立的未接通能力,不属于本次运镜修复。