From a628b4ca8e5c272f18710ef2d97f95c287f5a4e6 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 24 Aug 2026 00:15:24 +0800 Subject: [PATCH] fix: audio filter order (denoise before volume) + clarify reverse path comment - _render_pass_through: move volume filter after denoise to avoid amplifying noise before denoising - concat_main_audio: add comment explaining speed/reverse go through filter_complex else branch, not simple path --- apps/worker/video_processing/render_audio.py | 4 +++- apps/worker/video_processing/unified_render_service.py | 10 +++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/worker/video_processing/render_audio.py b/apps/worker/video_processing/render_audio.py index 9de62265f..bd0388d2c 100755 --- a/apps/worker/video_processing/render_audio.py +++ b/apps/worker/video_processing/render_audio.py @@ -278,7 +278,9 @@ def concat_main_audio( has_speed = abs(speed - 1.0) >= 1e-6 if not has_speed and not has_reverse: - # 无调速无倒放:简单命令行,-ss 裁剪更高效 + # 无调速无倒放:简单命令行,-ss 裁剪更高效。 + # 注意:有调速或倒放时走下方 else 分支(filter_complex),那里正确处理了 + # atrim/atempo/reverse/volume/aformat,单 clip 简单路径不需要这些。 command = [ FFMPEG_BIN, "-y", diff --git a/apps/worker/video_processing/unified_render_service.py b/apps/worker/video_processing/unified_render_service.py index 313b30e02..fc3286bdc 100755 --- a/apps/worker/video_processing/unified_render_service.py +++ b/apps/worker/video_processing/unified_render_service.py @@ -1290,11 +1290,7 @@ class UnifiedRenderService: if has_audio: af_parts: list[str] = [] - # 片段音量(原声=1.0,静音已在上层排除) - if abs(clip_volume - 1.0) >= 1e-6: - af_parts.append(f"volume={clip_volume:.4f}") - - # 音频降噪 + # 音频降噪(必须先降噪,再调整音量,否则音量放大会增加降噪难度) try: from video_processing.noise_reduction_engine import NoiseReductionConfig, NoiseReductionEngine @@ -1308,6 +1304,10 @@ class UnifiedRenderService: except Exception as e: logger.warning("[unified-render] 直通模式音频降噪应用失败,跳过: %s", e) + # 片段音量(原声=1.0,静音已在上层排除;降噪后再调音量) + if abs(clip_volume - 1.0) >= 1e-6: + af_parts.append(f"volume={clip_volume:.4f}") + # 音频调速(与视频setpts对应,保持音画同步) speed = UnifiedRenderService._clip_speed(clip) if abs(speed - 1.0) >= 1e-6: