mcpField
S
sound-effects

sound-effects

github.com/barty-bart创意与媒体9341.3k 次安装2 周前更新
代码仓库

关于 sound-effects

Sound effects 是用于动效视频配音的技能,面向 Claude Code 和 Codex 工作流。它按视频提示匹配授权音效,测量导出混音,并提供时间点供戴耳机复核。

主要功能

  1. 01将视频提示映射到音效类别
  2. 02使用内置和运行时音效库
  3. 03按视频用途核查许可证
  4. 04让剪辑和揭示画面对齐音乐节拍
  5. 05测量并检查导出音频
  6. 06生成提示检查图和来源清单

适用场景

  1. 01为动效剪辑添加音效
  2. 02让视频剪辑和揭示画面对齐音乐节拍
  3. 03发布视频前核查音效许可证
  4. 04检查导出文件的混音电平和提示时间

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/barty-bart/motion-graphics --skill sound-effects

安装后在 Claude Code 中输入/sound-effects确认已加载。

详细介绍

音效

Claude 听不到声音。因此,此技能绝不会凭感觉评判声音:它会测量每个步骤,并提供 5 个时间戳供用户戴上耳机检查。它绝不会说“听起来不错”。

此方法采用 Vox 的 sound-pass 提示词(@Voxyz_ai,https://x.com/Voxyz_ai/status/2109358372873183564,2026 年 10 月 11 日)。请保留此署名。

默认套件(先用这个)

sfx/manifest.json → default_kit:每个核心类别一种音效,由 Bart 凭听感挑选(2026 年 10 月 12 日)。除非用户另有要求,否则使用此套件。

类别音效来源
呼啸声qubodup 的 “Whoosh”随附的 sfx/kit/whoosh.ogg(CC0)
点击声adh.dreaming 的 “Classic Click”随附的 sfx/kit/click.ogg(CC0)
啵声ethernel0 的 “POP SFX Neutral”随附的 sfx/kit/pop.ogg(CC0)
渐强音“Cinematic Riser #3 subtle”随附的 sfx/kit/riser.ogg(CC0)
冲击声peoplearehappy 的 “soft_impact3”随附的 sfx/kit/impact.ogg(CC0)
滴答声Squirrel_404 的 “Click / Tick”随附的 sfx/kit/tick.ogg(CC0)
打字声Mixkit 的 “Fast laptop keyboard typing”(#1392)运行时下载到 <out>/sound-effects-cache/(Mixkit 许可:绝不可提交)

清单中的其他内容都是备选项(alt_categories 列出可相互替代的类别)。署名信息请见 TOP-PICKS.md。

规则

  • 绝不要用代码合成音乐或音效(不得使用振荡器或正弦波哔声)。请使用真实录制的文件。
  • 音效:优先使用随附的素材库。 sfx/manifest.json 列出了每个文件的类别、时长、来源和许可。所有随附文件均为 CC0。
  • 如果随附素材库中没有合适的内容,请使用清单中的 runtime 条目(Mixkit)。将其下载到用户的项目中,绝不要下载到此技能文件夹,也绝不要提交。Mixkit 允许在视频中使用,但不允许单独再分发。
  • **音乐:**使用用户提供的曲目,或使用 MUSIC.md 中的曲目(按感觉推荐的免费曲目,运行时下载,绝不提交)。请将来源和许可写入 SOUND.md。如果用户没有曲目,请从 MUSIC.md 中推荐 2–3 首适合该视频的曲目供用户选择。
  • **许可:**只有 CC0 和 Mixkit Free License 算作免费且安全;脚本会检查每个使用的音效。不要逐个列出音效的许可。如果所有许可信息都已确认,只需告知用户一次:来源标注这些音效采用 CC0 或 Mixkit Free License;来源可能会更改许可条款,因此请不时查看来源页面。如果脚本报告许可未知,请指出具体音效、其许可和来源链接,并告诉用户在确认或更换之前不要发布。绝不要说许可未知的音效大概没问题。
  • **音乐许可:**询问曲目的来源,并传入 --music-source "track, artist, link" 和 --music-license "..."。如果不传入这些参数,本次运行会将音乐标记为 LICENCE NOT CONFIRMED;请明确说明这一点。
  • **署名:**每次运行都会生成 CREDITS.txt,其中列出实际使用的音效和音乐,可直接粘贴使用。只需推荐一次:可选将其用于 YouTube、Instagram 或 TikTok 的描述;CC0 无需署名,但如果平台对音频提出异议,该清单可作为来源证明。
  • 测量导出的 MP4,绝不要测量中间 WAV。
  • 测量导出的 MP4,绝不要测量中间 WAV。

0. 许可检查(编辑期间,在导出前)

素材来源的条款会变化,因此每次最终导出前,都要检查此视频实际使用的内容当前适用的条款:

  1. 使用场景。 询问视频将发布在哪里,除非已经明确(例如“我的 YouTube 视频”):YouTube、Instagram、TikTok、其他社交平台、在线广告、播客、客户项目、电视或广播、电子游戏、CD 或 DVD,或供他人使用的模板或工具。将其作为 --use-case "..." 传入,以便写入 SOUND.md。
  2. 素材来源。 对此视频中使用的每个素材来源(CREDITS.txt 中列出的提供方,以及音乐),打开其当前的许可页面(通过网页抓取;如果网站拦截,则使用用户的浏览器),并检查两点:条款仍与下表所述一致,且允许该使用场景。对于 Freesound,打开每个实际使用的声音对应的页面,确认页面仍标明 Creative Commons 0。对于音乐,打开曲目页面。
  3. 如实报告,每个素材来源一行:“今日已检查:Mixkit Stock Music Free License,条款未变,允许用于 YouTube。”如果某个来源的条款已变,或不允许该使用场景,请指出具体的声音或曲目以及原因,并在导出前替换。绝不要说未经检查或情况不明的许可没有问题。
来源许可页面允许的用途(于 13 Oct 2026 检查)不允许的用途
Freesound,CC0声音自身的页面任何用途,无需署名无(CC-BY 需要署名;商业用途绝不能使用 CC-BY-NC)
Kenneykenney.nl 上的素材包页面任何用途(CC0)无
Mixkit 音效https://mixkit.co/license/#sfxFree网页、社交平台、播客、游戏、电影、CD/DVD、电视/广播单独或内置于工具或模板中再分发文件;将其注册到版权管理服务
Mixkit 音乐https://mixkit.co/license/#musicFreeYouTube、社交平台、在线广告、播客、教育CD/DVD、电视/广播、电子游戏、混音、注册到 Content ID

Mixkit 禁止“在工具或模板中”再分发其文件,因此此技能绝不存储 Mixkit 音效或音乐:这些文件会在运行时下载到用户的项目中。

1. 设置

需要 ffmpeg 和 Python 3.10+。安装到可删除的文件夹中:

python3 -m venv .sound-effects
.sound-effects/bin/pip install librosa soundfile numpy scipy matplotlib

2. 构建提示音列表

使用 ffprobe 读取视频的时长和 fps。列出每个需要声音的时刻。尽可能从合成源中提取这些时刻(HyperFrames/Remotion 时间线、GSAP 标签、motion-broll plan.json)。否则,使用 ffmpeg -i in.mp4 -vf "select='gt(scene,0.3)',showinfo" -f null - 检测场景切换。 将 cues.json 写为 [{"t": 2.0, "type": "scene_cut", "desc": "cut to card"}, {"t": 4.2, "type": "typing", "dur": 1.3, "desc": "..."}]。

提示音类型与素材库类别的映射关系(清单中的 category_map):

提示音类型类别说明
movement(滑动、镜头移动)whoosh提前 2 帧开始;选择与移动相匹配的长度
scene_cutwhoosh短促的 whoosh,提前 2 帧(transition 音效可作为替代)
appearpop与画面同时出现
clickclick与画面同时出现
typingtyping循环播放或修剪至 dur,音量低
build_upriser在下一个重击声结束
revealimpact音量最大的 SFX
successpop(ding 音效可作为替代)
error_or_techglitch
hover_or_small_uitick音量非常低(ui-blip 和 click 可作为替代)
bedambience铺在所有声音下方,可选

每个提示音使用一个音效。同一类别内变换不同音效版本,避免重复听起来机械生硬。

3. 节拍网格及检查

运行 librosa.beat.beat_track。librosa 有时会锁定在弱拍上。 对音乐进行低通滤波,截止频率低于 120 Hz,将前 4 小节的波形与节拍线一起绘制,并对比底鼓落点。如果底鼓没有落在线上,则根据偏移量中位数平移整个网格,然后重新绘图。向用户展示 beatgrid.png。

4. 让重大转场落在节拍上

硬切和揭示应落在节拍上。如果可以更改动画时长,就更改。如果不行,就移动音乐的起始位置(搜索偏移量,并选择剪辑与节拍误差最小的位置)。报告每次剪辑的误差,单位为 ms。

5. 放置音效并混音

优先级:旁白 > 音效 > 音乐。 音效下方的音乐底轨约为 -12 dB,遇到旁白时则降低 8–12 dB。 目标为约 -16 LUFS 综合响度,且真峰值低于 -4 dBFS,确保经过 AAC 压缩或在手机扬声器上播放时不会削波。导出、测量、调整增益或添加限制器,然后再次导出并测量:

ffmpeg -nostats -i after.mp4 -af ebur128=peak=true -f null - 2>&1 | tail -12
ffmpeg -nostats -i after.mp4 -ac 1 -af ebur128=peak=true -f null - 2>&1 | tail -12   # mono check

6. 验证效果

对于每个提示点,从导出的 MP4 中截取它前后各一帧,并绘制其附近的波形(checks/cue-XX.png)。然后选出风险最高的 5 个时间戳(节拍误差最大的位置、打字和上升音效等长音效,以及揭示部分),让用户戴上耳机检查。

原始质量文件

随附的音效是经过压缩的 OGG Vorbis 试听文件(经过裁剪、归一化,通常为单声道),适用于大多数视频。如果某个音效的质量不足以满足用途(有可听见的伪影、特写英雄音效、最终母带),请获取原始文件:

  • 在 sfx/manifest.json 中查找条目的 source_url。每个随附条目和 default_kit 条目都有此字段。
  • Freesound(freesound.org/people/<user>/sounds/<id>/):该页面上的 Download 按钮可下载原始文件。下载需要免费的 Freesound 账户,因此请让用户下载(或者在用户提供 API 密钥后使用)。
  • Kenney(kenney.nl/assets/<pack>):从该页面下载资源包 zip。清单中每个 Kenney 条目的 original_file 都会注明确切文件,例如 kenney_interface-sounds.zip → Audio/click_001.ogg。规则:去掉前缀(kenney-interface- → interface-sounds、kenney-ui- → ui-audio、kenney-digital- → digital-audio、kenney-impact- → impact-sounds、kenney-sci- → sci-fi-sounds),然后在 Audio/ 中匹配其余部分,忽略大小写,并将 - 视为 _(kenney-digital-phaserup1 → Audio/phaserUp1.ogg、kenney-impact-impactpunch-heavy-000 → Audio/impactPunch_heavy_000.ogg)。Kenney 的原始文件也是 OGG 格式,但未经处理。
  • 将原始文件保存在用户的项目中(例如 sound-effects-cache/originals/),不要保存在此技能文件夹中,并通过 --swaps 将文件传给脚本,或编辑清单副本。应用与随附文件相同的裁剪和音量。

查找更多音效

当用户想要更多或不同的音效时,请搜索以下来源,为每个候选音效提供链接、创作者和许可信息,并推荐 3–5 个选项供用户选择。使用任何音效前,先打开其页面,确认页面当前显示的许可,并检查该许可是否允许用户的使用场景(步骤 0);将其添加到 CREDITS.txt。只能按照许可允许的方式使用或再分发音效。音乐请参阅 MUSIC.md。

来源搜索许可说明
Freesoundhttps://freesound.org/search/?q=<words>&f=license:"Creative Commons 0"使用 CC0 筛选条件。CC0 音效可以随项目打包,无需署名(但仍应署名)。CC-BY 音效需在视频说明中署名;绝不要打包 CC-BY-NC 音效,也不要将其用于商业用途。
Kenneyhttps://kenney.nl/assets/category:Audio全部为 CC0。可免费使用和打包。
Mixkithttps://mixkit.co/free-sound-effects/<category>/(例如 whoosh、typing)Mixkit SFX Free License:可用于视频,包括营利视频,但不得再分发。仅在运行时将其下载到用户的项目中;绝不要提交到代码库或打包。
Pixabayhttps://pixabay.com/sound-effects/search/<words>/可免费用于视频,无需署名,但不得单独再分发。由用户在浏览器中下载;绝不要打包。
Sonniss GDC bundleshttps://sonniss.com/gameaudiogdc/可免版税地用于视频;不得再分发原始音频或用于 AI 训练。仅限本地使用。
YouTube Audio LibraryYouTube Studio → Audio Library仅限用于 YouTube 视频;只能在 Studio 中获取。绝不要打包。

只有 CC0 音效可以添加到此代码库的 sfx/ 文件夹中;每个音效都必须有一条清单记录(文件、类别、时长、source_url、许可、署名信息),并在 LICENSES.md 中添加一行。

脚本

scripts/sound_pass.py 会端到端运行步骤 3–6:

.sound-effects/bin/python scripts/sound_pass.py --video silent.mp4 --cues cues.json \
  --music track.mp3 --manifest sfx/manifest.json --out out/

确认后,添加 --use-case "..." 和 --music-source/--music-license。该脚本会生成 after.mp4、report.html、SOUND.md(许可检查、日志、提示词 → 文件表、LUFS 和峰值数值、5 个时间戳)、CREDITS.txt、beatgrid.png 和 checks/。查看日志并修正所有超过目标值的项目。如果更改了动画时间,先重新渲染。

7. 替换报告中的音效

sound_pass.py 也会生成 report.html。该报告会列出每个提示词及其时间戳、类别、所用音效(带播放按钮)、来源页面、许可和署名信息,还会列出该类别的备选音效,每个备选项都带有播放按钮和“让模型决定”选项。为用户打开报告。用户选择后,点击 Download swaps.json,然后使用 --swaps swaps.json 重新运行。"auto" 表示从备选音效中另选一个。多次运行时保持提示词索引稳定。

向用户报告

报告许可检查结果(全部已知,或列出每个许可未知的音效名称)、使用场景及是否允许、音乐来源和许可(或说明尚未确认)、CREDITS.txt 是否已就绪(供用户按需查看)、节拍网格结果(是否已偏移,以及偏移量)、切点与节拍的误差、最终 LUFS 和真峰值(立体声和单声道),以及 5 个时间戳。不要告诉用户音效听起来不错。

评论

支持 Markdown