feat: 视频库自动匹配自动触发 + 预览视频随机选素材和片段 #1256

Closed
opened 2026-08-07 12:46:08 +08:00 by xiaoxia · 1 comment
Owner

需求描述

当用户在智能剪辑流程中选择「选择视频库自动匹配」并选定视频库后,系统应默认自动触发 AI 素材匹配,无需用户再额外点击「让AI帮你选」按钮。同时生成预览视频时,系统应从视频库中随机选取素材和片段,避免每次结果完全相同。

当前问题

问题1:选择视频库后需要额外点击「让AI帮你选」

用户选择视频库后,需要额外点击「让AI帮你选」按钮才能触发 AI 选素材,操作冗余。

问题2:预览视频每次素材和片段完全相同(经代码核实确认)

根因链路

  • distribute_assets() 按固定顺序分配素材:asset[0]→clip[0]、asset[1]→clip[1]... 无随机逻辑
  • EditPlanClip.start_time 硬编码为 0duration 固定 5.0
  • 渲染时 trim=start=0:duration=5.0,每次都从素材第 0 秒截取前 5 秒
  • 结果:3 个素材 111/222/333,每次预览都是 111的05秒 + 222的05秒 + 333的0~5秒

涉及文件

  • packages/domain/plan_generator_utils.pydistribute_assets() 按顺序分配,无随机
  • packages/domain/edit_plan_clip.pyassign_asset() 只设 asset_id,不设 start_time
  • apps/api/app/services/plan_generator_service.pygenerate_from_template() 调用链
  • apps/worker/video_processing/unified_render_service.py — 渲染时 trim start_time

期望行为

  1. 自动触发 AI 匹配:用户选择视频库后,系统自动调用 /assets/smart-match 接口进行素材匹配,不再需要手动点击「让AI帮你选」
  2. 预览视频随机选素材:生成预览视频时,系统从视频库中随机选取素材
  3. 预览视频随机截取片段:每个素材从随机时间点开始截取,而非固定从头取

验收标准

  • 选择「选择视频库自动匹配」Tab 后,选定视频库即自动触发 AI 匹配
  • 不再出现「让AI帮你选」按钮(或按钮变为状态展示如「AI 正在匹配...」)
  • 生成预览视频时,每次从视频库中随机选取素材组合
  • 每个素材的截取起点为随机时间点,而非固定 start_time=0
  • 匹配结果正常展示在素材列表中

涉及文件

前端

  • apps/web/src/pages/generate/components/ 下素材选择相关组件(Step2/Step3)
  • 视频库选择 Tab 和「让AI帮你选」按钮所在组件
  • apps/web/src/pages/generate/hooks/useStep3Preview.ts — 预览生成逻辑

后端

  • apps/api/app/api/routes/assets.py/assets/smart-match 端点
  • packages/domain/plan_generator_utils.pydistribute_assets() 需加入随机逻辑
  • packages/domain/edit_plan_clip.pyassign_asset() 需同时设置随机 start_time
  • apps/api/app/services/plan_generator_service.py — 预览生成时随机选素材
  • apps/worker/video_processing/unified_render_service.py — 渲染已支持 start_time,无需改动

优先级

P1 — 影响核心用户流程体验

