fix(P0): 修复直通模式调速失效 + 音画不同步 #568

Merged
auto-approve-bot merged 1 commits from fix/p1-pass-through-speed-audio into develop 2026-07-19 10:10:45 +08:00
Owner

背景

P1-1验证发现直通模式调速存在问题,单clip场景下调速不生效。

根因(双Bug)

  1. stream_copy路径未检查调速/倒放:有调速时错误走流拷贝(不重编码),导致调速完全失效
  2. 直通模式音频未调速:视频用setpts调速了,但音频没加atempo,导致音画不同步

修复

  1. _can_use_stream_copy增加调速和倒放检查,有特效时返回False走带滤镜路径
  2. _render_pass_through的音频处理增加atempo调速(用SpeedEngine)
  3. 顺手修复:多个音频滤镜用独立-af参数会互相覆盖,统一合并到af_parts用一个-af输出
## 背景 P1-1验证发现直通模式调速存在问题,单clip场景下调速不生效。 ## 根因(双Bug) 1. **stream_copy路径未检查调速/倒放**:有调速时错误走流拷贝(不重编码),导致调速完全失效 2. **直通模式音频未调速**:视频用setpts调速了,但音频没加atempo,导致音画不同步 ## 修复 1. _can_use_stream_copy增加调速和倒放检查,有特效时返回False走带滤镜路径 2. _render_pass_through的音频处理增加atempo调速(用SpeedEngine) 3. 顺手修复:多个音频滤镜用独立-af参数会互相覆盖,统一合并到af_parts用一个-af输出
xiaoxia added 1 commit 2026-07-19 10:05:28 +08:00
fix(P0): 修复直通模式调速失效+音画不同步
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 17s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 24s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 49s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 30s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m16s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 2m50s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m24s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 5m17s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 33s
AI Code Review / AI Code Review (pull_request) Successful in 7m8s
53f76f9700
- stream_copy没检查调速/倒放,有调速时错误走流拷贝导致调速失效
- 直通模式视频setpts调速了但音频没atempo调速,音画不同步
- 修复多个音频滤镜用独立-af参数互相覆盖的问题
auto-approve-bot approved these changes 2026-07-19 10:08:18 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-19 10:08:18 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit 60ddbca5b8 into develop 2026-07-19 10:10:45 +08:00
auto-approve-bot deleted branch fix/p1-pass-through-speed-audio 2026-07-19 10:10:45 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #568 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Collaborator

代码审查结果 - PR #568

⚠️ 问题(1个需要修改)

  1. apps/worker/video_processing/unified_render_service.py 第1096-1103行:关键逻辑的异常处理不当,会导致音画不同步。
    • 问题描述:代码在应用音频调速滤镜时使用了 try-except 块捕获所有异常并仅记录警告,随后继续执行流程。由于代码逻辑已经判断出 speed != 1.0(第1095行),这意味着视频部分必然进行了调速处理。如果此时音频调速滤镜应用失败(例如导入模块失败、参数错误等),生成的 FFmpeg 命令将缺失音频滤镜,导致输出视频中音频保持原速而视频变速,造成严重的音画不同步。
    • 后果:在特定错误场景下生成损坏的视频文件(音画不同步),且任务可能错误地标记为成功。
    • 修改建议:移除音频调速逻辑中的 try-except 块,或者修改异常处理逻辑,在关键滤镜应用失败时抛出异常或终止任务,而不是静默跳过。音频调速属于逻辑强依赖,不同于降噪等锦上添花的功能。

💡 建议(2个可选)

  1. apps/worker/video_processing/unified_render_service.py 第813行、1106行:潜在的空指针风险。

    • 问题描述ReverseConfig.from_dict(clip.config.get("reverse")) 调用中,如果 clip.config 中没有 "reverse" 键,get 方法返回 None。如果 ReverseConfig.from_dict 方法内部没有显式处理 None 输入,将会抛出异常。
    • 修改建议:确认 from_dict 方法对 None 的处理能力,或者改为 clip.config.get("reverse", {}) 提供默认空字典。
  2. apps/worker/video_processing/unified_render_service.py 第808行、1094行:重复计算。

    • 问题描述UnifiedRenderService._clip_speed(clip)can_use_direct_copy 判断逻辑和命令构建逻辑中各调用了一次。同理,ReverseConfig.from_dict 也被调用了两次。
    • 修改建议:虽然性能影响极小,但为了避免不一致风险(如果计算涉及随机性或时间),建议在方法入口处计算一次并传递,或者确保该方法是纯函数。

格式检查通过 | 逻辑审查需修改 | 性能无明显问题


🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 10:12:37 | 模型:

## 代码审查结果 - PR #568 ### ⚠️ 问题(1个需要修改) 1. **apps/worker/video_processing/unified_render_service.py 第1096-1103行**:关键逻辑的异常处理不当,会导致音画不同步。 - **问题描述**:代码在应用音频调速滤镜时使用了 `try-except` 块捕获所有异常并仅记录警告,随后继续执行流程。由于代码逻辑已经判断出 `speed != 1.0`(第1095行),这意味着视频部分必然进行了调速处理。如果此时音频调速滤镜应用失败(例如导入模块失败、参数错误等),生成的 FFmpeg 命令将缺失音频滤镜,导致输出视频中音频保持原速而视频变速,造成严重的音画不同步。 - **后果**:在特定错误场景下生成损坏的视频文件(音画不同步),且任务可能错误地标记为成功。 - **修改建议**:移除音频调速逻辑中的 `try-except` 块,或者修改异常处理逻辑,在关键滤镜应用失败时抛出异常或终止任务,而不是静默跳过。音频调速属于逻辑强依赖,不同于降噪等锦上添花的功能。 ### 💡 建议(2个可选) 1. **apps/worker/video_processing/unified_render_service.py 第813行、1106行**:潜在的空指针风险。 - **问题描述**:`ReverseConfig.from_dict(clip.config.get("reverse"))` 调用中,如果 `clip.config` 中没有 "reverse" 键,`get` 方法返回 None。如果 `ReverseConfig.from_dict` 方法内部没有显式处理 None 输入,将会抛出异常。 - **修改建议**:确认 `from_dict` 方法对 None 的处理能力,或者改为 `clip.config.get("reverse", {})` 提供默认空字典。 2. **apps/worker/video_processing/unified_render_service.py 第808行、1094行**:重复计算。 - **问题描述**:`UnifiedRenderService._clip_speed(clip)` 在 `can_use_direct_copy` 判断逻辑和命令构建逻辑中各调用了一次。同理,`ReverseConfig.from_dict` 也被调用了两次。 - **修改建议**:虽然性能影响极小,但为了避免不一致风险(如果计算涉及随机性或时间),建议在方法入口处计算一次并传递,或者确保该方法是纯函数。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 10:12:37 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
Sign in to join this conversation.