perf(#1280): 预览视频生成加速 — ultrafast编码+并行下载+跳过非必要步骤 #1284

Merged
xiaoxia merged 3 commits from feature/1280-preview-generation-speedup into develop 2026-08-07 21:52:03 +08:00
Owner

目标

30秒内的视频,预览生成应在1分钟内完成。

优化项

1. FFmpeg 编码加速(预期节省 50-70% 渲染时间)

  • 预览模式使用 -preset ultrafast(原 medium
  • CRF 从 23 提高到 28(预览画质足够,文件更小)
  • 影响 _execute_ffmpeg_render_pass_through 两个渲染路径

2. 并行素材下载(预期节省 60-80% 下载时间)

  • 使用 ThreadPoolExecutor 并发下载(最多6线程,IO密集型)
  • 保持原始素材顺序(按 index 排序收集结果)

3. 跳过非必要步骤(预期节省 5-15s)

  • 预览模式跳过 ASR 初始化(不需要自动字幕)
  • 预览模式跳过 validate_video_output(正式生成时已有保障)
  • 预览模式跳过缩略图生成

改动文件

文件 改动
unified_render_service.py is_preview 参数 + ultrafast/crf28
render_adapter.py is_preview 透传 + 跳过 ASR/校验/缩略图
generation.py 并行下载 + is_preview 透传
test_1280_preview_speedup.py 13 个新测试

向后兼容

  • is_preview 默认 False,不影响正式生成流程
  • 并行下载结果保持原始顺序
  • 所有现有测试通过(170 个相关测试)
## 目标 30秒内的视频,预览生成应在1分钟内完成。 ## 优化项 ### 1. FFmpeg 编码加速(预期节省 50-70% 渲染时间) - 预览模式使用 `-preset ultrafast`(原 `medium`) - CRF 从 23 提高到 28(预览画质足够,文件更小) - 影响 `_execute_ffmpeg` 和 `_render_pass_through` 两个渲染路径 ### 2. 并行素材下载(预期节省 60-80% 下载时间) - 使用 `ThreadPoolExecutor` 并发下载(最多6线程,IO密集型) - 保持原始素材顺序(按 index 排序收集结果) ### 3. 跳过非必要步骤(预期节省 5-15s) - 预览模式跳过 ASR 初始化(不需要自动字幕) - 预览模式跳过 `validate_video_output`(正式生成时已有保障) - 预览模式跳过缩略图生成 ## 改动文件 | 文件 | 改动 | |------|------| | `unified_render_service.py` | `is_preview` 参数 + ultrafast/crf28 | | `render_adapter.py` | `is_preview` 透传 + 跳过 ASR/校验/缩略图 | | `generation.py` | 并行下载 + `is_preview` 透传 | | `test_1280_preview_speedup.py` | 13 个新测试 | ## 向后兼容 - `is_preview` 默认 False,不影响正式生成流程 - 并行下载结果保持原始顺序 - 所有现有测试通过(170 个相关测试)
xiaoxia added 1 commit 2026-08-07 21:08:12 +08:00
perf(#1280): 预览视频生成加速
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 / Check if frontend-only change (pull_request) Successful in 46s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 56s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m35s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m18s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m33s
AI Code Review / AI Code Review (pull_request) Failing after 2m9s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
35f49d1d4e
优化项:
1. FFmpeg 编码加速:预览模式使用 -preset ultrafast + crf 28(原 medium + crf 23)
2. 并行素材下载:使用 ThreadPoolExecutor 并发下载(最多6线程),保持原始顺序
3. 跳过 ASR 初始化:预览模式不需要自动字幕
4. 跳过输出校验:预览模式跳过 validate_video_output
5. 跳过缩略图生成:预览模式不生成封面缩略图

改动文件:
- apps/worker/video_processing/unified_render_service.py:is_preview 参数
- apps/worker/video_processing/render_adapter.py:is_preview 透传 + 跳过非必要步骤
- apps/worker/worker_app/tasks/generation.py:并行下载 + is_preview 透传
- tests/unit/test_1280_preview_speedup.py:13 个新测试

预期效果:30s 视频预览生成从 ~2-3min 降至 ~30-60s

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1284 | | 预览链接 | [https://pr-1284.preview.xiaoxiajianji.com](https://pr-1284.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot added 1 commit 2026-08-07 21:12:22 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 55s
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 / Validate - Migration (alembic) (pull_request) Successful in 41s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m0s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m27s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m25s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m41s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m4s
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
AI Code Review / AI Code Review (pull_request) Successful in 6m41s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m2s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m2s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 6m32s
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 3m30s
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
9521d7e0c4
xiaoxia added 1 commit 2026-08-07 21:34:53 +08:00
Merge branch 'develop' into feature/1280-preview-generation-speedup
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 25s
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 - Type Check (mypy) (pull_request) Successful in 1m11s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m11s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m27s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m45s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m26s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m47s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m34s
AI Code Review / AI Code Review (pull_request) Successful in 3m43s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 7m4s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 10m21s
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 6m10s
CI/CD Pipeline / CI Gate (pull_request) Successful in 5s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 49s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 52s
1e03fb410a
Collaborator

【阻塞级判定】

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

📊 审查概览

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

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

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

良好实践

  1. 并行下载优化generation.py 中使用 ThreadPoolExecutor 将素材下载从串行改为并行,并利用 sorted(results_map.keys()) 巧妙保证了 downloaded 列表的原始顺序,兼顾了性能与数据一致性。
  2. 预览模式降级策略unified_render_service.py 中通过调整 FFmpeg 参数(preset=ultrafast, crf=28)以及 render_adapter.py 中跳过 ASR、校验和缩略图生成,有效实现了预览模式的加速目标。
  3. 异常处理一致性:在并行下载逻辑中,保留了 strict 模式的错误抛出机制,确保在严格模式下任务失败行为符合预期。
  4. 测试覆盖充分:新增的单元测试覆盖了参数传递、FFmpeg 参数校验、逻辑跳过等关键场景,保障了重构的正确性。

格式检查通过 | 逻辑审查通过 | 性能优化良好


🤖 由 AI 代码审查机器人自动生成 | 2026-08-07 13:38:37 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:0 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 无 ### ✅ 良好实践 1. **并行下载优化**:`generation.py` 中使用 `ThreadPoolExecutor` 将素材下载从串行改为并行,并利用 `sorted(results_map.keys())` 巧妙保证了 `downloaded` 列表的原始顺序,兼顾了性能与数据一致性。 2. **预览模式降级策略**:`unified_render_service.py` 中通过调整 FFmpeg 参数(`preset=ultrafast`, `crf=28`)以及 `render_adapter.py` 中跳过 ASR、校验和缩略图生成,有效实现了预览模式的加速目标。 3. **异常处理一致性**:在并行下载逻辑中,保留了 `strict` 模式的错误抛出机制,确保在严格模式下任务失败行为符合预期。 4. **测试覆盖充分**:新增的单元测试覆盖了参数传递、FFmpeg 参数校验、逻辑跳过等关键场景,保障了重构的正确性。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能优化良好 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-07 13:38:37 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia reviewed 2026-08-07 21:51:11 +08:00
xiaoxia left a comment
Author
Owner

LGTM

LGTM
xiaoxia merged commit 60e8cd5247 into develop 2026-08-07 21:52:03 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #1284 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.