## 需求描述 当用户在智能剪辑流程中选择「选择视频库自动匹配」并选定视频库后,系统应默认自动触发 AI 素材匹配,无需用户再额外点击「让AI帮你选」按钮。同时生成预览视频时,系统应从视频库中随机选取素材和片段,避免每次结果完全相同。 ## 当前问题 ### 问题1:选择视频库后需要额外点击「让AI帮你选」 用户选择视频库后,需要额外点击「让AI帮你选」按钮才能触发 AI 选素材,操作冗余。 ### 问题2:预览视频每次素材和片段完全相同(经代码核实确认) **根因链路**: - `distribute_assets()` 按固定顺序分配素材:asset[0]→clip[0]、asset[1]→clip[1]... 无随机逻辑 - `EditPlanClip.start_time` 硬编码为 `0`,`duration` 固定 `5.0` - 渲染时 `trim=start=0:duration=5.0`,每次都从素材第 0 秒截取前 5 秒 - 结果:3 个素材 111/222/333,每次预览都是 111的0~5秒 + 222的0~5秒 + 333的0~5秒 **涉及文件**: - `packages/domain/plan_generator_utils.py` — `distribute_assets()` 按顺序分配,无随机 - `packages/domain/edit_plan_clip.py` — `assign_asset()` 只设 asset_id,不设 start_time - `apps/api/app/services/plan_generator_service.py` — `generate_from_template()` 调用链 - `apps/worker/video_processing/unified_render_service.py` — 渲染时 trim start_time ## 期望行为 1. **自动触发 AI 匹配**:用户选择视频库后,系统自动调用 `/assets/smart-match` 接口进行素材匹配,不再需要手动点击「让AI帮你选」 2. **预览视频随机选素材**:生成预览视频时,系统从视频库中随机选取素材 3. **预览视频随机截取片段**:每个素材从随机时间点开始截取,而非固定从头取 ## 验收标准 - [ ] 选择「选择视频库自动匹配」Tab 后,选定视频库即自动触发 AI 匹配 - [ ] 不再出现「让AI帮你选」按钮(或按钮变为状态展示如「AI 正在匹配...」) - [ ] 生成预览视频时,每次从视频库中随机选取素材组合 - [ ] 每个素材的截取起点为随机时间点,而非固定 start_time=0 - [ ] 匹配结果正常展示在素材列表中 ## 涉及文件 ### 前端 - `apps/web/src/pages/generate/components/` 下素材选择相关组件(Step2/Step3) - 视频库选择 Tab 和「让AI帮你选」按钮所在组件 - `apps/web/src/pages/generate/hooks/useStep3Preview.ts` — 预览生成逻辑 ### 后端 - `apps/api/app/api/routes/assets.py` — `/assets/smart-match` 端点 - `packages/domain/plan_generator_utils.py` — `distribute_assets()` 需加入随机逻辑 - `packages/domain/edit_plan_clip.py` — `assign_asset()` 需同时设置随机 start_time - `apps/api/app/services/plan_generator_service.py` — 预览生成时随机选素材 - `apps/worker/video_processing/unified_render_service.py` — 渲染已支持 start_time,无需改动 ## 优先级 P1 — 影响核心用户流程体验
xiaoxia added this to the Phase 9 - 视频生成与导出 milestone 2026-08-07 12:46:08 +08:00
xiaoxia added the frontendP1feature labels 2026-08-07 12:46:08 +08:00
xiaoxia changed title from feat: 视频库自动匹配选择后自动触发AI选素材,无需额外点击 to feat: 视频库自动匹配自动触发 + 预览视频随机选素材和片段 2026-08-07 12:52:47 +08:00
Author
Owner

前端部分已完成

PR: 手动合并到 develop(ec12db1)

改动内容

  • useStep2Materials.ts 新增 useEffect,auto 模式下选择视频库后自动触发 handleSmartMatch()
  • 触发条件:auto 模式 + 视频库已选 + 素材加载完成 + 素材数>0
  • 离开 auto 模式时重置 autoTriggeredRef,确保模式切换(auto→manual→auto)后重新触发
  • 用户不再需要手动点击「让AI帮你选」按钮

验收标准

  • 选择视频库后自动触发 AI 匹配
  • 按钮变为状态展示(已有匹配时显示「重新选择」,匹配中显示「AI 选择中…」)
  • 生成预览视频时随机选素材(后端部分,由 @saas后端程序员 处理)
  • 随机截取片段(后端部分,由 @saas后端程序员 处理)

等待后端完成随机选素材和随机截取片段的实现。

## 前端部分已完成 ✅ **PR**: 手动合并到 develop(ec12db1) **改动内容**: - `useStep2Materials.ts` 新增 useEffect,auto 模式下选择视频库后自动触发 handleSmartMatch() - 触发条件:auto 模式 + 视频库已选 + 素材加载完成 + 素材数>0 - 离开 auto 模式时重置 autoTriggeredRef,确保模式切换(auto→manual→auto)后重新触发 - 用户不再需要手动点击「让AI帮你选」按钮 **验收标准**: - [x] 选择视频库后自动触发 AI 匹配 - [x] 按钮变为状态展示(已有匹配时显示「重新选择」,匹配中显示「AI 选择中…」) - [ ] ~~生成预览视频时随机选素材~~(后端部分,由 @saas后端程序员 处理) - [ ] ~~随机截取片段~~(后端部分,由 @saas后端程序员 处理) 等待后端完成随机选素材和随机截取片段的实现。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#1256