InsightCut 分镜素材包导出修改方案

1. 背景与问题

InsightCut 当前提供两类主要交付结果:

  1. 直接下载整片 MP4,用于查看、发布或交付成片。
  2. 下载剪映草稿 ZIP,或直接写入本机剪映草稿目录,用于继续精修。

实际创作中还存在第三类需求:用户不需要已经合成的成片,也不准备继续使用剪映时间轴,只希望拿到按播放顺序整理好的原始分镜图片和逐段配音,方便交给其他剪辑软件、同事或后续自动化流程继续处理。

项目后端已经具备任务资产记录和素材 ZIP 下载接口,但当前导出中心没有把它作为正式交付模式呈现;现有打包逻辑还可能混入重新生成的历史版本,也缺少明确的分镜对应表、完整性状态和稳定的交付目录规范。

因此,本次增加第三种正式交付方式:分镜素材包

2. 产品决策

2.1 三种交付方式并列

导出中心统一提供:

交付方式 核心用途 主要内容
MP4 成片 直接查看、发布 合成后的视频文件
剪映草稿 继续精修时间轴 剪映草稿、图片、配音、字幕和时间轴配置
分镜素材包 在其他工具中继续制作或归档 按顺序整理的当前分镜图片、逐段音频和对应清单

2.2 第一版采用的默认规则

3. 目标与非目标

3.1 目标

3.2 非目标

4. 目标用户与关键场景

4.1 目标用户

4.2 关键场景

  1. 完成视频后,用户下载全部当前分镜图片和逐段配音,在其他剪辑软件中重新搭建时间轴。
  2. 用户替换或重新生成某张图片后再次下载,素材包只包含最新选中的图片。
  3. 任务在第 8 个分镜后失败,用户下载当前已有的 8 张图片和 7 段音频,并从清单中看到缺失情况。
  4. 用户将素材包交给其他人,对方仅通过文件编号与清单即可恢复正确播放顺序。

5. 用户流程

  1. 用户从预览编辑页进入“导出中心”。
  2. 页面展示 MP4 成片、分镜素材包、剪映草稿三种交付方式。
  3. 分镜素材包卡片显示:
    • 当前图片数量;
    • 当前音频数量;
    • 分镜总数;
    • “素材完整”或“部分素材”状态。
  4. 用户点击“下载素材包 ZIP”。
  5. 后端基于点击时的任务快照,按 segment_index 重新校验当前文件并生成或复用 ZIP。
  6. 浏览器开始下载 <项目名>_素材包.zip
  7. 用户解压后,可通过相同序号配对图片和音频;缺失项可在清单中查看。

6. 文件包规范

6.1 目录结构

<安全项目名>_素材包/
├── images/
│   ├── 001.png
│   ├── 002.jpg
│   └── 003.webp
├── audio/
│   ├── 001.wav
│   ├── 002.mp3
│   └── 003.wav
├── metadata/
│   ├── storyboard.csv
│   ├── manifest.json
│   └── subtitles.srt
└── README.txt

6.2 排序与命名

6.3 storyboard.csv

使用带 UTF-8 BOM 的 CSV,确保中文可直接由常见表格工具打开。字段至少包括:

字段 说明
order 从 1 开始的播放顺序
segment_index 系统原始分镜索引
text 当前分镜文案
duration_seconds 当前分镜时长
image_file 包内图片相对路径,缺失则为空
audio_file 包内音频相对路径,缺失则为空
image_status 当前图片状态
audio_status 当前音频状态
voice_type 当前音频使用的音色标识

6.4 manifest.json

机器可读清单,至少包含:

{
  "schema_version": 1,
  "task_id": "...",
  "project_name": "...",
  "generated_at": "...",
  "segment_count": 3,
  "image_count": 3,
  "audio_count": 2,
  "complete": false,
  "missing_image_orders": [],
  "missing_audio_orders": [3],
  "segments": []
}

segments 中逐项记录序号、文案、时长、包内路径及素材状态。该文件只保存必要的项目交付信息,不写 API Key、本地绝对路径、VoiceClone DataURL 或其他凭证。

6.5 README.txt

说明:

7. 功能需求

P0:首版必须完成

P0-1 导出中心增加第三种交付卡片

P0-2 当前生效素材规则

P0-3 完整包与部分包

P0-4 确定性与一致性

P0-5 缓存与失效

P0-6 文件与安全约束

P1:建议后续补充

P2:暂不进入本次范围

8. UX 与页面布局

8.1 推荐布局

桌面端采用两层布局:

这样既让三种交付方式处于同一层级,又避免把剪映路径配置压缩进过窄的三列卡片。

平板与手机端按 MP4 → 分镜素材包 → 剪映草稿 单列排列,主按钮保持完整宽度。

8.2 状态设计

状态 展示 操作
状态读取中 骨架或“正在统计素材” 按钮禁用
素材完整 N 张图片 · N 段音频 · 素材完整 下载可用
部分素材 黄色提示和缺失数量 仍可下载
无素材 暂无可打包素材 按钮禁用
打包中 正在整理素材… 防止重复触发
下载就绪 浏览器开始下载 可再次下载
打包失败 保留其他两种交付方式,显示可读错误 允许重试

