Communitygithub.com

AnayDhawan/openvidstudio-bgmusic

当视频需要背景音乐,而 openvidstudio 内置的两个合成音轨无法满足需求时使用,或用户提到“找音乐”、“背景音乐”、“音乐垫”、“BGM”、“音乐太单调”、“想要低保真”等,或为演示、发布、宣传视频寻找曲目。该技能会搜索两个 CC0 公有领域目录,导入一条曲目,并将其塑造成合适的背景音乐垫。不适用于音效(由 plan_sound_effects 处理)也不适用于语音(由 generate_narration 处理)。

openvidstudio-bgmusic 是什么?

该技能旨在为视频创作提供高质量、免版税的背景音乐垫,避免使用单调的内置合成音轨。它通过搜索两个公有领域目录(btahir/open-lofi 和 SoundSafari/CC0-1.0-Music),找到符合特定情绪或场景的曲目。技能的工作流程清晰:首先使用 `find_music_bed` 根据用户描述(如“宁静专注的编程”、“温暖欢快”)搜索并推荐 3-5 首候选曲目,然后使用 `import_music_bed` 下载、裁剪、淡入淡出并将音量标准化到 -20 LUFS,确保音乐不会压倒旁白,最后使用 `plan_music_cues` 分析导出的音轨以创建可用的节拍标记。该技能非常适合创建发布、宣传或演示视频,其中音乐的情绪至关重要。它避免将整个目录克隆到项目中,而是按需下载单个曲目,从而节省存储空间和 API 调用次数。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/AnayDhawan/openvidstudio/tree/main/.agents/skills/bgmusic

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

bgmusic

为视频从公有领域目录中找到真实的背景音乐垫,无需下载库或注明出处。

当内置音轨足够时

public/sfx/ 已内置两个背景音乐垫,无需任何请求:

  • music-bed.mp3,一段 60 秒的环境无人机音。适用于简短的技术演示。
  • pulse-bed.mp3,112bpm,并带有 pulse-bed.cues.json 中的精确节拍网格。这是唯一一个节拍锁定剪辑精确无误的曲目,因为它是合成而非分析的。

当视频较短、以旁白为主导,或音乐仅需避免静音时,使用它们即可。如果视频是发布或宣传片,且背景音乐承载情绪,则应主动寻找。

两个目录

来源内容大小
lofibtahir/open-lofi,166 首低保真曲目,分为 10 个类别每首约 3MB
cc0SoundSafari/CC0-1.0-Music,约 9200 首曲目,来自 freepd、chosic、Free Music Archive、freesound 和 Pixabay每首 2-15MB

两者均为 CC0-1.0 许可。公有领域,商业用途允许,无需注明出处,无需在视频描述中提及。这就是为什么这两个目录被集成进来,而 plan_sound_effects 仍然让用户手动前往 Pixabay 寻找音效。

值得一提的是:该曲库由社区聚合,并依赖于下架请求,因此每首曲目的 CC0 声明来自维护者,并非您阅读过的许可证。对于产品视频来说这没问题,且来源文件会记录出处。如果错误的许可证代价高昂,请坚持使用 lofi,它只有一个作者、一个版本、一个许可证声明。

工作流程

find_music_bed -> [用户试听] -> import_music_bed -> plan_music_cues -> stitch_composition

1. find_music_bed

使用简单的情緒或场景词汇进行查询:"calm focus coding"、"late night neon"、"warm upbeat"。匹配的是标题和类别。

首次调用会构建一个索引,大约需要七次 GitHub API 调用,缓存在 output/music-index.json 中。后续搜索则读取本地缓存。仅当目录发布新版本时,才传递 refresh: true。

lofi 的类别是真实元数据,因此 category: "ambient-lofi" 有效。而语料库曲目没有类别:其文件名位于按来源网站命名的文件夹中。当没有匹配结果时,该工具会返回一个简单的样本,并将 matchedQuery 设置为 false。这是一个信号,提示应尝试作曲家实际会用在标题中的词汇,而不是放弃。

让用户选择。 返回三到五个候选曲目及其标题和类别。音乐是品味问题,错误的背景音乐比错误的字体更明显。

2. import_music_bed

import_music_bed(id: "lofi:terminal-rain", out: "public/audio/music-bed.mp3", seconds: 45, start: 12)

下载之外的功能:从 start 开始裁剪 seconds 长度、淡入淡出,并将音量标准化至 -20 LUFS,以便背景音乐垫置于旁白之下而非与之竞争。传递 raw: true 可跳过所有这些步骤,保留曲目的原始状态。

放置位置:

  • public/audio/music-bed.mp3 用于合成的背景音乐垫。stitch_composition 会自动附加该路径,因此其他部分无需更改。
  • public/imported_audios/(默认)用于其他任何内容,该文件夹存放来自内置包之外的材料。

它会写入 <file>.source.json 和在曲目旁添加一行 MUSIC-SOURCES.md:ID、标题、来源仓库、许可证、日期。CC0 要求无需任何此类信息。其存在是为了让一年后背景音乐垫的来源只需读取文件而不必猜测。

使用 start 跳转到曲目的中间部分。前奏通常是最无用的部分,而从重拍开始的背景音乐垫无需编辑就感觉是有意为之。

3. plan_music_cues

对导入的文件调用它。对于任何不是 pulse-bed.mp3 的曲目,节拍网格都是根据起始包络估计的,因此应将其视为规划指南:将少数重要的揭示点对齐到 strongCues,而不是每个剪辑点。docs/STYLE.md 中有公差说明。

成本与限制

  • 无任何内容被供应商化。open-lofi 仅在其 554MB 的发布压缩包中发布曲目,因此导入操作通过 HTTP 范围请求读取该压缩包的中央目录,并仅拉取所选曲目的字节。554MB 从未被完整下载。
  • 塑造背景音乐垫需要系统中安装 ffmpeg。raw: true 则不需要。
  • GitHub 未认证的 API 限制为每小时 60 次请求。一次索引构建大约消耗七次。在频繁重建索引的机器上设置 GITHUB_TOKEN。
  • 索引缓存位于 output/ 下,脚手架项目已将其加入 .gitignore。

注意事项

  • 不要将整个目录提交到项目中。每个视频一个背景音乐垫是这里的单位。
  • 不要将曲目放入 public/sfx/。该文件夹是随包提供的资源包,public/sfx/CREDITS.md 说明了其中的内容以及为何不附带任何条款。
  • 不要将其用于音效。plan_sound_effects 首先检查内置包,然后才去寻找,这是音效的正确顺序。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相关技能