从 AI 生成片段到可编辑成片:开源视频编辑器 Timeline Studio 的工程实践 用户5557817 发布 2026-10-14 11:01:17 发布于 2026-10-14 11:01:17 概述 视频生成模型已经能够根据文字或参考图片生成片段。但在实际创作中,得到一段视频之后,往往还有不少工作:挑选镜头、调整顺序、裁切时长、添加配音和字幕,再输出完整作品。我们开发开源项目 Timeline Studio,希望把这些步骤放进一个能够持续编辑的工作流中。项目以浏览器多轨时间线为基础,逐步接入 AI 辅助编辑、素材生成和浏览器端导出。最近,Anna 版本完成了视频生成能力接入,ChatCut 也 视频生成模型已经能够根据文字或参考图片生成片段。但在实际创作中,得到一段视频之后,往往还有不少工作:挑选镜头、调整顺序、裁切时长、添加配音和字幕,再输出完整作品。 我们开发开源项目 Timeline Studio,希望把这些步骤放进一个能够持续编辑的工作流中。 项目以浏览器多轨时间线为基础,逐步接入 AI 辅助编辑、素材生成和浏览器端导出。最近,Anna 版本完成了视频生成能力接入,ChatCut 也已经可以使用。 本文从工程实现角度,介绍生成能力如何与编辑器衔接,以及自然语言编辑、异步任务和媒体导出之间需要处理的问题。 ## 一、把生成结果作为素材纳入工程 接入视频生成能力时,最直观的流程是: 输入提示词 → 调用模型 → 展示视频 但对于编辑器,这条链路还需要继续延伸: 提出创作需求 生成视频片段 获取媒体并加入素材库 选择片段,编排时间线 调整画面、声音与字幕 导出完整作品 这里有一个重要区别:生成任务完成,意味着获得了一个可用素材;是否使用它、放在哪里、保留多长,则属于编辑决策。 Timeline Studio 的生成连接器采用“结果先进入我的资产,再由用户选择使用”的方式。这样可以保留多个候选结果,也避免异步任务完成时突然改变正在编辑的时间线。 对于一次生成多个输出的服务,也需要明确获取哪些文件,并将它们分别纳入素材管理,而不能只展示一个临时结果地址。 ## 二、用连接器隔离不同服务的差异 不同生成服务的接口差异很大。 有的直接返回媒体,有的先返回任务 ID;有的需要轮询状态,有的提供进度事件;有的通过浏览器会话授权,有的需要独立的服务端连接层。 如果把这些差异直接写进编辑器主界面,随着服务增加,认证、请求、轮询和文件处理逻辑会越来越难维护。 Timeline Studio 将生成能力拆为独立的服务适配与共享宿主流程: 生成界面 共享注册与宿主 服务适配器 生成服务 下载媒体、检查类型 宿主提交到“我的资产” 服务适配器处理各自的协议,宿主负责统一接收媒体和提交资产。 项目中的 ComfyUI 与 Stable Diffusion WebUI 就采用不同的适配方式:前者围绕 API 格式工作流执行并跟踪任务,后者围绕提示词调用图像生成接口。它们共享素材接收流程,同时保留各自的配置与执行语义。 目前,这类连接器属于经过审阅、随源码集成的实现。扩展新服务时,需要同时完善能力声明、参数校验、状态处理和媒体回收流程。 ## 三、异步生成任务需要明确的状态边界 视频生成可能持续较长时间。界面需要准确区分: • 正在连接或授权。 • 已提交任务,等待执行。 • 服务正在生成。 • 正在下载结果。 • 媒体已加入素材库。 • 任务失败或取消。 这些状态不能合并成一个持续旋转的加载图标。 例如,服务已经完成生成,但结果下载失败,此时用户需要重试的是下载步骤。如果界面只显示“生成失败”,就容易引导用户重新提交任务。 另一个需要区分的是取消语义。停止客户端查询、取消本地下载,以及让远端服务停止生成,是不同动作。只有服务接口确认支持远端取消时,才能把它呈现为远端任务已取消。 工程上,我们更关注每个阶段实际完成了什么,以及失败后还能复用哪些结果。这样,长任务才有清晰的进度与恢复路径。 ## 四、自然语言通过结构化计划进入时间线 有了素材之后,用户可以继续提出编辑需求: >把第二个镜头放到开头,缩短第一段,再调整配音的位置。 执行这些需求,需要先读取当前工程,把自然语言中的对象解析成明确的片段 ID,再生成结构化编辑计划。 Timeline Studio 的共享命令层包含裁切、切分、排序、速度调整、字幕修改等操作。例如,裁切计划中的一个操作可以写成: "id": "trim-001", "type": "visual.trim", "clipId": "visual-123", "sourceIn": 2, "sourceOut": 6 这里的时间表示源素材区间,执行前还需要检查目标片段是否存在、裁切范围是否合法,以及工程状态是否发生变化。 模型输出的计划不会仅凭 JSON 格式正确就被视为可执行。项目提供语义预览,在当前工程上模拟操作,并展示实际的前后变化。 本地命令的典型流程是: npm run agent -- project.inspect /projects/input.timeline npm run agent -- project.diff /projects/plan.json npm run agent -- project.run /projects/plan.json `project.diff` 与正式执行复用命令注册和状态变换逻辑,但不写出工程包。这样,审阅结果能够直接对应执行器预计产生的变化。 ## 五、避免旧计划覆盖用户的新编辑 AI 规划和用户操作可能同时发生。 Agent 读取工程后,用户可能继续移动片段、修改字幕或切分视频。等计划返回时,原先的工程状态已经过期。 浏览器接口为读取到的状态提供 `stateToken`。提交编辑预览时需要携带它,预览成功后得到 `previewId`;正式应用前,再检查当前状态是否仍与预览匹配。 读取当前工程 基于 stateToken 生成预览 审阅 previewId 对应的变化 检查工程状态 应用并纳入正常编辑历史 如果工程发生变化,就需要重新读取和规划。 这使 AI 编辑能够与手动操作共同存在。用户可以让 AI 完成部分工作,再继续精修,而不会因为一次延迟返回的操作丢失当前修改。 ## 六、生成片段仍然需要统一的时间映射 生成的视频进入时间线后,与上传的视频一样,需要支持裁切、变速和重新排列。 这时必须区分源素材时间与时间线时间。 例如,一个片段使用源视频第 10~18 秒,以 2 倍速播放,那么它在时间线中持续 4 秒。播放头移动时,预览需要根据片段起点、裁切区间和播放速度找到对应源帧。 如果使用速度曲线,映射还需要累计速度随时间的变化。 这套关系影响的不只是播放:切分位置、分离音频、缩略图和最终导出都需要保持一致。否则,用户在时间线上看到的位置可能与导出结果不匹配。 因此,接入生成模型之后,编辑器原有的媒体时间模型依然是核心基础。 ## 七、浏览器预览与导出分别优化 Timeline Studio 的预览使用原生媒体路径,优先保证播放和定位的响应;导出使用独立的确定性离线渲染路径,按输出时间采样画面,并完成字幕、效果和音频混合。 两条路径的执行节奏不同,但需要共享编辑参数与时间映射的含义。 浏览器端处理也有资源限制。解码帧、合成画面和待编码数据不能无限积累,需要通过有界队列控制内存。 长视频缩略图同样采用渐进处理:先提供可用的初始覆盖,再优先细化当前可见区域。用户拖动播放头时,暂停后台缩略图任务,把资源交给实时预览。 这些细节决定了生成素材进入工程后,用户能否顺畅完成后续剪辑。 ## 八、当前进展与体验方式 目前,Timeline Studio 已经具备浏览器多轨编辑、AI 辅助创作和视频导出等能力,ChatCut 也已可以使用。 仓库所介绍的 Anna 版本已经接入 MiniMax H3、Seedance 2.5 等视频生成模型,欢迎体验。 具体入口与使用说明统一放在仓库中。 我们希望继续完善从生成素材、编辑计划到成片导出的衔接,让每一步都有明确状态,也让结果保留继续修改的空间。 源码、运行方式及体验入口: [GitHub:MartinDelophy/ai-video-editor](https://github.com/MartinDelophy/ai-video-editor) 视频生成模型已经能够根据文字或参考图片生成片段。但在实际创作中,得到一段视频之后,往往还有不少工作:挑选镜头、调整顺序、裁切时长、添加配音和字幕,再输出完整作品。 我们开发开源项目 Timeline Studio,希望把这些步骤放进一个能够持续编辑的工作流中。 项目以浏览器多轨时间线为基础,逐步接入 AI 辅助编辑、素材生成和浏览器端导出。最近,Anna 版本完成了视频生成能力接入,ChatCut 也已经可以使用。 本文从工程实现角度,介绍生成能力如何与编辑器衔接,以及自然语言编辑、异步任务和媒体导出之间需要处理的问题。 ## 一、把生成结果作为素材纳入工程 接入视频生成能力时,最直观的流程是: ``` 输入提示词 → 调用模型 → 展示视频 ``` 但对于编辑器,这条链路还需要继续延伸: ``` 提出创作需求 ↓ 生成视频片段 ↓ 获取媒体并加入素材库 ↓ 选择片段,编排时间线 ↓ 调整画面、声音与字幕 ↓ 导出完整作品 ``` 这里有一个重要区别:生成任务完成,意味着获得了一个可用素材;是否使用它、放在哪里、保留多长,则属于编辑决策。 Timeline Studio 的生成连接器采用“结果先进入我的资产,再由用户选择使用”的方式。这样可以保留多个候选结果,也避免异步任务完成时突然改变正在编辑的时间线。 对于一次生成多个输出的服务,也需要明确获取哪些文件,并将它们分别纳入素材管理,而不能只展示一个临时结果地址。 ## 二、用连接器隔离不同服务的差异 不同生成服务的接口差异很大。 有的直接返回媒体,有的先返回任务 ID;有的需要轮询状态,有的提供进度事件;有的通过浏览器会话授权,有的需要独立的服务端连接层。 如果把这些差异直接写进编辑器主界面,随着服务增加,认证、请求、轮询和文件处理逻辑会越来越难维护。 Timeline Studio 将生成能力拆为独立的服务适配与共享宿主流程: ``` 生成界面 ↓ 共享注册与宿主 ↓ 服务适配器 ↓ 生成服务 ↓ 下载媒体、检查类型 ↓ 宿主提交到“我的资产” ``` 服务适配器处理各自的协议,宿主负责统一接收媒体和提交资产。 项目中的 ComfyUI 与 Stable Diffusion WebUI 就采用不同的适配方式:前者围绕 API 格式工作流执行并跟踪任务,后者围绕提示词调用图像生成接口。它们共享素材接收流程,同时保留各自的配置与执行语义。 目前,这类连接器属于经过审阅、随源码集成的实现。扩展新服务时,需要同时完善能力声明、参数校验、状态处理和媒体回收流程。 ## 三、异步生成任务需要明确的状态边界 视频生成可能持续较长时间。界面需要准确区分: - 正在连接或授权。 - 已提交任务,等待执行。 - 服务正在生成。 - 正在下载结果。 - 媒体已加入素材库。 - 任务失败或取消。 这些状态不能合并成一个持续旋转的加载图标。 例如,服务已经完成生成,但结果下载失败,此时用户需要重试的是下载步骤。如果界面只显示“生成失败”,就容易引导用户重新提交任务。 另一个需要区分的是取消语义。停止客户端查询、取消本地下载,以及让远端服务停止生成,是不同动作。只有服务接口确认支持远端取消时,才能把它呈现为远端任务已取消。 工程上,我们更关注每个阶段实际完成了什么,以及失败后还能复用哪些结果。这样,长任务才有清晰的进度与恢复路径。 ## 四、自然语言通过结构化计划进入时间线 有了素材之后,用户可以继续提出编辑需求: >把第二个镜头放到开头,缩短第一段,再调整配音的位置。 执行这些需求,需要先读取当前工程,把自然语言中的对象解析成明确的片段 ID,再生成结构化编辑计划。 Timeline Studio 的共享命令层包含裁切、切分、排序、速度调整、字幕修改等操作。例如,裁切计划中的一个操作可以写成: ``` { "id": "trim-001", "type": "visual.trim", "clipId": "visual-123", "sourceIn": 2, "sourceOut": 6 } ``` 这里的时间表示源素材区间,执行前还需要检查目标片段是否存在、裁切范围是否合法,以及工程状态是否发生变化。 模型输出的计划不会仅凭 JSON 格式正确就被视为可执行。项目提供语义预览,在当前工程上模拟操作,并展示实际的前后变化。 本地命令的典型流程是: ``` npm run agent -- project.inspect /projects/input.timeline npm run agent -- project.diff /projects/plan.json npm run agent -- project.run /projects/plan.json ``` `project.diff` 与正式执行复用命令注册和状态变换逻辑,但不写出工程包。这样,审阅结果能够直接对应执行器预计产生的变化。 ## 五、避免旧计划覆盖用户的新编辑 AI 规划和用户操作可能同时发生。 Agent 读取工程后,用户可能继续移动片段、修改字幕或切分视频。等计划返回时,原先的工程状态已经过期。 浏览器接口为读取到的状态提供 `stateToken`。提交编辑预览时需要携带它,预览成功后得到 `previewId`;正式应用前,再检查当前状态是否仍与预览匹配。 ``` 读取当前工程 ↓ 基于 stateToken 生成预览 ↓ 审阅 previewId 对应的变化 ↓ 检查工程状态 ↓ 应用并纳入正常编辑历史 ``` 如果工程发生变化,就需要重新读取和规划。 这使 AI 编辑能够与手动操作共同存在。用户可以让 AI 完成部分工作,再继续精修,而不会因为一次延迟返回的操作丢失当前修改。 ## 六、生成片段仍然需要统一的时间映射 生成的视频进入时间线后,与上传的视频一样,需要支持裁切、变速和重新排列。 这时必须区分源素材时间与时间线时间。 例如,一个片段使用源视频第 10~18 秒,以 2 倍速播放,那么它在时间线中持续 4 秒。播放头移动时,预览需要根据片段起点、裁切区间和播放速度找到对应源帧。 如果使用速度曲线,映射还需要累计速度随时间的变化。 这套关系影响的不只是播放:切分位置、分离音频、缩略图和最终导出都需要保持一致。否则,用户在时间线上看到的位置可能与导出结果不匹配。 因此,接入生成模型之后,编辑器原有的媒体时间模型依然是核心基础。 ## 七、浏览器预览与导出分别优化 Timeline Studio 的预览使用原生媒体路径,优先保证播放和定位的响应;导出使用独立的确定性离线渲染路径,按输出时间采样画面,并完成字幕、效果和音频混合。 两条路径的执行节奏不同,但需要共享编辑参数与时间映射的含义。 浏览器端处理也有资源限制。解码帧、合成画面和待编码数据不能无限积累,需要通过有界队列控制内存。 长视频缩略图同样采用渐进处理:先提供可用的初始覆盖,再优先细化当前可见区域。用户拖动播放头时,暂停后台缩略图任务,把资源交给实时预览。 这些细节决定了生成素材进入工程后,用户能否顺畅完成后续剪辑。 ## 八、当前进展与体验方式 目前,Timeline Studio 已经具备浏览器多轨编辑、AI 辅助创作和视频导出等能力,ChatCut 也已可以使用。 仓库所介绍的 Anna 版本已经接入 MiniMax H3、Seedance 2.5 等视频生成模型,欢迎体验。 具体入口与使用说明统一放在仓库中。 我们希望继续完善从生成素材、编辑计划到成片导出的衔接,让每一步都有明确状态,也让结果保留继续修改的空间。 源码、运行方式及体验入口: [GitHub:MartinDelophy/ai-video-editor](https://github.com/MartinDelophy/ai-video-editor) 视频生成模型已经能够根据文字或参考图片生成片段。但在实际创作中,得到一段视频之后,往往还有不少工作:挑选镜头、调整顺序、裁切时长、添加配音和字幕,再输出完整作品。 我们开发开源项目 Timeline Studio ,希望把这些步骤放进一个能够持续编辑的工作流中。 项目以浏览器多轨时间线为基础,逐步接入 AI 辅助编辑、素材生成和浏览器端导出。最近,Anna 版本完成了视频生成能力接入,ChatCut 也已经可以使用。 本文从工程实现角度,介绍生成能力如何与编辑器衔接,以及自然语言编辑、异步任务和媒体导出之间需要处理的问题。 ## 一、把生成结果作为素材纳入工程 接入视频生成能力时,最直观的流程是: 输入提示词 → 调用模型 → 展示视频 但对于编辑器,这条链路还需要继续延伸: 提出创作需求 生成视频片段 获取媒体并加入素材库 选择片段,编排时间线 调整画面、声音与字幕 导出完整作品 这里有一个重要区别:生成任务完成,意味着获得了一个可用素材;是否使用它、放在哪里、保留多长,则属于编辑决策。 Timeline Studio 的生成连接器采用“结果先进入我的资产,再由用户选择使用”的方式。这样可以保留多个候选结果,也避免异步任务完成时突然改变正在编辑的时间线。 对于一次生成多个输出的服务,也需要明确获取哪些文件,并将它们分别纳入素材管理,而不能只展示一个临时结果地址。 ## 二、用连接器隔离不同服务的差异 不同生成服务的接口差异很大。 有的直接返回媒体,有的先返回任务 ID;有的需要轮询状态,有的提供进度事件;有的通过浏览器会话授权,有的需要独立的服务端连接层。 如果把这些差异直接写进编辑器主界面,随着服务增加,认证、请求、轮询和文件处理逻辑会越来越难维护。 Timeline Studio 将生成能力拆为独立的服务适配与共享宿主流程: 生成界面 共享注册与宿主 服务适配器 生成服务 下载媒体、检查类型 宿主提交到“我的资产” 服务适配器处理各自的协议,宿主负责统一接收媒体和提交资产。 项目中的 ComfyUI 与 Stable Diffusion WebUI 就采用不同的适配方式:前者围绕 API 格式工作流执行并跟踪任务,后者围绕提示词调用图像生成接口。它们共享素材接收流程,同时保留各自的配置与执行语义。 目前,这类连接器属于经过审阅、随源码集成的实现。扩展新服务时,需要同时完善能力声明、参数校验、状态处理和媒体回收流程。 ## 三、异步生成任务需要明确的状态边界 视频生成可能持续较长时间。界面需要准确区分: • 正在连接或授权。 • 已提交任务,等待执行。 • 服务正在生成。 • 正在下载结果。 • 媒体已加入素材库。 • 任务失败或取消。 这些状态不能合并成一个持续旋转的加载图标。 例如,服务已经完成生成,但结果下载失败,此时用户需要重试的是下载步骤。如果界面只显示“生成失败”,就容易引导用户重新提交任务。 另一个需要区分的是取消语义。停止客户端查询、取消本地下载,以及让远端服务停止生成,是不同动作。只有服务接口确认支持远端取消时,才能把它呈现为远端任务已取消。 工程上,我们更关注每个阶段实际完成了什么,以及失败后还能复用哪些结果。这样,长任务才有清晰的进度与恢复路径。 ## 四、自然语言通过结构化计划进入时间线 有了素材之后,用户可以继续提出编辑需求: >把第二个镜头放到开头,缩短第一段,再调整配音的位置。 执行这些需求,需要先读取当前工程,把自然语言中的对象解析成明确的片段 ID,再生成结构化编辑计划。 Timeline Studio 的共享命令层包含裁切、切分、排序、速度调整、字幕修改等操作。例如,裁切计划中的一个操作可以写成: "id": "trim-001", "type": "visual.trim", "clipId": "visual-123", "sourceIn": 2, "sourceOut": 6 这里的时间表示源素材区间,执行前还需要检查目标片段是否存在、裁切范围是否合法,以及工程状态是否发生变化。 模型输出的计划不会仅凭 JSON 格式正确就被视为可执行。项目提供语义预览,在当前工程上模拟操作,并展示实际的前后变化。 本地命令的典型流程是: npm run agent -- project.inspect /projects/input.timeline npm run agent -- project.diff /projects/plan.json npm run agent -- project.run /projects/plan.json ` project.diff ` 与正式执行复用命令注册和状态变换逻辑,但不写出工程包。这样,审阅结果能够直接对应执行器预计产生的变化。 ## 五、避免旧计划覆盖用户的新编辑 AI 规划和用户操作可能同时发生。 Agent 读取工程后,用户可能继续移动片段、修改字幕或切分视频。等计划返回时,原先的工程状态已经过期。 浏览器接口为读取到的状态提供 ` stateToken `。提交编辑预览时需要携带它,预览成功后得到 ` previewId `;正式应用前,再检查当前状态是否仍与预览匹配。 读取当前工程 基于 stateToken 生成预览 审阅 previewId 对应的变化 检查工程状态 应用并纳入正常编辑历史 如果工程发生变化,就需要重新读取和规划。 这使 AI 编辑能够与手动操作共同存在。用户可以让 AI 完成部分工作,再继续精修,而不会因为一次延迟返回的操作丢失当前修改。 ## 六、生成片段仍然需要统一的时间映射 生成的视频进入时间线后,与上传的视频一样,需要支持裁切、变速和重新排列。 这时必须区分源素材时间与时间线时间。 例如,一个片段使用源视频第 10~18 秒,以 2 倍速播放,那么它在时间线中持续 4 秒。播放头移动时,预览需要根据片段起点、裁切区间和播放速度找到对应源帧。 如果使用速度曲线,映射还需要累计速度随时间的变化。 这套关系影响的不只是播放:切分位置、分离音频、缩略图和最终导出都需要保持一致。否则,用户在时间线上看到的位置可能与导出结果不匹配。 因此,接入生成模型之后,编辑器原有的媒体时间模型依然是核心基础。 ## 七、浏览器预览与导出分别优化 Timeline Studio 的预览使用原生媒体路径,优先保证播放和定位的响应;导出使用独立的确定性离线渲染路径,按输出时间采样画面,并完成字幕、效果和音频混合。 两条路径的执行节奏不同,但需要共享编辑参数与时间映射的含义。 浏览器端处理也有资源限制。解码帧、合成画面和待编码数据不能无限积累,需要通过有界队列控制内存。 长视频缩略图同样采用渐进处理:先提供可用的初始覆盖,再优先细化当前可见区域。用户拖动播放头时,暂停后台缩略图任务,把资源交给实时预览。 这些细节决定了生成素材进入工程后,用户能否顺畅完成后续剪辑。 ## 八、当前进展与体验方式 目前,Timeline Studio 已经具备浏览器多轨编辑、AI 辅助创作和视频导出等能力,ChatCut 也已可以使用。 仓库所介绍的 Anna 版本已经接入 MiniMax H3、Seedance 2.5 等视频生成模型,欢迎体验。 具体入口与使用说明统...