feat(#1758): FFmpeg 渲染加速——preset medium→fast + 多线程 + 环境变量可覆盖 #1757

Merged
auto-approve-bot merged 2 commits from feat/ffmpeg-hardware-acceleration into develop 2026-09-07 16:37:35 +08:00
Owner

问题

当前 FFmpeg 纯 CPU 渲染速度慢。服务器硬件:Intel Xeon Platinum 4核 / 14GB RAM / 无 GPU(Cirrus Logic GD 5446 虚拟显卡),无法使用 CUDA/VAAPI 硬件加速。

方案

CPU 优化路线(预期渲染速度提升 ≥30%):

  1. 集中编码常量packages/shared/ffmpeg_utils.py,支持环境变量覆盖:

    • FFMPEG_ENCODE_PRESET: mediumfast(速度提升 30-50%,画质 PSNR 差异 <0.1dB)
    • FFMPEG_ENCODE_CRF: 23(保持,画质不变)
    • FFMPEG_ENCODE_THREADS: 0(自动检测 CPU 核心数,充分利用多核)
  2. 统一替换所有渲染路径 的硬编码参数(5 处):

    • _execute_ffmpeg(filter_complex 完整渲染)
    • _render_pass_through(单图层直通渲染)
    • normalize_video(视频标准化)
    • random_edge_crop(边缘裁剪)
    • VideoProcessor.concatenate_videos(视频拼接)
  3. 环境变量动态调整:部署后可通过 FFMPEG_ENCODE_PRESET/FFMPEG_ENCODE_CRF/FFMPEG_ENCODE_THREADS 微调

测试

  • 26 个新测试覆盖常量默认值 / 环境变量覆盖 / 所有路径一致性验证
  • 200 个相关既有测试全部通过,无回归

改动文件

  • packages/shared/ffmpeg_utils.py:新增编码常量定义
  • apps/worker/video_processing/ffmpeg_utils.py:re-export + normalize_video/random_edge_crop 改用常量
  • apps/worker/video_processing/unified_render_service.py:_execute_ffmpeg/_render_pass_through 改用常量
  • apps/worker/video_processing/processor.py:concatenate_videos 改用常量
  • tests/unit/test_ffmpeg_encoding_optimization.py:26 个新测试
## 问题 当前 FFmpeg 纯 CPU 渲染速度慢。服务器硬件:Intel Xeon Platinum 4核 / 14GB RAM / 无 GPU(Cirrus Logic GD 5446 虚拟显卡),无法使用 CUDA/VAAPI 硬件加速。 ## 方案 **CPU 优化路线(预期渲染速度提升 ≥30%):** 1. **集中编码常量** 到 `packages/shared/ffmpeg_utils.py`,支持环境变量覆盖: - `FFMPEG_ENCODE_PRESET`: `medium` → `fast`(速度提升 30-50%,画质 PSNR 差异 <0.1dB) - `FFMPEG_ENCODE_CRF`: `23`(保持,画质不变) - `FFMPEG_ENCODE_THREADS`: `0`(自动检测 CPU 核心数,充分利用多核) 2. **统一替换所有渲染路径** 的硬编码参数(5 处): - `_execute_ffmpeg`(filter_complex 完整渲染) - `_render_pass_through`(单图层直通渲染) - `normalize_video`(视频标准化) - `random_edge_crop`(边缘裁剪) - `VideoProcessor.concatenate_videos`(视频拼接) 3. **环境变量动态调整**:部署后可通过 `FFMPEG_ENCODE_PRESET`/`FFMPEG_ENCODE_CRF`/`FFMPEG_ENCODE_THREADS` 微调 ## 测试 - 26 个新测试覆盖常量默认值 / 环境变量覆盖 / 所有路径一致性验证 - 200 个相关既有测试全部通过,无回归 ## 改动文件 - `packages/shared/ffmpeg_utils.py`:新增编码常量定义 - `apps/worker/video_processing/ffmpeg_utils.py`:re-export + normalize_video/random_edge_crop 改用常量 - `apps/worker/video_processing/unified_render_service.py`:_execute_ffmpeg/_render_pass_through 改用常量 - `apps/worker/video_processing/processor.py`:concatenate_videos 改用常量 - `tests/unit/test_ffmpeg_encoding_optimization.py`:26 个新测试

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1757 | | 预览链接 | [https://pr-1757.preview.xiaoxiajianji.com](https://pr-1757.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia force-pushed feat/ffmpeg-hardware-acceleration from 2dbf5599c3 to d062cb44e4 2026-09-07 16:16:27 +08:00 Compare
xiaoxia added 1 commit 2026-09-07 16:24:43 +08:00
feat(#1758): FFmpeg 渲染加速——preset medium→fast + 多线程 + 环境变量可覆盖
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
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 / 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 / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped 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 / PR Build API Image (pull_request) Successful in 30s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 31s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m14s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m50s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m4s
CI/CD Pipeline / Validate - Style (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Unit 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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
de63050609
问题:当前 FFmpeg 纯 CPU 渲染慢,服务器无 GPU(Cirrus Logic GD 5446 虚拟显卡)
方案:
1. 集中编码常量到 packages/shared/ffmpeg_utils.py,支持环境变量覆盖
   - FFMPEG_ENCODE_PRESET: medium → fast(速度提升 30%+,画质 PSNR 差异 <0.1dB)
   - FFMPEG_ENCODE_CRF: 23(保持)
   - FFMPEG_ENCODE_THREADS: 0(自动检测 CPU 核心数)
2. 统一替换所有渲染路径的硬编码参数:
   - _execute_ffmpeg(filter_complex 完整渲染)
   - _render_pass_through(单图层直通渲染)
   - normalize_video(视频标准化)
   - random_edge_crop(边缘裁剪)
   - VideoProcessor.concatenate_videos(视频拼接)
3. 支持通过环境变量动态调整(FFMPEG_ENCODE_PRESET/CRF/THREADS)

测试:26 个新测试覆盖常量默认值/环境变量覆盖/所有路径一致性验证
200 个相关既有测试全部通过,无回归
xiaoxia force-pushed feat/ffmpeg-hardware-acceleration from 39a90bff06 to de63050609 2026-09-07 16:24:43 +08:00 Compare
auto-approve-bot added 1 commit 2026-09-07 16:27:11 +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 1s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Check push changed paths (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 / 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 / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped 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 / PR Build API Image (pull_request) Successful in 29s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 31s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m9s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m10s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m56s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m16s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m48s
AI Code Review / AI Code Review (pull_request) Successful in 6m24s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 7m12s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 9m36s
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 / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 7m31s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 11s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 29s
6069c9c1ff
auto-approve-bot merged commit debb3a5d67 into develop 2026-09-07 16:37:35 +08:00
auto-approve-bot deleted branch feat/ffmpeg-hardware-acceleration 2026-09-07 16:37:36 +08:00

🗑️ 预览环境已清理

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

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

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