
FireRed-OpenStoryline智能音乐卡点:如何做到BPM节拍分析与情绪驱动的BGM推荐【免费下载链接】FireRed-OpenStorylineFireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language interaction, LLM-powered planning, and precise tool orchestration. It facilitates transparent, human-in-the-loop creation with reusable Style Skills for consistent, professional storytelling.项目地址: https://gitcode.com/gh_mirrors/fi/FireRed-OpenStorylineFireRed-OpenStoryline是一个开源 AI 视频剪辑 Agent它能听懂你的自然语言需求自动搜索素材、生成文案并根据视频情绪智能推荐 BGM、精准卡点。本文带你拆解它的两大核心技术基于 librosa 的BPM 节拍分析以及由多模态模型驱动的情绪化 BGM 推荐流程让你明白AI 音乐卡点背后到底发生了什么。 智能 BGM 推荐:从听懂情绪到选出曲子整个推荐链路分为三步核心实现在 select_bgm.py 中的SelectBGMNode第 1 步:给曲库打情绪标签推荐的前提是系统懂你的每一首 BGM。项目提供了一键批量打标签脚本 omni_bgm_label.py它会扫描resource/bgms目录下的 mp3/wav 文件调用 Qwen3-Omni 多模态大模型听完每首音乐后输出结构化标签scene场景Vlog、Travel、Relaxing、Emotion、Cafe、Food……genre曲风Pop、Electronic、Rock、Jazz、Chinese Style……mood情绪Dynamic、Chill、Happy、Sorrow、Romantic、Inspirational……description一句话描述例如轻松愉快的电子乐适合旅行或日常 Vlog标签体系定义在提示词 omni_bgm_label.md 中结果写入meta.json。脚本用文件 MD5 做增量识别——没改过的歌不会重复打标省 token 又高效。第 2 步:向量召回 标签过滤当你在对话里说来一首治愈系纯音乐时系统先走全量向量召回recall.py 把候选音乐与用户请求做语义相似度匹配再由 element_filter.py 按场景、曲风、情绪等标签做 include/exclude 过滤快速收敛出最贴切的一批候选曲。第 3 步:LLM 终选——有且只有一条候选列表和用户需求一起送入大模型做最终裁决。系统提示词 select_bgm/zh/system.md 要求返回有且只有一条最适合的 json采样参数 temperature0.1保证结果稳定。如果模型输出解析失败还有降级策略直接取候选列表第一条保证流程不中断。 BPM 节拍分析:卡点是如何算出来的选完曲子analyze_music_metrics()会对音频做一套信号分析产出卡点所需的音乐指纹指标计算方式作用bpmlibrosa.beat.beat_track onset envelope每分钟节拍数节拍间隔的基准beats重音拍检测毫秒时间戳列表卡点的落点energy_meanRMS 均值音乐整体能量dynamic_range_db10%~95% 分位数差动态范围其中重音拍accent beats的计算_compute_accent_beats藏着不少工程细节打击乐分离先用librosa.effects.percussive抽出打击乐成分让鼓点更突出局部归一化用 8 拍滑动窗口做局部均值归一防止副歌太响导致重音全挤在响段落局部峰值约束只保留比前后拍都强的拍避免一段平台期被整体选中最小间隔抑制按强度排序后做贪心抑制相邻拍不会同时入选。最终输出形如[1250, 3500, 5750, ...]的毫秒级重音时间戳列表存进beats字段。⏱️ 卡点落地的关键:时间轴按拍分配时长节拍数据的真正价值在 plan_timeline.py。当use_beatsTrue时_allocate_clip_durations_using_beats()会让每个片段的时长对齐节拍间隔——画面切换恰好落在重音上这就是你看到的卡点效果。还有两层贴心兜底如果beats为空则回退用bpm推算均匀节拍间隔如果 BPM 也缺失则切换为无节拍分配策略_allocate_clip_durations_without_beats。相关采样参数sample_rate、hop_length、frame_length都可以在 config.py 中调整。️ 三步搭建你的私有 BGM 卡点库把私有音乐文件放入resource/bgms目录官方教程见 docs/source/zh/guide.md运行打标签脚本python -m scripts.omni_bgm_label重启 MCP 服务之后只需一句话选一首适合夜晚咖啡馆氛围的 BGM卡点剪辑。❓ 常见问题Q: 没有配 API Key 时还能用 BGM 推荐吗A: 可以。脚本会跳过新文件的打标已有标签仍生效推荐链路本身仍可运行。Q: 卡点不准怎么办A: 先检查选曲是否电子/鼓点明显的曲风再检查 config.py 中select_bgm的采样与帧参数纯氛围曲本身重音稀疏建议关闭use_beats改用自由时长分配。Q: 想复刻同一套选曲风格A: 项目支持把完整剪辑逻辑保存为 Style Skill下次换素材直接复用实现批量同款产出。 核心文件速查BGM 选择与 BPM 分析节点src/open_storyline/nodes/core_nodes/select_bgm.py时间轴卡点分配src/open_storyline/nodes/core_nodes/plan_timeline.py向量召回工具src/open_storyline/utils/recall.py曲库批量打标脚本scripts/omni_bgm_label.py选择提示词prompts/tasks/select_bgm/zh/官方使用指南docs/source/zh/guide.md从听懂情绪到算准拍子FireRed-OpenStoryline 用多模态理解 信号分析 LLM 裁决的组合拳把过去需要逐帧对拍的卡点工作变成了一句话的事。【免费下载链接】FireRed-OpenStorylineFireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language interaction, LLM-powered planning, and precise tool orchestration. It facilitates transparent, human-in-the-loop creation with reusable Style Skills for consistent, professional storytelling.项目地址: https://gitcode.com/gh_mirrors/fi/FireRed-OpenStoryline创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考