fix(P0): legacy渲染引擎5项normalize补全 + ffmpeg错误日志增强 #511

Merged
auto-approve-bot merged 3 commits from fix/p0-legacy-normalize-and-error-log into develop 2026-07-18 15:07:59 +08:00
Owner

问题:one_take模式用横屏+不同编码/采样率的素材渲染exit=234崩溃,错误日志里只有ffmpeg版本号,看不到真正的报错原因。

根因

  1. concat前视频像素格式不统一(yuv420p/yuv422p/nv12等混在一起)
  2. xfade转场路径的音频缺少aformat归一化(只修了concat路径)
  3. 异常捕获只输出str(e),stderr根本没打出来

修复

  1. 视频像素格式统一:_build_clip_filter 加 format=yuv420p,放在pad之后fps之前
  2. xfade音频归一化:_build_xfade_filter 音频concat前加 aformat(48000Hz+stereo+fltp),与concat路径保持一致
  3. 错误日志增强:legacy渲染失败时输出完整ffmpeg命令(前2000字符)+ stderr最后1500字符 + exit code,写入GenerationTask.error_message

5项normalize完整清单(legacy路径)

  • 视频分辨率:scale + pad(#502)
  • 视频像素格式:format=yuv420p(本PR新增)
  • 视频帧率:fps滤镜(#500)
  • 音频采样率+声道:aformat=48000Hz+stereo+fltp(#502 concat路径 + 本PR xfade路径)
  • 音频编码:输出时统一aac(ffmpeg -c:a aac)

测试:新增3个单测,42个相关单测全过

关联:#406

**问题**:one_take模式用横屏+不同编码/采样率的素材渲染exit=234崩溃,错误日志里只有ffmpeg版本号,看不到真正的报错原因。 **根因**: 1. concat前视频像素格式不统一(yuv420p/yuv422p/nv12等混在一起) 2. xfade转场路径的音频缺少aformat归一化(只修了concat路径) 3. 异常捕获只输出str(e),stderr根本没打出来 **修复**: 1. **视频像素格式统一**:_build_clip_filter 加 `format=yuv420p`,放在pad之后fps之前 2. **xfade音频归一化**:_build_xfade_filter 音频concat前加 aformat(48000Hz+stereo+fltp),与concat路径保持一致 3. **错误日志增强**:legacy渲染失败时输出完整ffmpeg命令(前2000字符)+ stderr最后1500字符 + exit code,写入GenerationTask.error_message **5项normalize完整清单(legacy路径)**: - ✅ 视频分辨率:scale + pad(#502) - ✅ 视频像素格式:format=yuv420p(本PR新增) - ✅ 视频帧率:fps滤镜(#500) - ✅ 音频采样率+声道:aformat=48000Hz+stereo+fltp(#502 concat路径 + 本PR xfade路径) - ✅ 音频编码:输出时统一aac(ffmpeg -c:a aac) **测试**:新增3个单测,42个相关单测全过 **关联**:#406
xiaoxia added the bugbackendP0 labels 2026-07-18 14:28:35 +08:00
xiaoxia added 1 commit 2026-07-18 14:28:35 +08:00
fix(P0): legacy渲染引擎补全5项normalize + 错误日志增强
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
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 / Deploy Staging (Watchtower auto-deploy) (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 / 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 / Deploy Production (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 16s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 5s
AI Code Review / AI Code Review (pull_request) Failing after 34s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 51s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 40s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 1m28s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 25s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 1m50s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m48s
9a2eb0ca60
背景:one_take模式用横屏+不同编码/采样率的素材渲染exit=234崩溃。
根因是concat前视频/音频格式不完全统一,且错误日志只输出版本号看不到真正报错。

修复1 — 视频像素格式统一:
- _build_clip_filter 加 format=yuv420p,放在pad之后fps之前
- 确保 concat 前所有片段像素格式一致(yuv420p/yuv422p/yuv444p/nv12等都统一)

修复2 — xfade路径音频归一化:
- _build_xfade_filter 的音频concat前加 aformat 归一化(48000Hz+stereo+fltp)
- 之前只修了concat路径,xfade(转场)路径漏了

修复3 — legacy渲染错误日志增强:
- 失败时输出完整 ffmpeg 命令(前2000字符)
- 输出完整 stderr 最后1500字符(真正的错误信息)
- 输出 exit code
- 之前只输出版本号,完全看不到 concat 失败的真实原因

测试:新增3个单测(format=yuv420p、xfade音频归一化、xfade单音频acopy),42个相关单测全过

关联:#406
xiaoxia added 1 commit 2026-07-18 14:41:38 +08:00
style: black格式化测试文件
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
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 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 16s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 21s
AI Code Review / AI Code Review (pull_request) Failing after 37s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 49s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Failing after 39s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 1m9s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 26s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 1m40s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m33s
be082ff6a3
xiaoxia added 1 commit 2026-07-18 15:02:13 +08:00
style: ruff修复f-string前缀和getattr常量
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
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 / Deploy Staging (Watchtower auto-deploy) (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 / 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 / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 24s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 58s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 57s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 38s
AI Code Review / AI Code Review (pull_request) Successful in 2m22s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m47s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 3m21s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m19s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 5m45s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 32s
957e0c12a6

🚀 预览环境已部署

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

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

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

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

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

📊 审查概览

  • 整体评价:通过
  • 严重问题数量:0 个
  • 一般建议数量:2 个

需修改的问题(严重)

💡 改进建议(一般)

  1. [apps/worker/worker_app/tasks/edit_plan_generation.py: 381] 日志敏感信息泄露风险

    • 具体内容:在异常处理中,代码将完整的 FFmpeg 命令(cmd_preview)记录到日志并可能传递给下游(如 _mark_plan_failed)。如果输入文件路径包含敏感信息(如带签名的 S3 URL、内网路径结构或临时 Token),直接记录可能会导致信息泄露。
    • 修改建议:建议对命令中的路径参数进行脱敏处理(例如将 URL 中的 query 参数去除,或仅保留文件名),或者在确认环境安全的前提下保留现状。
  2. [apps/api/app/services/video_compose_service.py: 638] 硬编码音频参数限制灵活性

    • 具体内容:aformat 滤镜硬编码了 sample_rates=48000channel_layouts=stereo。虽然这解决了 concat 因格式不一致导致失败的问题,但强制重采样和混音会降低音频质量(如将 5.1 声道下混为立体声,或 44.1kHz 升频至 48kHz)。
    • 修改建议:如果业务场景需要保留原始音频的高保真度,建议根据输入流的采样率/声道数动态确定归一化目标,或者通过配置项指定目标格式。

良好实践

  • 增强的错误日志:在 edit_plan_generation.py 中,详细捕获了 stderr 并截取尾部信息,同时记录了完整的命令行,极大地提升了 FFmpeg 执行失败时的排查效率。
  • FFmpeg 滤镜链健壮性:在 video_compose_service.py 中增加 format=yuv420p 和音频 aformat 归一化,有效解决了因输入源格式不一致(像素格式、采样率、声道布局)导致的 concat 滤镜报错问题。
  • 单元测试覆盖:新增的测试用例准确覆盖了新增的滤镜逻辑,确保了代码变更的正确性。

格式检查通过 | 逻辑审查通过 | 性能无明显隐患


🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 15:04:38 | 模型:

### 📊 审查概览 - 整体评价:通过 - 严重问题数量:0 个 - 一般建议数量:2 个 ### ❌ 需修改的问题(严重) 无 ### 💡 改进建议(一般) 1. **[apps/worker/worker_app/tasks/edit_plan_generation.py: 381] 日志敏感信息泄露风险** - 具体内容:在异常处理中,代码将完整的 FFmpeg 命令(`cmd_preview`)记录到日志并可能传递给下游(如 `_mark_plan_failed`)。如果输入文件路径包含敏感信息(如带签名的 S3 URL、内网路径结构或临时 Token),直接记录可能会导致信息泄露。 - 修改建议:建议对命令中的路径参数进行脱敏处理(例如将 URL 中的 query 参数去除,或仅保留文件名),或者在确认环境安全的前提下保留现状。 2. **[apps/api/app/services/video_compose_service.py: 638] 硬编码音频参数限制灵活性** - 具体内容:`aformat` 滤镜硬编码了 `sample_rates=48000` 和 `channel_layouts=stereo`。虽然这解决了 `concat` 因格式不一致导致失败的问题,但强制重采样和混音会降低音频质量(如将 5.1 声道下混为立体声,或 44.1kHz 升频至 48kHz)。 - 修改建议:如果业务场景需要保留原始音频的高保真度,建议根据输入流的采样率/声道数动态确定归一化目标,或者通过配置项指定目标格式。 ### ✅ 良好实践 - **增强的错误日志**:在 `edit_plan_generation.py` 中,详细捕获了 `stderr` 并截取尾部信息,同时记录了完整的命令行,极大地提升了 FFmpeg 执行失败时的排查效率。 - **FFmpeg 滤镜链健壮性**:在 `video_compose_service.py` 中增加 `format=yuv420p` 和音频 `aformat` 归一化,有效解决了因输入源格式不一致(像素格式、采样率、声道布局)导致的 `concat` 滤镜报错问题。 - **单元测试覆盖**:新增的测试用例准确覆盖了新增的滤镜逻辑,确保了代码变更的正确性。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能无明显隐患 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 15:04:38 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-18 15:05:34 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit 7378ef378e into develop 2026-07-18 15:07:59 +08:00
auto-approve-bot deleted branch fix/p0-legacy-normalize-and-error-log 2026-07-18 15:07:59 +08:00

🗑️ 预览环境已清理

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

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

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