fix: #1294 预览视频未使用用户选择的配音 #1295
Reference in New Issue
Block a user
Delete Branch "bugfix/1294-preview-voice-injection"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
用户在智能剪辑流程中选择了配音音色,但生成的预览视频完全没有配音。
根因
Worker 端三层断裂:
_load_task_info未加载voice_ids字段_render_video未接收voice_ids参数plan.config中未注入voice_id,导致渲染引擎_maybe_add_voiceover_layer读不到voice_id直接跳过配音生成修复
_load_task_info:增加voice_ids字段加载_render_video:新增voice_ids参数,在构建virtual_plan后注入voice_id到 config,并设置subtitle.auto_generated=True启用 ASR 字幕对齐配音模式generate_video:将task_info中的voice_ids传递给_render_video测试
🚀 预览环境已部署
80882cd472to9e8732eb9e9e8732eb9etod7315544d3【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
voice_ids(复数形式,类型为list[str]),但在实现中仅使用了voice_ids[0]。如果传入的列表包含多个 ID,后续的 ID 会被静默忽略。这会导致功能不完整或行为不符合预期(用户误以为支持多个配音注入)。voice_id(单数),类型改为str | None,并修改调用处的逻辑;如果确实需要支持多个,则应修改注入逻辑以遍历列表或抛出明确的异常。💡 改进建议(不阻塞合并)
[tests/unit/test_1294_preview_voice_injection.py: 244] 测试方法过于脆弱
test_generate_video_passes_voice_ids方法通过读取源码文件并检查字符串字面量来验证参数传递。这种“白盒”字符串检查测试非常脆弱,一旦代码格式化或重构(例如参数换行),测试就会失败。建议使用unittest.mock.patch来 mock_render_video函数,然后调用generate_video,验证_render_video是否被正确的参数调用。[apps/worker/worker_app/tasks/generation.py: 1180] 边界条件校验可加强
if voice_ids:仅判断列表非空。如果列表中包含空字符串(如[""]),条件依然成立,导致plan_cfg["voice_id"]被设置为空字符串,这可能引发下游错误。建议增加对首个元素非空的校验:if voice_ids and voice_ids[0]:。✅ 良好实践
_load_task_info中使用list(getattr(..., []) or [])确保了返回值的类型安全,有效避免了 NoneType 错误。_render_video中重新获取virtual_plan.config进行修改,确保了不会意外覆盖之前代码块(如 export 配置)设置的属性,逻辑处理得当。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能良好
🤖 由 AI 代码审查机器人自动生成 | 2026-08-08 04:15:22 | 模型:
🗑️ 预览环境已清理
PR #1295 已关闭或合并,对应的预览环境已被清理。