fix(render_audio): drop source video audio in mix_audio (#1249)
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 1m8s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 1m25s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 2m28s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 3m18s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 4m46s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 5m8s
CI/CD Pipeline / Integration Tests (push) Successful in 1m30s
CI/CD Pipeline / Unit Tests (push) Successful in 9m23s
CI/CD Pipeline / Build Staging API Image (push) Successful in 12m13s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 1m24s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 40s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 1m14s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m19s
CI/CD Pipeline / Canary Release to Production (push) Failing after 980h11m34s
CI/CD Pipeline / Deploy Production (push) Failing after 980h19m8s
CI/CD Pipeline / CI Gate (push) Failing after 980h19m9s
CI/CD Pipeline / Build Production Web Image (push) Failing after 980h19m9s
CI/CD Pipeline / Build Production API Image (push) Failing after 980h19m9s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 980h28m30s
CI/CD Pipeline / PR Build Web Image (push) Failing after 980h28m31s
CI/CD Pipeline / PR Build API Image (push) Failing after 980h28m32s
CI/CD Pipeline / Frontend Lint (push) Failing after 980h28m33s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 980h28m34s
CI/CD Pipeline / Production Browser E2E (push) Failing after 980h52m27s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 980h52m28s
CI/CD Pipeline / Validate - Migration (alembic) (push) Successful in 1m8s
CI/CD Pipeline / Validate - Type Check (mypy) (push) Successful in 1m25s
CI/CD Pipeline / Build Staging Web Image (push) Successful in 2m28s
CI/CD Pipeline / Frontend Unit Tests (push) Successful in 3m18s
CI/CD Pipeline / Validate - Code Quality (push) Successful in 4m46s
CI/CD Pipeline / Build Staging Worker Image (push) Successful in 5m8s
CI/CD Pipeline / Integration Tests (push) Successful in 1m30s
CI/CD Pipeline / Unit Tests (push) Successful in 9m23s
CI/CD Pipeline / Build Staging API Image (push) Successful in 12m13s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (push) Successful in 1m24s
CI/CD Pipeline / ACR Image Cleanup (push) Successful in 40s
CI/CD Pipeline / Staging E2E Tests (push) Successful in 1m14s
CI/CD Pipeline / Staging API Integration Tests (push) Successful in 3m19s
CI/CD Pipeline / Canary Release to Production (push) Failing after 980h11m34s
CI/CD Pipeline / Deploy Production (push) Failing after 980h19m8s
CI/CD Pipeline / CI Gate (push) Failing after 980h19m9s
CI/CD Pipeline / Build Production Web Image (push) Failing after 980h19m9s
CI/CD Pipeline / Build Production API Image (push) Failing after 980h19m9s
CI/CD Pipeline / PR Build Worker Image (push) Failing after 980h28m30s
CI/CD Pipeline / PR Build Web Image (push) Failing after 980h28m31s
CI/CD Pipeline / PR Build API Image (push) Failing after 980h28m32s
CI/CD Pipeline / Frontend Lint (push) Failing after 980h28m33s
CI/CD Pipeline / Check if frontend-only change (push) Failing after 980h28m34s
CI/CD Pipeline / Production Browser E2E (push) Failing after 980h52m27s
CI/CD Pipeline / Build Production Worker Image (push) Failing after 980h52m28s
This commit was merged in pull request #1249.
This commit is contained in:
@@ -82,14 +82,12 @@ def mix_audio(
|
||||
"""音频后处理混音.
|
||||
|
||||
处理逻辑:
|
||||
1. 主音频源按优先级查找:main > broll(background 不参与主音频,通常是图片无音轨)
|
||||
2. 主图层音频按顺序 concat 拼接
|
||||
3. 独立音频轨(audio role)用 amix 混入
|
||||
4. 输出时长截断到 video_duration
|
||||
5. 无音频流的 clip 会被自动跳过,避免 FFmpeg 引用 [i:a] 失败
|
||||
6. 如果提供了 bgm_path,则额外混入 BGM(支持淡入淡出、循环、人声闪避)
|
||||
7. 如果配置了 audio_tracks,则混入多轨道音频(配音、音效等)
|
||||
8. 如果配置了降噪,最后应用降噪
|
||||
1. 丢弃主图层(main/broll/overlay/corner_voice)的原始音频,避免录入源视频杂音
|
||||
2. 仅使用独立音频轨(audio role,TTS/配音)作为主音频
|
||||
3. 如果提供了 bgm_path,则额外混入 BGM(支持淡入淡出、循环、人声闪避)
|
||||
4. 如果配置了 audio_tracks,则混入多轨道音频(配音、音效等)
|
||||
5. 输出时长截断到 video_duration
|
||||
6. 如果配置了降噪,最后应用降噪
|
||||
|
||||
Args:
|
||||
ctx: 渲染上下文
|
||||
@@ -125,8 +123,10 @@ def mix_audio(
|
||||
if "audio" in layer_map:
|
||||
audio_clips = layer_map["audio"].clips
|
||||
|
||||
# ── 丢弃源视频的原始音频(避免录入杂音),成片仅保留 TTS 配音 + BGM ──
|
||||
main_clips = []
|
||||
|
||||
# ── 防御:过滤掉无音频流的 clip ──
|
||||
main_clips = [c for c in main_clips if clip_has_audio(ctx, c)]
|
||||
audio_clips = [c for c in audio_clips if clip_has_audio(ctx, c)]
|
||||
|
||||
if not main_clips and not audio_clips:
|
||||
@@ -144,12 +144,21 @@ def mix_audio(
|
||||
# 构建音频处理命令
|
||||
output_path = ctx.work_dir / f"audio_{ctx.plan_id}.aac"
|
||||
|
||||
# 简单场景:只有主图层 + 无独立音频 → 直接从视频提取音频并拼接
|
||||
if main_clips and not audio_clips:
|
||||
concat_main_audio(ctx, main_clips, output_path, video_duration)
|
||||
# 源视频原始音频已被丢弃(main_clips = []),最终音频完全由独立音频轨 + BGM + 多轨配置组成。
|
||||
# 当无 main_clips 时,将独立音频轨作为主音频走 concat 拼接;当二者均有则走 amix 混音。
|
||||
if main_clips:
|
||||
effective_main = main_clips
|
||||
effective_audio = audio_clips
|
||||
else:
|
||||
effective_main = audio_clips
|
||||
effective_audio = []
|
||||
|
||||
# 简单场景:只有主音频 + 无独立音频 → 直接拼接
|
||||
if effective_main and not effective_audio:
|
||||
concat_main_audio(ctx, effective_main, output_path, video_duration)
|
||||
else:
|
||||
# 有独立音频轨 → amix 混音
|
||||
mix_with_independent_audio(ctx, main_clips, audio_clips, output_path, video_duration)
|
||||
mix_with_independent_audio(ctx, effective_main, effective_audio, output_path, video_duration)
|
||||
|
||||
# ── BGM 混音 ──
|
||||
if bgm_path and bgm_config and bgm_config.get("enabled", False):
|
||||
|
||||
Reference in New Issue
Block a user