开源视频编辑器 Timeline Studio 区分媒体资产与片段实例,让智能体先检查项目结构,再将自然语言指令解析到稳定的片段 ID。文章还讨论可审查命令、状态令牌与浏览器导出的架构设计,并提供仓库示例。
披露:我参与开发本文讨论的开源编辑器 Timeline Studio。本文在 AI 的辅助下完成。
生成的视频镜头即使很漂亮,也可能还需要再剪一刀。开场拖得太久,旁白出现得太晚,或者整个序列需要换个顺序。
我们正在围绕这些接下来的创作决策构建 Timeline Studio:一款浏览器视频编辑器,让生成的媒体和 Agent 辅助操作成为可编辑多轨项目的一部分。
下面介绍其命令接口背后的架构选择,并提供一个可以在仓库中跟着操作的小例子。

截图来自仓库;当前版本的界面细节可能有所不同。
同一个源视频可以在一个项目中出现多次,每次使用不同的裁剪范围、播放速度、变换或效果。素材标识媒体本身;片段标识对这份媒体的一次使用。
当用户说“把第二个镜头移到最前面”时,Agent 首先需要结合当前序列,确定这句话指的是哪个片段。执行时再以稳定的片段 ID 为目标,而不是文件名或屏幕坐标。
Timeline Studio 提供项目、轨道和片段的检查能力。Agent 可以先读取整体结构,再请求相关对象。检查元数据与理解画面、转录语音是不同的事情;后两者需要各自的处理流程。
本地命令接口接受带版本号的 JSON 计划。下面的例子仅用于说明:修订版本、片段 ID 和源素材范围都必须与检查过的项目一致。
{
"schemaVersion": 1,
"project": "/projects/input.timeline",
"baseRevision": 12,
"dryRun": false,
"operations": [
{
"id": "trim-001",
"type": "visual.trim",
"clipId": "visual-123",
"sourceIn": 2,
"sourceOut": 6
}
],
"output": {
"project": "/projects/output.timeline"
}
}
计划的外层结构声明了它所依据的项目修订版本,标识各项操作,并指定新的输出路径。具体操作则明确说明要保留源素材的哪一段。
规划负责理解请求。执行负责落实受支持的操作和项目约束。这样的边界也让非对话式工具能够生成相同的计划。
合法的 JSON 也可能描述一个无法完成的编辑操作。片段可能已经不存在,源素材范围可能无效,或者轨道可能已被锁定。
我们将传输数据的结构校验与结合项目状态的校验分开。语义层面的 dry run 使用共享的命令注册表和状态变换,预测实际结果,但不写入项目归档文件。
本地工作流程如下:
npm run agent -- project.inspect /projects/input.timeline
npm run agent -- project.diff /projects/plan.json
npm run agent -- project.run /projects/plan.json
diff 会报告项目字段、片段、时间安排和时长预计发生的变化,让审阅结果与实际执行有了具体的对应关系。本地写入器要求使用新的输出路径,从而保留输入项目。
即使只有一位人类用户,也会出现并发问题:
Agent 检查项目。
用户拆分或移动了一个片段。
Agent 返回一份基于先前状态的计划。
浏览器接口使用 state token,将准备好的操作绑定到检查时的状态。经过审阅的编辑操作会获得一个 preview ID。应用操作时,会检查编辑器是否仍与审阅时的快照一致;如果不一致,Agent 就必须重新检查并制定计划。
成功执行的编辑操作会进入编辑器常规的历史记录机制,用户可以继续调整,也可以撤销。
项目提供 CLI、随包附带的 STDIO MCP 适配器,以及浏览器 WebMCP 接口。如果裁剪、排序和链接处理各自实现一套,就容易出现行为不一致。
CLI 和 MCP 适配器使用同一个应用服务。浏览器适配器会将经过审阅的操作编译为共享命令引擎可执行的命令,再通过编辑器提交。
能力边界仍然很重要。浏览器具备实时媒体访问、推理任务和完整的编辑器导出流程。本地渲染器支持的是一组明确界定、可跨环境使用的功能子集,并会拒绝不受支持的合成方式。
不同生成服务提供商的授权方式、任务协议和输出格式各不相同。集成在源码中的适配器负责各服务特有的传输逻辑;共享宿主接收下载的媒体,并将其提交到 My assets。
生成完成后,不会自动将素材插入时间线。创作者可能想先比较不同候选结果。这也能防止长时间运行的任务意外修改正在编辑的项目。
应分别跟踪提交、生成、下载和素材提交这几个阶段。生成成功但下载失败,与生成本身失败,需要采用不同的恢复方式。停止轮询本身也不会取消远程任务。
源素材中第 10 秒到第 18 秒的区间,以 2× 速度播放时,会占用四秒的时间线时长。对于恒定速度:
source time = source in + clip-local time × playback speed
速度曲线需要随时间累积不断变化的速率。预览、拆分、缩略图和导出都需要遵循相同的时间映射。
Timeline Studio 使用原生媒体处理路径提供响应迅速的播放体验,并使用独立、确定性的离线渲染路径进行导出,其中包含基于 WebCodecs 的合成和兼容性回退方案。具体可用性取决于浏览器和设备。
资源调度同样重要:缩略图采用渐进式准备,可见区域优先处理,拖动播放位置时暂停后台细化处理。有界处理队列能避免吞吐量的提升变成不受控制的内存增长。
ChatCut 已经可以使用,Anna 版本包含视频生成集成。仓库中记录了它们的配置方法和体验入口。托管生成服务与浏览器本地处理是两回事。
如果你正在构建类似系统,命令契约和浏览器适配器是很好的起点。目标是在每一次交接中,都保留一个结构清晰、可理解的项目:从请求到计划,从计划到经过审阅的操作,再从可编辑状态到渲染输出。
可以前往 GitHub 查看 Timeline Studio 的源码和文档。
在面向 Agent 的编辑契约中,你会优先纳入哪一项:时间处理、媒体身份,还是事务处理?
如果要采取进一步行动,你可以考虑屏蔽此人,以及/或者举报滥用行为。