InsightCut 按需预览与成片导出修改方案
- 状态:待评审
- 日期:2026-08-16
- 版本:V1.0
- 涉及模块:任务流水线、预览编辑页、导出中心、FFmpeg 渲染、任务状态
1. 背景与问题
InsightCut 当前在图片、配音和剪映草稿完成后,会继续执行一次完整 FFmpeg 视频合成,只有完整 MP4 生成后任务才标记为完成。用户进入预览编辑页后,如果修改图片、文案、配音或比例,原成片会失效;用户再点击“生成最终预览”时,又会执行一次完整渲染。
这会产生两个问题:
- 用户必须等待默认 MP4 合成结束,才能看到任务完成并开始后续操作。
- 对需要继续修改、只下载素材包或只使用剪映草稿的用户,默认生成的 MP4 可能完全不会被使用。
本地历史日志中,16 个真实任务的视频合成耗时为 5–190 秒,中位数约 38.5 秒、平均约 60 秒;在可计算完整总耗时的任务中,视频合成平均占总流程约 23%。因此,取消默认成片渲染可以直接缩短“素材生成完成到进入编辑”的等待时间。
2. 产品决策
2.1 采用两层预览
| 层级 | 用户看到的能力 | 是否生成 MP4 | 适用场景 |
|---|---|---|---|
| 即时预览 | 浏览器连续播放分镜图片、字幕和逐段音频 | 否 | 快速检查内容、顺序、配音和素材 |
| 高保真预览 | 完整展示最终动画、字幕样式、画布比例和编码效果 | 是 | 导出前确认最终效果 |
默认只提供即时预览,不在任务尾部自动生成完整视频。高保真预览由用户按需生成。
2.2 高保真预览与正式 MP4 共用一次渲染
- 高保真预览不是另一条独立视频生产链路,而是当前任务快照的正式渲染产物。
- 用户生成高保真预览后,如果素材和配置没有变化,点击导出 MP4 必须直接复用该文件,不再次执行 FFmpeg。
- 用户没有生成高保真预览时,点击“生成并下载 MP4”执行一次渲染,完成后既可下载,也可作为后续高保真预览使用。
- 同一任务快照最多需要执行一次完整渲染。
2.3 默认任务完成边界
新任务完成以下内容后即可标记为 completed 并进入预览编辑页:
- 分镜文案与图片提示词已保存;
- 当前分镜图片和配音已生成或已记录失败状态;
- 当前素材已写入任务分镜和资产记录;
- 可编辑剪映草稿已构建;
- 剪映草稿 ZIP 的现有默认行为保持不变。
完整 MP4 不再属于默认任务完成条件,而属于后续独立导出任务。
3. 目标与非目标
3.1 目标
- 素材准备完成后,用户无需等待 FFmpeg 即可进入预览编辑。
- 用户能够连续播放全部分镜,而不是只能手动逐张点击。
- 用户可以按需检查最终动画和字幕效果。
- 高保真预览和正式 MP4 不重复渲染。
- 不需要 MP4 的用户不消耗完整视频编码时间和磁盘空间。
- 素材发生变化后不会下载到过期视频。
3.2 非目标
- 首版不实现服务端低清代理视频自动生成。
- 首版不要求即时预览完全还原 Ken Burns 动画、FFmpeg 字幕抗锯齿或最终编码效果。
- 不改变图片生成、TTS、分镜素材包和剪映草稿的内容规则。
- 不删除 MP4 导出能力,也不降低正式导出的分辨率或质量。
- 不自动为所有任务生成高保真预览。
4. 目标用户与关键场景
- 用户生成任务后立即进入预览页,连续检查图片、文案、配音和顺序,再决定是否需要成片。
- 用户只下载分镜素材包,不等待也不生成 MP4。
- 用户只导入剪映草稿,不等待也不生成 MP4。
- 用户点击“生成高保真预览”确认动画效果,确认后下载同一份 MP4。
- 用户跳过高保真预览,直接点击“生成并下载 MP4”,等待一次渲染后下载。
- 用户生成高保真预览后替换图片或重新配音,系统提示预览已过期,并在再次导出时重新渲染。
5. 用户流程
5.1 默认生成流程
- 用户创建视频任务。
- 系统生成文案、图片提示词、图片和逐段配音。
- 系统保存分镜与当前素材并构建剪映草稿。
- 任务标记完成,不执行完整视频合成。
- 用户进入预览编辑页,即时预览自动可用。
5.2 即时预览流程
- 用户点击播放。
- 页面从当前分镜开始播放对应音频。
- 音频结束后自动进入下一分镜并更新图片、字幕和时间位置。
- 用户可暂停、拖动到指定分镜、上一段或下一段。
- 即时预览不创建服务器端视频文件。
5.3 高保真预览流程
- 用户点击“生成高保真预览”。
- 系统创建异步渲染任务并展示进度状态。
- 渲染完成后页面切换为完整视频播放器。
- 用户可以播放、暂停和拖动完整视频。
- 该视频记录当前素材与渲染配置快照,可直接用于正式下载。
5.4 MP4 导出流程
- 存在有效高保真预览:按钮显示“下载 MP4”,直接下载当前渲染文件。
- 不存在高保真预览:按钮显示“生成并下载 MP4”,渲染完成后自动开始下载。
- 高保真预览已过期:按钮显示“重新生成并下载”,不能下载旧文件冒充当前成片。
6. 功能需求
P0-1 默认不生成完整视频
- 从默认任务执行器中移除自动 FFmpeg 视频合成和视频上传。
- 默认任务结果允许
video_url为空。 - 新任务不能因为没有 MP4 而被标记为失败、未完成或不可编辑。
- 分镜最终数据必须在任务完成前保存,不能继续依赖视频合成步骤结束后再入库。
- 任务进度不再把“视频合成”作为默认必经步骤。
P0-2 即时连续预览
- 预览页使用当前分镜图片、字幕文案和逐段音频连续播放。
- 音频结束后自动推进到下一分镜,最后一段结束后停止。
- 无音频分镜按当前分镜时长或默认时长推进,并明确显示“该段无配音”。
- 某张图片缺失时显示占位状态,但不能导致整个预览页崩溃。
- 用户切换分镜、修改素材或离开页面时必须正确停止旧音频和计时器。
- 即时预览应明确标注“内容预览”,避免用户误认为它完全等同于最终成片。
P0-3 按需高保真预览
- “生成最终预览”更名为“生成高保真预览”。
- 点击后通过异步任务执行完整 FFmpeg 渲染,避免长请求阻塞页面。
- 页面展示等待、渲染中、可播放、失败、已过期五种状态。
- 渲染失败不影响图片、音频、文案、剪映草稿和素材包。
- 同一任务快照存在进行中的预览或 MP4 渲染任务时,不允许再创建重复渲染任务。
P0-4 单一渲染产物复用
- 高保真预览与正式 MP4 使用相同画布、帧率、字幕、动画种子和编码配置。
- 渲染产物保存统一的
snapshot_key或媒体指纹。 - 导出 MP4 时如果快照一致,直接复用现有文件,不重新编码。
- 用户直接生成 MP4 后,该文件同时成为当前高保真预览。
- 首版允许通过复制、硬链接或同文件不同下载名称交付,但不能再次执行 FFmpeg。
P0-5 失效规则
以下任一变化后,当前高保真预览和 MP4 状态必须变为“已过期”:
- 分镜增加、删除或排序变化;
- 分镜文案或时长变化;
- 当前图片变化;
- 当前音频或音色参数变化;
- 视频比例、画布、帧率、字幕样式或动画配置变化;
- 对应本地文件发生替换或丢失。
旧文件可以保留用于清理或历史追踪,但默认播放与下载入口不能继续把它标记为当前成片。
P0-6 导出中心状态与操作
- MP4 状态由“默认可下载”改为以下三种主要状态:
未生成;可下载;已过期。
- 未生成时主操作为“生成并下载 MP4”。
- 有效时主操作为“下载 MP4”,次操作为“重新生成”。
- 已过期时主操作为“重新生成并下载”。
- 分镜素材包与剪映草稿不受 MP4 状态限制,可以独立下载或写入。
P1 建议后续补充
- 根据设备性能提供低分辨率代理预览,例如 540p 或 720p,以更低成本预览动画。
- 对较长视频显示预计渲染时间。
- 缓存逐段渲染片段,只重新编码发生变化的分镜,再无损拼接完整视频。
- 支持后台渲染完成后的系统通知。
7. UX 状态
| 状态 | 预览页展示 | 导出中心展示 |
|---|---|---|
| 素材生成中 | 当前已保存素材或生成进度 | 导出操作按现有素材可用性决定 |
| 即时预览可用 | 内容预览,播放图片、字幕和音频 |
MP4 未生成 |
| 高保真预览生成中 | 进度提示,仍可编辑或使用即时预览 | MP4 生成中,禁止重复提交 |
| 高保真预览可用 | 切换到完整视频播放器 | MP4 可下载 |
| 高保真预览已过期 | 黄色提示,默认回到即时预览 | MP4 已过期 |
| 渲染失败 | 显示错误并允许重试,即时预览仍可用 | MP4 生成失败,素材包与草稿继续可用 |
移动端保持相同状态语义;即时预览播放器、生成按钮和导出按钮必须可单列显示,不依赖桌面悬停操作。
8. 数据、API 与技术约束
8.1 任务数据
- 默认任务完成时保存
draft_path、draft_url和分镜数量,video_url允许为空。 - 将正式视频视为可失效的派生产物,不作为原始任务资产完成的必要条件。
- 现有旧任务已经生成的 MP4 保持可用,不做批量删除或迁移。
8.2 渲染状态
建议统一现有最终预览与 MP4 状态,至少包含:
{
"render": {
"status": "missing | pending | processing | ready | stale | failed",
"snapshot_key": "...",
"video_path": "...",
"video_url": "...",
"created_at": "...",
"error": null
}
}
现有预览 manifest 可以继续作为基础,但媒体指纹需覆盖字幕样式、动画配置和渲染参数,而不只覆盖素材路径。
8.3 API 行为
- 高保真预览改为异步渲染任务,或复用现有异步导出任务框架。
POST /tasks/{task_id}/exports { "target": "mp4" }:有效产物存在时复用,否则生成一次。- 导出任务需要任务级互斥锁,避免用户同时点击预览和导出造成重复编码。
GET /tasks/{task_id}/export-state同时返回即时预览可用性、渲染状态和 MP4 下载状态。- 下载接口在当前产物已过期时返回明确冲突状态,不能静默下载旧版本。
8.4 清理规则
- 删除任务时同步删除渲染产物、预览 manifest 和导出缓存。
- 重新渲染成功后可清理旧的过期视频;清理失败不影响新视频交付。
- 进行中的渲染不能读取已被替换或删除的素材快照。
9. 验收标准
- 创建新任务后,任务目录和任务结果中不会自动出现正式 MP4,
video_url为空仍可正常完成。 - 图片和音频准备完成后,用户可立即进入预览页连续播放所有分镜。
- 未生成视频时,用户仍可下载分镜素材包和使用剪映草稿。
- 点击“生成高保真预览”只执行一次 FFmpeg,完成后可以在页面播放完整视频。
- 在高保真预览有效时点击“下载 MP4”,不会再次触发 FFmpeg。
- 没有高保真预览时点击“生成并下载 MP4”,只渲染一次并在完成后开始下载。
- 同一快照下同时触发预览与导出,不会出现两个并行 FFmpeg 任务。
- 修改任一分镜图片、音频、文案或视频比例后,旧视频立即显示为“已过期”。
- 渲染失败后即时预览、素材包、剪映草稿和已生成资产仍可使用。
- 旧任务已有 MP4 仍可正常查看和下载。
10. 成功指标
- 记录“素材生成完成到任务可编辑”的耗时,并与现有包含视频合成的任务总耗时对比。
- 记录新任务中生成高保真预览或 MP4 的比例,用于衡量被省略的无效渲染数量。
- 记录单一任务同一快照的 FFmpeg 执行次数,目标为不超过一次。
- 记录按需渲染失败率和用户重试率。
- 首版上线后再基于真实数据确定具体性能目标,不在本 PRD 中预设未经验证的数值。
11. 风险、依赖与上线策略
11.1 风险
- 即时预览不能完全还原最终动画和字幕编码效果,必须通过文案明确其定位。
- 用户直接点击 MP4 导出时,需要在导出阶段承担完整渲染等待。
- 当前任务步骤、进度展示和恢复逻辑都包含
video_synthesis,不能只删除 FFmpeg 调用而不调整任务状态。 - 当前分镜最终入库位于视频合成之后,开发时必须先调整保存顺序。
11.2 依赖
- 复用现有 FFmpeg 导出器、媒体指纹和异步导出任务。
- 复用预览页现有图片、字幕和逐段音频连续播放能力。
- 复用任务失败保资产和素材包独立导出的规则。
11.3 上线策略
- 先通过后端配置开关关闭新任务默认 MP4,保留快速回退能力。
- 验证新任务完成、任务恢复、旧任务兼容和三种导出方式。
- 观察任务完成耗时、按需渲染比例和失败率。
- 数据稳定后移除旧的默认成片流程和临时配置开关。
12. 当前结论与待确认项
已确认
- 默认任务不直接生成完整 MP4。
- 用户必须能够预览全部内容。
- 默认采用无需服务端视频编码的即时连续预览。
- 需要最终动画确认时再生成高保真预览。
- 高保真预览与正式 MP4 必须共用同一次渲染结果。
非阻塞待确认
- 即时预览无音频分镜的默认停留时间继续使用当前系统默认值,还是后续增加逐段时长编辑;首版可沿用当前值。
- 高保真预览生成后是否自动切换播放器并自动播放;首版建议自动切换但不自动播放,避免浏览器播放策略和声音打扰。