fix(worker): render_plan 保留视频原声并尊重每clip音量 #1474
Reference in New Issue
Block a user
Delete Branch "fix/render-plan-audio-integrity"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
用户反馈:最终生成视频与预览不一致,其中明显问题是成片没有原声(
has_audio=False)。根因
apps/worker/video_processing/render_audio.py的mix_audio中存在:这是 PR #1249(8月6日)为"避免录入杂音"加入的硬编码,无条件丢弃 main/broll 图层所有视频素材的原声。走新路径
RenderAdapter.render_plan(从 DB 直接渲染)时,多片段场景调用mix_audio,原声被全部丢掉,导致成片无声。同时直通(pass-through)单片段路径用
has_audio = role != "background"硬判断,既不探测真实音频流,也不应用每片段的config.volume(静音片段仍输出声音)。改动
main_clips = [],保留 main/broll 原声;过滤无音频流片段;volume=0静音片段不送入 concat。_clip_volume(),concat_main_audio单clip/多clip 路径均应用volume滤镜。_render_pass_through改为先probe_has_audio再决定是否编码音频,并应用 per-clip volume。test_unified_render_service中所有"原声被丢弃"的旧断言为新行为。test_original_audio_retained.py(9 个回归测试)。验证
联动
前端需确保正式生成与预览都传 source_edit_plan_id(前端 Agent 任务一/二),否则会走内存模式,仍可能与预览不一致。
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
代码审查结果 - PR #1474
⚠️ 问题(0个需要修改)
无
💡 建议(2个可选)
_clip_volume函数在两个文件中完全重复,建议提取到公共工具模块(如ffmpeg_utils.py或新建clip_utils.py)以避免代码冗余和维护成本。role == "background"时无音频 (has_audio = False)。如果未来业务背景支持视频素材且需保留原声,此处会导致静音。建议添加注释说明该假设,或在probe_has_audio失败时考虑更灵活的降级策略。✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能无明显问题
🤖 由 AI 代码审查机器人自动生成 | 2026-08-23 17:10:45 | 模型:
🗑️ 预览环境已清理
PR #1474 已关闭或合并,对应的预览环境已被清理。