Bug: 生成视频时报错「没有可渲染的就绪片段」 #1270

Closed
opened 2026-08-07 18:48:43 +08:00 by xiaoxia · 1 comment
Owner

问题现象

用户在智能剪辑流程中点击生成视频,返回错误:
生成失败 — 没有可渲染的就绪片段

问题描述

用户完成所有步骤(素材选择、标题、配音、封面设置)后,进入最终确认生成步骤,点击生成后报错「没有可渲染的就绪片段」。用户有重试按钮可用。

根因待查

需要排查:

  1. 前端提交生成请求时,是否传入了完整的素材列表和片段信息
  2. 后端 plan_generator_service.py 生成剪辑计划时,是否正确分配了素材片段
  3. Worker 渲染时,unified_render_service.py 是否正确获取了可渲染的片段
  4. 是否因为 assign_asset()distribute_assets() 的随机逻辑导致部分素材未分配到片段

涉及文件

  • apps/api/app/api/routes/generate.py — 生成接口
  • apps/api/app/services/plan_generator_service.py — 计划生成
  • packages/domain/plan_generator_utils.pydistribute_assets()
  • packages/domain/edit_plan_clip.pyassign_asset()
  • apps/worker/video_processing/unified_render_service.py — 渲染引擎
  • apps/web/src/pages/generate/GeneratePage.tsx — 前端生成流程
## 问题现象 用户在智能剪辑流程中点击生成视频,返回错误: **生成失败 — 没有可渲染的就绪片段** ## 问题描述 用户完成所有步骤(素材选择、标题、配音、封面设置)后,进入最终确认生成步骤,点击生成后报错「没有可渲染的就绪片段」。用户有重试按钮可用。 ## 根因待查 需要排查: 1. 前端提交生成请求时,是否传入了完整的素材列表和片段信息 2. 后端 `plan_generator_service.py` 生成剪辑计划时,是否正确分配了素材片段 3. Worker 渲染时,`unified_render_service.py` 是否正确获取了可渲染的片段 4. 是否因为 `assign_asset()` 或 `distribute_assets()` 的随机逻辑导致部分素材未分配到片段 ## 涉及文件 - `apps/api/app/api/routes/generate.py` — 生成接口 - `apps/api/app/services/plan_generator_service.py` — 计划生成 - `packages/domain/plan_generator_utils.py` — `distribute_assets()` - `packages/domain/edit_plan_clip.py` — `assign_asset()` - `apps/worker/video_processing/unified_render_service.py` — 渲染引擎 - `apps/web/src/pages/generate/GeneratePage.tsx` — 前端生成流程
Author
Owner

根因分析

核心问题mark_clips_ready() 标记所有 PENDING 片段为 READY,不管是否已分配素材。

完整链路

  1. 用户走完7步流程点生成
  2. _auto_fallback_assign_assets() 分配素材(如果 config.asset_ids 为空则什么都不做)
  3. mark_clips_ready() 标记所有 PENDING 片段为 READY(包括没有素材的)
  4. render_adapter 过滤 status==READY and asset_id 非空 → 空列表
  5. 抛出 "没有可渲染的就绪片段"

修复 (PR #1276)

  • mark_clips_ready(): 只标记 asset_id 非空的 pending 片段
  • can_generate(): 新增检查 — 至少有一个片段分配了素材
  • validateGenerateInputs(): auto 模式也校验素材非空,给用户友好提示
## 根因分析 **核心问题**:`mark_clips_ready()` 标记所有 PENDING 片段为 READY,不管是否已分配素材。 **完整链路**: 1. 用户走完7步流程点生成 2. `_auto_fallback_assign_assets()` 分配素材(如果 `config.asset_ids` 为空则什么都不做) 3. `mark_clips_ready()` 标记所有 PENDING 片段为 READY(包括没有素材的) 4. `render_adapter` 过滤 `status==READY and asset_id 非空` → 空列表 5. 抛出 "没有可渲染的就绪片段" ## 修复 (PR #1276) - `mark_clips_ready()`: 只标记 `asset_id` 非空的 pending 片段 - `can_generate()`: 新增检查 — 至少有一个片段分配了素材 - `validateGenerateInputs()`: auto 模式也校验素材非空,给用户友好提示
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#1270