openverse-sfx
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chineseopenverse-sfx: Free Licensed Sound Design for Video, Verified by Measurement
openverse-sfx:免费授权视频声音设计,以测量结果验证
You cannot hear. Every decision in this skill is made by measurement (, , waveform plots) and verified on the exported file - never by feel, and never tell the user it sounds good. Hand them a short list of timestamps to check with headphones instead.
librosaffmpeg ebur128All audio comes from Openverse (): 5.2M free audio files, no API key, $0. Never synthesize music or sound effects in code - no sine-wave beeps, no noise bursts. Use real licensed recordings only.
https://api.openverse.org你无法直接听到声音。本 skill 中的每项决策都基于测量结果(、、波形图),并在导出的文件上进行验证——绝不凭感觉判断,也绝不要告诉用户它听起来不错。改为向用户提供一组简短的时间戳,供他们使用耳机检查。
librosaffmpeg ebur128所有音频均来自 Openverse():包含 520 万个免费音频文件,无需 API key,费用为 $0。绝不要在代码中合成音乐或音效——不要使用正弦波蜂鸣声或噪声爆发。只使用真实且已授权的录音。
https://api.openverse.orgCritical Rules
关键规则
- License filter is mandatory. Only use Openverse results with and
license=cc0,by,pdm.source=freesound,jamendoenforces this - do not bypass it.scripts/sfx_search.py - One search per kind of sound. Anonymous Openverse use is limited to ~200 searches/day. Search once per sound kind (,
"whoosh","ui pop") and pick from the shortlist. Do not re-search with rephrased queries."upbeat loop" - is not optional. CC BY audio is only legal to use with credit. Every downloaded file's
credits.txtfield goes intoattributionverbatim.credits.txtdoes this automatically. CC0/PDM need nothing, but log them anyway.scripts/sfx_fetch.py - Prerequisites first. If missing, install before starting: , and
ffmpeg.pip install librosa matplotlib numpy scipy - Measure the exported MP4, never the pre-export WAV. AAC compression and mono phone playback change the result; only the shipped file counts.
- 必须使用许可证过滤器。 仅使用 且
license=cc0,by,pdm的 Openverse 搜索结果。source=freesound,jamendo会强制执行这些限制——不要绕过它。scripts/sfx_search.py - 每种声音只搜索一次。 Openverse 匿名使用每天最多约 200 次搜索。每种声音类型只搜索一次(、
"whoosh"、"ui pop"),然后从候选列表中选择。不要使用改写后的查询重复搜索。"upbeat loop" - 不是可选项。 CC BY 音频只有在提供署名的情况下才能合法使用。每个下载文件的
credits.txt字段都应原样写入attribution。credits.txt会自动完成此操作。CC0/PDM 无需署名,但仍要记录。scripts/sfx_fetch.py - 先检查前置条件。 如果缺少依赖,请先安装再开始:安装 ,并执行
ffmpeg。pip install librosa matplotlib numpy scipy - 测量导出的 MP4,绝不测量导出前的 WAV。 AAC 压缩和手机以单声道播放都会改变结果;只有最终交付的文件才有效。
Workflow
工作流
Step 1 - Music
第 1 步 - 音乐
Use a track the user gave you, or search Openverse for one (). Note the source and license. Download it with into so its attribution lands in .
python3 scripts/sfx_search.py --query "upbeat loop" --min-ms 15000scripts/sfx_fetch.pysfx/credits.txt使用用户提供的音轨,或在 Openverse 中搜索一首()。记录来源和许可证。使用 将其下载到 ,这样其 attribution 就会写入 。
python3 scripts/sfx_search.py --query "upbeat loop" --min-ms 15000scripts/sfx_fetch.pysfx/credits.txtStep 2 - Beat Grid
第 2 步 - 节拍网格
Run . It plots the sub-120 Hz waveform (where the kick drum lives) against the detected beat grid, detects off-beat lock numerically, and writes . Open : red lines must sit ON the kick spikes. If they don't, shift the whole grid by half a beat interval (the script checks this numerically and shifts automatically when the half-beat alignment scores >5% higher).
python3 scripts/beat_grid.py sfx/<music_file>beats.jsonbeatgrid.png运行 。该脚本会将低于 120 Hz 的波形(底鼓所在频段)与检测到的节拍网格叠加绘制,以数值方式检测节拍锁定偏差,并写入 。打开 :红线必须位于底鼓波峰上。如果不在,则将整个网格平移半个节拍间隔(脚本会进行数值检查;当半节拍对齐得分高出 5% 以上时,会自动完成平移)。
python3 scripts/beat_grid.py sfx/<music_file>beats.jsonbeatgrid.pngStep 3 - Put Big Moves on the Beat
第 3 步 - 让大动作落在节拍上
Scene cuts, titles appearing, big animations: place them on beats from . If you can change the animation, snap the cut to the nearest beat. If you can't, shift where the music starts so the existing cuts land on beats ( / on the music input).
beats.json-itsoffsetadelay场景切换、标题出现、大型动画:将其放置在 中的节拍上。如果可以更改动画,将切换点吸附到最近的节拍。如果不能,则平移音乐起点,使现有剪辑点落在节拍上(在音乐输入上使用 / )。
beats.json-itsoffsetadelayStep 4 - One Ready-Made SFX per Cut and Big Move
第 4 步 - 为每次剪辑和大动作配备一个现成 SFX
Use the project's existing sound library first if it has one; ask the user if a needed sound is missing. Otherwise, run one call per kind of sound: whoosh for movement, pop for things appearing, click for clicks, typing sounds for typing. Pick the best fit for each shot's action from the shortlist, and download each pick with .
sfx_search.pysfx_fetch.py如果项目已有声音库,请先使用;如果缺少所需声音,则询问用户。否则,针对每种声音类型运行一次 :移动用 whoosh、物品出现用 pop、点击用 click、输入文字用 typing sounds。从候选列表中为每个镜头的动作选择最合适的声音,并使用 下载每个所选文件。
scripts/sfx_search.pyscripts/sfx_fetch.pyStep 5 - Mix with the Right Hierarchy
第 5 步 - 按正确层级混音
- Voiceover is the loudest layer; music drops while someone talks (sidechain duck or manual volume automation).
- Sound effects sit above the music, and source files arrive at wildly different loudness - normalize every layer by measurement, never fixed volume multipliers:
- SFX one-shots peak-normalized to -3 dBTP with (one-shots cut through by transient, so peak not LUFS; and NEVER run
scripts/sfx_normalize.pyon a short SFX - its 3-second buffer destroys short files).ffmpeg loudnorm - Music bed normalized to -20 LUFS.
- Exact commands are in .
references/ffmpeg_recipes.md
- SFX one-shots peak-normalized to -3 dBTP with
- Target -16 LUFS integrated, true peak below -4 dBFS on the shipped MP4, so nothing clips after AAC compression or on a phone speaker in mono. Master to : the AAC encode adds ~0.3-0.6 dB of overshoot and a
TP=-4.5master comes back off the mux failing the gate.-4.0 - Read for the exact
references/ffmpeg_recipes.mdcommands for ducking, SFX placement at beat times, and two-passffmpeg.loudnorm
- Voiceover 是最响的一层;有人说话时应降低音乐音量(使用 sidechain ducking 或手动音量自动化)。
- 音效层应高于音乐,而且源文件的响度差异极大——始终通过测量来归一化每一层,绝不使用固定音量倍数:
- 使用 将 SFX one-shot 峰值归一化到 -3 dBTP(one-shot 依靠瞬态突出,因此应使用峰值而非 LUFS;并且绝不要对短 SFX 运行
scripts/sfx_normalize.py,其 3 秒缓冲会破坏短文件)。ffmpeg loudnorm - 将音乐铺底归一化到 -20 LUFS。
- 确切命令见 。
references/ffmpeg_recipes.md
- 使用
- 目标是在交付的 MP4 上达到 -16 LUFS integrated,真峰值低于 -4 dBFS,确保 AAC 压缩后或手机单声道扬声器播放时都不会削波。母带目标设为 :AAC 编码会增加约 0.3-0.6 dB 的过冲,而
TP=-4.5母带在封装后回读时会超出限制,无法通过门槛。-4.0 - 阅读 ,了解用于 ducking、在 cue 时间放置 SFX,以及将
references/ffmpeg_recipes.md双遍处理到loudnorm/-16 LUFS的确切-4 dBTP命令。ffmpeg
Step 6 - Verify the Export, Then Hand Over Check Points
第 6 步 - 验证导出,然后交付检查点
Run with every cue time. It measures the exported MP4 with , grabs one frame before and after every cue from the MP4, and plots the exported waveform with cue lines. Confirm loudness and peak pass, and that each cue sits on a waveform spike and its frames show the cut/title. Then give the user 5 timestamps to check with headphones and the path to . Do not claim it sounds good.
python3 scripts/verify_mix.py final.mp4 --cue <t1> --cue <t2> ...ebur128credits.txt使用每个 cue 时间运行 。它会通过 测量导出的 MP4,从 MP4 中截取每个 cue 前后各一帧,并绘制带 cue 标线的导出波形。确认响度和峰值通过检查,并确认每个 cue 位于波形波峰上,且对应帧显示剪辑或标题。然后向用户提供 5 个时间戳,供其使用耳机检查,并提供 的路径。不要声称它听起来不错。
python3 scripts/verify_mix.py final.mp4 --cue <t1> --cue <t2> ...ebur128credits.txtScripts
脚本
| Script | Purpose |
|---|---|
| Openverse search, license/source filters enforced ( |
| Downloads the chosen file into |
| |
| |
| |
| 脚本 | 用途 |
|---|---|
| Openverse 搜索,强制执行许可证和来源过滤器(来自 |
| 使用 Python 标准库( |
| |
| |
| 对导出的 MP4 进行 |
References
参考资料
- - exact
references/ffmpeg_recipes.mdcommands for beat-shifting music, placing SFX at cue times, voiceover sidechain ducking, and two-passffmpegtoloudnorm/-16 LUFS. Read it before writing any-4 dBTPcommand.ffmpeg
- - 用于偏移音乐节拍、在 cue 时间放置 SFX、旁白 sidechain ducking,以及将
references/ffmpeg_recipes.md双遍处理到loudnorm/-16 LUFS的确切-4 dBTP命令。编写任何ffmpeg命令前先阅读它。ffmpeg