🎵 BGM 验证系统 — 多 Episode 端到端测试报告

bgm_verify.py (749行) + P14 quality_audit 集成 | 6项自动检查 | librosa 特征提取
2/5
通过
0.83
平均分
1/5
弧线匹配
6
检查维度

📊 全版本验证对比

Episode / 版本 来源 总分 结果 弧线匹配 能量曲线 (10段) BPM 频谱质心 段数 时长
ep-cat-worker-v3 (ACE-Step) ACE-Step AI (Section tags)
1.00
✅ 1.00 ▂▃▄▄█▆▄▅▅▁ 162 531Hz 1 35.9s
ep-cat-worker-v3 (SA3) SA3 AI (ambient)
0.88
✅ 跳过 ▄▅▇▆█▅▃▂▁▁ 144 1322Hz 1 35.9s
ep-cat-worker-v3 (素材库) kais-bgm 素材库 (fallback)
0.98
❌ 0.00 ▁▂▃▅▅▆▇▇▇█ 99 1762Hz 1 35.9s
ep-hamster-demolition (旧numpy) numpy 正弦波 (已废弃 R11)
0.60
❌ 0.14 ▁▁▃▇▄▁▄██▃ 0 420Hz 6 32.8s
ep-penguin-delivery (旧numpy) numpy 正弦波 (已废弃 R11)
0.68
❌ 0.15 ▂▁▇▂█▆▂▂▇▂ 0 415Hz 8 38.1s

🔍 关键发现

发现证据
✅ ACE-Step AI 弧线满分能量曲线 ▂▃▄▄█▅▄▅▅▁ — 中段爆发(0.181),结尾消散(0.001),完美匹配 rise_fall 弧线。Section 标签有效控制了情绪变化。
❌ 素材库 BGM 弧线不匹配能量曲线 ▁▁▂▇▆▆▆█▇▇ — 只增不减,结尾能量最高(0.134),不符合 Icarus 弧线。验证模块精确抓出此问题。
❌ 旧 numpy BGM 均不合格hamster 和 penguin 两个 episode 的 numpy 合成 BGM 弧线匹配仅 0.13/0.15,BPM=0(无法检测节拍),证实了 R11 规则(禁止 numpy 假音乐)的必要性。
✅ 多场景段落验证有效hamster(6段) 和 penguin(8段) 的 segment_energy_variation 检查通过,说明多段 BGM 的段落间能量变化被正确提取和评估。
✅ SA3 频谱分析准确SA3 centroid=1322Hz 落在「紧张」频段(300-2000Hz)内,spectral_mood 检查满分;ACE-Step centroid=531Hz 偏暗,适合悲剧氛围。

📋 6 项检查维度

检查项权重通过条件说明
duration_match15%|diff| < 0.5sBGM 时长 vs 视频时长
non_silent15%RMS mean > 0.01非静音检测(P14 阻断阈值 0.005)
dynamic_range20%RMS std > 0.02动态范围 — 排除平淡无变化的 BGM
arc_match25%弧线方向正确能量曲线 vs rise_fall / rising / falling
segment_energy15%段间 RMS std > 0.015多段 BGM 段落间有能量变化
spectral_mood10%centroid 在 mood 频段频谱亮度与情绪标签一致

🔧 P14 集成状态

行为说明
✅ 自动触发P14 quality_audit 末尾自动调用 _run_bgm_verification()
✅ 阻断条件仅 rms_mean < 0.005 (近数字静音) → critical → P11 rollback
⚠️ 非阻断 WARNINGscore < 0.6 或 arc_match 失败 → WARNING finding 写入 audit 报告
✅ 优雅降级librosa 缺失 / import 失败 / 文件不存在 → 跳过,不崩溃
✅ 超时保护SIGALRM 30s 硬超时(主线程);非主线程降级为无超时
Generated by bgm_verify.py v1.0 (749行) + p14_quality_audit.py (+175行) | librosa 0.10+ | 2026-08-11