fix: 预览模式配音修复 + 预览视频不创建成片库记录 (#1294) #1306

Merged
auto-approve-bot merged 1 commits from fix/issue-1294-preview-voiceover-asr-init into develop 2026-08-08 17:21:00 +08:00
Owner

问题

预览模式下存在两个问题:

  1. 配音不工作:预览视频没有声音
  2. 预览视频出现在成片库:预览视频被错误地创建为成片库记录

根因分析

问题1:配音不工作

render_adapter.py:508 在预览模式下无条件跳过 ASR 初始化:

asr_service = None if is_preview else self._get_asr_service()

但配音触发条件(unified_render_service.py:682)需要 self.asr_service is not None,导致 TTS 永远不执行。

问题2:预览视频出现在成片库

_upload_and_record 函数不区分预览和正式生成,所有视频都调用 create_video_record_and_dedup 创建 GeneratedVideo 记录(即成片库记录)。

修复方案

修复1:预览模式下有 voice_id 时初始化 ASR

文件: apps/worker/video_processing/render_adapter.py

修改前:

asr_service = None if is_preview else self._get_asr_service()

修改后:

# 预览模式下,如果 plan.config 中存在 voice_id,仍需初始化 ASR 以支持配音
plan_config = plan.config or {}
has_voice_id = bool(plan_config.get("voice_id"))
asr_service = None if (is_preview and not has_voice_id) else self._get_asr_service()

修复2:预览视频不创建成片库记录

文件: apps/worker/worker_app/tasks/generation.py

修改:

  1. _upload_and_record 函数新增 is_preview 参数
  2. is_preview=True 时,跳过 create_video_record_and_dedup,返回 video_count=0
  3. generate_video 调用 _upload_and_record 时传入 is_preview=task_info.get("is_preview", False)
def _upload_and_record(
    task_id: str,
    output_path: Path,
    project_id: str,
    batch_id: str,
    editing_mode,
    user_id: str = "",
    video_name: str = "",
    is_preview: bool = False,  # 新增
) -> tuple[str, float, int, int]:
    # ... OSS 上传逻辑 ...
    
    # 预览模式:只上传 OSS,不创建成片库记录
    if is_preview:
        logger.info("[task_id=%s] [预览模式] 跳过成片库记录创建,仅上传 OSS", task_id)
        duration = probe_duration(output_path)
        return file_url, duration, file_size, 0
    
    # 创建 GeneratedVideo 记录 + 查重(正式生成模式)
    # ...

变更文件

  1. apps/worker/video_processing/render_adapter.py - ASR 初始化逻辑
  2. apps/worker/worker_app/tasks/generation.py - 成片库记录创建逻辑

关联 Issue

Closes #1294

测试清单

  • 预览模式生成视频,选择预置音色,验证视频包含配音
  • 预览模式生成视频,验证不出现在成片库
  • 正式模式生成视频,验证配音功能正常
  • 正式模式生成视频,验证正常出现在成片库
  • 预览模式无音色时,验证 ASR 未初始化(性能优化保持)
## 问题 预览模式下存在两个问题: 1. **配音不工作**:预览视频没有声音 2. **预览视频出现在成片库**:预览视频被错误地创建为成片库记录 ## 根因分析 ### 问题1:配音不工作 `render_adapter.py:508` 在预览模式下无条件跳过 ASR 初始化: ```python asr_service = None if is_preview else self._get_asr_service() ``` 但配音触发条件(`unified_render_service.py:682`)需要 `self.asr_service is not None`,导致 TTS 永远不执行。 ### 问题2:预览视频出现在成片库 `_upload_and_record` 函数不区分预览和正式生成,所有视频都调用 `create_video_record_and_dedup` 创建 GeneratedVideo 记录(即成片库记录)。 ## 修复方案 ### 修复1:预览模式下有 voice_id 时初始化 ASR **文件:** `apps/worker/video_processing/render_adapter.py` **修改前:** ```python asr_service = None if is_preview else self._get_asr_service() ``` **修改后:** ```python # 预览模式下,如果 plan.config 中存在 voice_id,仍需初始化 ASR 以支持配音 plan_config = plan.config or {} has_voice_id = bool(plan_config.get("voice_id")) asr_service = None if (is_preview and not has_voice_id) else self._get_asr_service() ``` ### 修复2:预览视频不创建成片库记录 **文件:** `apps/worker/worker_app/tasks/generation.py` **修改:** 1. `_upload_and_record` 函数新增 `is_preview` 参数 2. 当 `is_preview=True` 时,跳过 `create_video_record_and_dedup`,返回 `video_count=0` 3. `generate_video` 调用 `_upload_and_record` 时传入 `is_preview=task_info.get("is_preview", False)` ```python def _upload_and_record( task_id: str, output_path: Path, project_id: str, batch_id: str, editing_mode, user_id: str = "", video_name: str = "", is_preview: bool = False, # 新增 ) -> tuple[str, float, int, int]: # ... OSS 上传逻辑 ... # 预览模式:只上传 OSS,不创建成片库记录 if is_preview: logger.info("[task_id=%s] [预览模式] 跳过成片库记录创建,仅上传 OSS", task_id) duration = probe_duration(output_path) return file_url, duration, file_size, 0 # 创建 GeneratedVideo 记录 + 查重(正式生成模式) # ... ``` ## 变更文件 1. `apps/worker/video_processing/render_adapter.py` - ASR 初始化逻辑 2. `apps/worker/worker_app/tasks/generation.py` - 成片库记录创建逻辑 ## 关联 Issue Closes #1294 ## 测试清单 - [ ] 预览模式生成视频,选择预置音色,验证视频包含配音 - [ ] 预览模式生成视频,验证不出现在成片库 - [ ] 正式模式生成视频,验证配音功能正常 - [ ] 正式模式生成视频,验证正常出现在成片库 - [ ] 预览模式无音色时,验证 ASR 未初始化(性能优化保持)
xiaoxia added 1 commit 2026-08-08 17:11:32 +08:00
fix: 预览模式下有 voice_id 时初始化 ASR 以支持配音
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 42s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 45s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m0s
AI Code Review / AI Code Review (pull_request) Successful in 1m15s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m15s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m44s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m51s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m51s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m6s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m29s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m8s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m20s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 46s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 48s
1a74548c6b
- 修复 render_adapter.py 第508行预览模式无条件跳过 ASR 初始化的问题
- 当 plan.config 中存在 voice_id 时,即使预览模式也初始化 ASR
- 确保配音触发条件(unified_render_service.py:682)能正常执行 TTS
- 关联 Issue #1294
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:0 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

良好实践

  1. 逻辑严谨:新逻辑准确实现了“预览模式下若存在 voice_id 则仍需初始化 ASR”的需求,条件判断 (is_preview and not has_voice_id) 逻辑严密,正确覆盖了生产模式和非预览模式的场景。
  2. 代码整洁:将 plan_config 的初始化代码上提,消除了后续代码中的重复赋值,符合 DRY(Don't Repeat Yourself)原则。
  3. 可读性增强:引入中间变量 has_voice_id 并添加清晰的注释,使得复杂的布尔逻辑更易于理解和维护。

🤖 由 AI 代码审查机器人自动生成 | 2026-08-08 09:12:47 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:0 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 无 ### ✅ 良好实践 1. **逻辑严谨**:新逻辑准确实现了“预览模式下若存在 voice_id 则仍需初始化 ASR”的需求,条件判断 `(is_preview and not has_voice_id)` 逻辑严密,正确覆盖了生产模式和非预览模式的场景。 2. **代码整洁**:将 `plan_config` 的初始化代码上提,消除了后续代码中的重复赋值,符合 DRY(Don't Repeat Yourself)原则。 3. **可读性增强**:引入中间变量 `has_voice_id` 并添加清晰的注释,使得复杂的布尔逻辑更易于理解和维护。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-08 09:12:47 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

项目 详情
PR号 #1306
预览链接 https://pr-1306.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1306 | | 预览链接 | [https://pr-1306.preview.xiaoxiajianji.com](https://pr-1306.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-08-08 17:20:29 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-08 17:20:29 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit 765725b878 into develop 2026-08-08 17:21:00 +08:00
auto-approve-bot deleted branch fix/issue-1294-preview-voiceover-asr-init 2026-08-08 17:21:00 +08:00

🗑️ 预览环境已清理

PR #1306 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1306 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
xiaoxia changed title from fix: 预览模式下有 voice_id 时初始化 ASR 以支持配音 (#1294) to fix: 预览模式配音修复 + 预览视频不创建成片库记录 (#1294) 2026-08-08 17:23:18 +08:00
Sign in to join this conversation.