Bug: 生成视频时报错「没有可渲染的就绪片段」— can_generate 验证在 fallback 链路后仍失败 #1286

Closed
opened 2026-08-07 21:45:26 +08:00 by xiaoxia · 0 comments
Owner

问题描述

用户完成智能剪辑全流程(模板→素材→预览→标题→配音→封面→确认),在最后一步「确认生成视频」时报错:
「没有可渲染的就绪片段,请确保已选择素材」

PR #1276 修复了 mark_clips_ready,但此错误来自 can_generate(在 mark_clips_ready 之前执行),PR #1276 未覆盖此路径。

根因分析

后端 generate_editor_draft 端点 (apps/api/app/api/routes/templates_editor/generation.py) 的 fallback 链路:

  1. _auto_fallback_draft_to_editing → 状态迁移
  2. _auto_fallback_copy_template_clips → 从模板创建clips
  3. _auto_fallback_assign_assets → 从 plan.config.asset_ids 分配素材
  4. _auto_fallback_auto_material_mode → 从素材库兜底
  5. can_generate → 验证至少一个clip有asset_id

可能失败点:

  • _auto_fallback_assign_assets 读取 plan.config.asset_ids 为空(PUT更新后config可能被覆盖)
  • 模板无 clip_configs/segments 导致无clips创建
  • fallback 链路过长、缺少日志、无断言

修复方案

  1. can_generate 中增加自动修复能力:如果发现clips存在但都没有asset_id,且 config.asset_ids 非空,直接在 can_generate 内部执行分配,不再依赖 fallback 链路
  2. _auto_fallback_assign_assets 中增加详细日志:记录 plan.config 内容、asset_ids、clips 数量等关键信息
  3. 增加防御性检查:在 generate endpoint 的 fallback 链路结束后、can_generate 之前,增加断言/日志,确认 config.asset_ids 和 clips 状态

关键代码位置

  • apps/api/app/services/edit_plan_service.pycan_generate (line ~571), mark_clips_ready (line ~594)
  • apps/api/app/api/routes/templates_editor/_fallback.py — 所有 fallback 函数
  • apps/api/app/api/routes/templates_editor/generation.pygenerate_editor_draft endpoint
  • apps/api/app/services/edit_plan_service.pyupdate_plan (line ~98),注意 config 是全量替换而非合并

验收标准

  • 用户在智能剪辑流程中选择素材后能成功生成视频,不再报此错误
  • fallback 链路有充足日志,方便后续排查
  • 不影响预览生成流程(预览走 generation_preview.py,不依赖 EditPlan clips)
## 问题描述 用户完成智能剪辑全流程(模板→素材→预览→标题→配音→封面→确认),在最后一步「确认生成视频」时报错: **「没有可渲染的就绪片段,请确保已选择素材」** PR #1276 修复了 `mark_clips_ready`,但此错误来自 `can_generate`(在 `mark_clips_ready` 之前执行),PR #1276 未覆盖此路径。 ## 根因分析 后端 `generate_editor_draft` 端点 (`apps/api/app/api/routes/templates_editor/generation.py`) 的 fallback 链路: 1. `_auto_fallback_draft_to_editing` → 状态迁移 2. `_auto_fallback_copy_template_clips` → 从模板创建clips 3. `_auto_fallback_assign_assets` → 从 `plan.config.asset_ids` 分配素材 4. `_auto_fallback_auto_material_mode` → 从素材库兜底 5. `can_generate` → 验证至少一个clip有asset_id ❌ 可能失败点: - `_auto_fallback_assign_assets` 读取 `plan.config.asset_ids` 为空(PUT更新后config可能被覆盖) - 模板无 clip_configs/segments 导致无clips创建 - fallback 链路过长、缺少日志、无断言 ## 修复方案 1. **在 `can_generate` 中增加自动修复能力**:如果发现clips存在但都没有asset_id,且 `config.asset_ids` 非空,直接在 can_generate 内部执行分配,不再依赖 fallback 链路 2. **在 `_auto_fallback_assign_assets` 中增加详细日志**:记录 plan.config 内容、asset_ids、clips 数量等关键信息 3. **增加防御性检查**:在 generate endpoint 的 fallback 链路结束后、can_generate 之前,增加断言/日志,确认 config.asset_ids 和 clips 状态 ## 关键代码位置 - `apps/api/app/services/edit_plan_service.py` — `can_generate` (line ~571), `mark_clips_ready` (line ~594) - `apps/api/app/api/routes/templates_editor/_fallback.py` — 所有 fallback 函数 - `apps/api/app/api/routes/templates_editor/generation.py` — `generate_editor_draft` endpoint - `apps/api/app/services/edit_plan_service.py` — `update_plan` (line ~98),注意 config 是全量替换而非合并 ## 验收标准 - 用户在智能剪辑流程中选择素材后能成功生成视频,不再报此错误 - fallback 链路有充足日志,方便后续排查 - 不影响预览生成流程(预览走 `generation_preview.py`,不依赖 EditPlan clips)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#1286