8.3 文案边界

9. 数据、API 与技术方案

9.1 现有能力

9.2 API 修改建议

扩展导出状态

GET /tasks/{task_id}/export-stateoutputs 下增加:

{
  "materials": {
    "available": true,
    "complete": false,
    "segment_count": 10,
    "image_count": 10,
    "audio_count": 8,
    "missing_image_orders": [],
    "missing_audio_orders": [4, 9],
    "snapshot_key": "..."
  }
}

如果任务尚无 MP4 或剪映草稿,但已经有分镜素材,接口仍应返回素材包状态,而不是因为草稿路径缺失整体返回 404。

这要求移除当前导出状态接口对 task.result.draft_path 的整体前置依赖:MP4 和剪映可以分别返回不可用,但素材包状态仍直接由 task_segments 计算。

新增素材包导出目标

现有素材下载接口保留为“素材库历史批量下载”,不直接改变它的产品语义。异步导出框架新增独立目标:

POST /tasks/{task_id}/exports
Content-Type: application/json

{
  "target": "materials"
}

新增正式素材包下载地址

建议增加只负责返回已完成正式交付包的下载地址:

GET /tasks/{task_id}/download-materials?snapshot_key=<snapshot_key>

响应:

9.3 后端结构建议

9.4 前端修改建议

10. 变更条件与兼容规则

条件 素材包行为
用户重新生成某张图片 下次下载使用新选中图片,旧图片不进入默认包
用户上传替换图片 使用当前上传图片并保留原扩展名
用户重新配音 使用当前音频,旧音频不进入默认包
调整分镜文案或时长 清单和字幕更新,缓存失效
调整分镜顺序 图片、音频和清单全部按新顺序重新编号
某个文件记录存在但本地丢失 生成部分包并标出缺失,不清空其他资产
任务为 failed 只要有可用素材就允许下载部分包
任务仍在生成 可下载点击时已有素材;页面明确这是当前快照
同时触发两次下载 复用同一快照结果或加任务级锁,不能产生损坏 ZIP
删除项目 素材包缓存随项目专属文件一起清理

11. 验收标准

  1. 导出中心可同时看到 MP4、分镜素材包、剪映草稿三种交付方式,三者用途文案不混淆。
  2. 一个包含 12 个完整分镜的任务下载后,images/audio/ 均按 001012 排列,同号文件对应同一分镜。
  3. 第 3 个分镜重新选择图片后再次下载,包内 images/003.* 为当前图片,旧图片不在默认包中。
  4. 第 4 个分镜缺少音频时仍能下载;包内没有 audio/004.*,清单明确标记第 4 段音频缺失,页面显示“部分素材”。
  5. 失败任务只要保留至少一个当前图片或音频,就能够下载已有素材。
  6. 完全没有图片和音频的任务不能触发空 ZIP 下载,页面显示“暂无可打包素材”。
  7. 分镜顺序变化后,所有编号、CSV、JSON 和 SRT 顺序同步变化。
  8. 同一任务存在多个重新生成历史素材时,每个分镜默认最多导出一张当前图片和一段当前音频。
  9. ZIP 内不存在绝对路径、上级目录引用、API Key、DataURL 或其他凭证。
  10. 大文件打包不会要求把整个 ZIP 长期保存在进程内存中;并发下载不会获得半成品。
  11. 原有 MP4 下载、草稿 ZIP 下载和写入本机剪映流程保持可用,相关回归测试通过。
  12. 桌面、平板和手机宽度下,三种交付方式均可读、可操作,剪映路径字段不会被第三张卡片挤压失真。

12. 测试重点

13. 成功指标与观测

首版不预设未经验证的数值目标。上线后至少记录以下本地事件或日志统计,以便评估:

日志不得包含完整敏感本地路径、凭证或音频 DataURL。

14. 风险、依赖与发布顺序

14.1 主要风险

14.2 依赖

14.3 推荐发布顺序

  1. 抽离并测试素材包构建服务,完成当前素材选择、排序、清单、安全和部分包逻辑。
  2. 扩展导出状态与素材下载 API,补充 API 测试。
  3. 在导出中心加入第三种交付卡片、状态和响应式布局。
  4. 回归 MP4、剪映草稿、失败资产保留与项目删除。
  5. 更新 README 中的产品能力和导出说明。

15. 待确认项

以下为本方案的推荐默认值,评审时可一次确认:

  1. 默认包只包含每个分镜当前选中的图片和音频,不包含历史版本。
  2. storyboard.csvmanifest.jsonsubtitles.srtREADME.txt 默认随包附带,不提供首版开关。
  3. 第三种模式名称使用“分镜素材包”,下载按钮使用“下载素材包 ZIP”。
  4. 失败或生成中的任务允许下载点击时已有的部分素材,并明确标记缺失项。