fix: legacy渲染引擎concat前音频不归一化exit=234 + 视频改为pad留黑边 #503

Merged
auto-approve-bot merged 1 commits from fix/legacy-audio-normalize-and-pad into develop 2026-07-18 13:52:11 +08:00
Owner

问题

渲染引擎挑素材——横屏/竖屏/不同帧率/不同采样率的素材混在一起,concat必崩exit=234。渲染引擎的基本功是:任何素材进来都必须能统一规格后出片。

根因定位

P0: 音频完全没有归一化(exit=234 主因)

concat 前音频流直接拼接,没有统一采样率、声道数、采样格式。

  • clip_0: 48000Hz stereo AAC
  • clip_1: 44100Hz mono AAC
  • → concat 失败,exit=234

P1: 视频用crop裁剪而不是pad留黑边

原实现 scale + crop 会裁掉超出部分的画面内容。横屏素材做竖屏输出时,左右内容被裁掉。

修复内容

1. 音频归一化(P0)

concat 前每个音频流加 aformat 滤镜,统一为:

  • sample_rate = 48000 Hz
  • channel_layout = stereo(双声道)
  • sample_fmt = fltp(AAC标准浮点格式)

aformat → atrim → asetpts 顺序:先统一格式再裁剪。

2. 视频改为pad留黑边(P1)

scale + pad 方式,保持原始比例不裁剪内容:

  • scale=W:H:force_original_aspect_ratio=decrease 等比缩小
  • pad=W:H:(ow-iw)/2:(oh-ih)/2:black 居中+黑边填充

确保横屏/竖屏/正方形/任何分辨率的素材都能正常出片,不丢失内容。

测试

  • 更新 scale+crop 测试为 scale+pad
  • 新增音频 aformat 归一化测试
  • 39 个相关单测全部通过

关联 #406

## 问题 渲染引擎挑素材——横屏/竖屏/不同帧率/不同采样率的素材混在一起,concat必崩exit=234。渲染引擎的基本功是:任何素材进来都必须能统一规格后出片。 ## 根因定位 ### P0: 音频完全没有归一化(exit=234 主因) concat 前音频流直接拼接,没有统一采样率、声道数、采样格式。 - clip_0: 48000Hz stereo AAC - clip_1: 44100Hz mono AAC - → concat 失败,exit=234 ### P1: 视频用crop裁剪而不是pad留黑边 原实现 scale + crop 会裁掉超出部分的画面内容。横屏素材做竖屏输出时,左右内容被裁掉。 ## 修复内容 ### 1. 音频归一化(P0) concat 前每个音频流加 `aformat` 滤镜,统一为: - sample_rate = 48000 Hz - channel_layout = stereo(双声道) - sample_fmt = fltp(AAC标准浮点格式) aformat → atrim → asetpts 顺序:先统一格式再裁剪。 ### 2. 视频改为pad留黑边(P1) scale + pad 方式,保持原始比例不裁剪内容: - `scale=W:H:force_original_aspect_ratio=decrease` 等比缩小 - `pad=W:H:(ow-iw)/2:(oh-ih)/2:black` 居中+黑边填充 确保横屏/竖屏/正方形/任何分辨率的素材都能正常出片,不丢失内容。 ## 测试 - 更新 scale+crop 测试为 scale+pad - 新增音频 aformat 归一化测试 - 39 个相关单测全部通过 关联 #406
xiaoxia added the bugbackendP0 labels 2026-07-18 13:47:52 +08:00
xiaoxia added 1 commit 2026-07-18 13:47:52 +08:00
fix: legacy渲染引擎concat前音频不归一化导致exit=234 + 视频改为pad留黑边
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 / Production Browser E2E (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
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 16s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 17s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 23s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 47s
AI Code Review / AI Code Review (pull_request) Successful in 2m39s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 2m29s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 2m53s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m21s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 4m18s
Preview Cleanup / Cleanup Preview Environment (pull_request) Failing after 0s
cb3b8d4a77
音频归一化(exit=234根因):
- concat前每个音频流加aformat滤镜,统一为48000Hz + stereo + fltp
- 不同采样率/声道数的音频直接concat会导致FFmpeg退出码234

视频改为pad留黑边:
- scale force_original_aspect_ratio=decrease(等比缩小,不裁剪)
- pad到目标分辨率,居中+黑边填充
- 确保横屏/竖屏/任何分辨率素材都能正常出片,不丢失内容

关联 #406
Collaborator

代码审查结果 - PR #503

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

💡 建议(1个可选)

  1. apps/api/app/services/video_compose_service.py 第547行:音频参数硬编码
    • 建议将 sample_rates=48000channel_layouts=stereo 等参数提取为类常量或配置项,以便未来支持不同的音频输出标准(如 44100Hz 或 5.1 声道),避免硬编码导致灵活性降低。

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 13:50:32 | 模型:

## 代码审查结果 - PR #503 ### ⚠️ 问题(0个需要修改) 无 ### 💡 建议(1个可选) 1. **apps/api/app/services/video_compose_service.py 第547行**:音频参数硬编码 - 建议将 `sample_rates=48000`、`channel_layouts=stereo` 等参数提取为类常量或配置项,以便未来支持不同的音频输出标准(如 44100Hz 或 5.1 声道),避免硬编码导致灵活性降低。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 13:50:32 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
auto-approve-bot approved these changes 2026-07-18 13:50:46 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit c08ef726f7 into develop 2026-07-18 13:52:11 +08:00
auto-approve-bot deleted branch fix/legacy-audio-normalize-and-pad 2026-07-18 13:52:11 +08:00
Sign in to join this conversation.