Communitygithub.com

iamjeffia/estudio-ia

为视频和动画设计声音、进行混音。用于给每个出入元素添加音效、配乐、旁白、最终混音并输出带声音的预览,也可用于构建/扩充音效库、测量节拍和落点、分离人声或检查场景音是否过大。

estudio-ia 是什么?

这是一套专为视频与动画项目设计的声音工作流技能,适用于 After Effects、HyperFrames、Remotion 或手工剪辑的视频。该技能的核心思想是“每个可见动作都有对应的声音”,通过 `som.py` 脚本将音效精确对齐到关键帧,并自动完成混音与报告生成。它支持从音效库合成、校准到混音输出的完整流程,包括旁白、背景音乐、声音场景(环境与拟音)以及音乐处理(节拍检测、人声分离)。工作流强调纪律性:每个镜头最多两个音效同时发声、音峰落在事件画面上、音轨无混响、混音级别严格遵循 `06-metodo/regras.md` 中的标准表(如带人声与音乐的 master 为 -14 LUFS,峰值 ≤ -1 dBTP)。项目提供灵活的本地 `--mapa` 覆盖机制,允许为特定事件类型定义自定义音效组合。此外,`batida.py` 和 `separar.py` 脚本依赖 AI 模型(基于 beat_this 和 MelBand/BS-RoFormer),需要额外的 GPU/CPU 依赖,模型首次运行时会自动下载。所有命令从工作室根目录执行,最终输出包括 `mix.wav`、分离的 stems、录音报告以及预览视频。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/iamjeffia/estudio-ia/tree/HEAD/.agents/skills/som-do-video

在你喜欢的 AI 中提问

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

文档

视频声音

日期:2026-10-22 · 类型:技能 · 状态:有效

概述: 视频的声音来源于一个事件列表(每个出现在屏幕上、消失或碰撞的元素对应一个事件)以及一个命令 som.py,该命令将每个音效的峰值精确对齐到正确的帧,将音乐置于人声之下,并输出混音和报告。声音不必等待渲染:一旦动画的时间确定,声音就可以开始制作。混音的标准由唯一的拥有人 06-metodo/regras.md 管理;本技能提供方法、命令和主表。

何时使用

  • 任何包含运动、界面、教程、广告或仅需背景音乐且需要同步音效的视频。
  • 带旁白的视频:干声在前,音乐在下,音效适当降噪。
  • 看起来“死寂”的人物或场景视频:需要场景音(环境与拟音)。见 references/som-de-cena.md。
  • 处理音乐:测量节拍和落点(batida.py)或分离人声(separar.py)。

方法

  1. 每个可见动作对应一个声音,声音描绘动作。 卡片进入发出 pop,按钮发出 click,画面切换发出 whoosh,印章发出 bang,数字滚动发出 roll。密度按动作计算,而非按词语:人声下最多两个音效同时响起。
  2. 只有图像激发了声音才加入。 静态过渡中使用 whoosh、没有钟表的场景中使用时钟声、没有任何内容上升的 riser 都会让声音脱离视频。混音前,先观看视频并记录哪些东西在动、何时动、用什么材质。
  3. 音峰落在事件的画面上。 Click、pop、印章、撞击:音峰位于事件元素接触画面的帧上。Whoosh:音峰位于动作中间(大约开始后 0.2 秒;默认映射已实现此效果)。Riser:在落点或剪切处干燥结束。
  4. 调性仅用于高潮、过渡和惊喜。 撞击、印章和 logo 处使用和弦;大的过渡处使用短衬底;揭示时刻使用铃声。绝不在 click、pop 或按键上使用,否则会变成“小曲”并令人疲劳。仅在音乐已知调性时传递 --tom(例如 Am)。
  5. 音乐按时刻使用,而非背景毯。 轻柔开场;落点前减速;呼吸;在低音鼓上达到高潮。有旁白时,音乐保持远低于人声,在呼吸和无语音段落中升起。
  6. 落点前呼吸。 在落点前的最后一个节拍上,乐器声干燥下降约 0.3–0.5 秒(--drop T 实现此效果),关键词或最大的画面变化落在落点的第一个帧上。使用 batida.py 测量落点,而非目测。
  7. 仅在最密集处分层。 在落点、logo 和结尾处 2–3 个音效同时发声;其余时刻每个动作一个音效。当同一音效重复时,改变音量(映射会在类别中切换变种)。
  8. 干声。 旁白不带混响或回声。
  9. 聆听分离的层。 som.py 会写入 escuta/voz.wav、musica.wav、efeitos.wav 和 tonais.wav。同步性在效果 stem 中检查,而非混音轨道中。

主要参数

拥有人:06-metodo/regras.md。若其他位置指定了不同值,则以该文件为准。混音台已自动应用这些值。

项目值
带人声或音乐的 Master-14 LUFS 集成,真实峰值 ≤ -1 dBTP(限制器 4×)
人声下音乐有语音时 约 15 dB 低于(报告会测量;可接受 12–18)
无语音、有真实音乐的混音音轨先校准至 -19 LUFS;效果 ×2.2;限制器;Master -14
纯场景音片段-25 LUFS 集成(上限 -24),短期 ≤ -20,瞬时 ≤ -16,峰值 ≤ -3。绝不归一化至 -14
场景音与人声混合场景音 stem ≥ 15 LU 低于人声
音效库短音效 -20 LUFS 瞬时峰值,衬底 -24,峰值 ≤ -3 dBTP;位置 at = evento − pico_ms/1000
同步性效果 stem 中位数 ≤ 25 ms
节拍beat_this,File2Beats(checkpoint_path="final0");剪切不超过节拍 ±2 帧

分步指南

所有命令从工作室根目录运行。

  1. 音效库准备好了吗? 如果 05-biblioteca/som/sfx/catalogo.json 不存在:执行 uv run scripts/som/sintetizar_sfx.py。已录制的声音:uv run scripts/som/nivelar.py <pack 文件夹>(详情见 05-biblioteca/som/README.md)。
  2. 事件。 从动画引擎导出 eventos.json 到项目的 audio/ 文件夹。格式、接受的类型以及如何从 After Effects、HyperFrames 和 Remotion 导出:见 references/eventos.md。
  3. 有节拍的音乐? uv run scripts/som/batida.py musica.mp3 --fps 30 会给出 BPM、强拍和可能的落点。在该网格上制作剪切。
  4. 需要音乐中的人声或乐器部分? uv run scripts/som/separar.py musica.mp3(人声 + 乐器)或 --modo 6(六个 stem)。
  5. 混音:
    uv run scripts/som/som.py --eventos 04-projetos/<video>/audio/eventos.json \
      --voz 04-projetos/<video>/audio/voz.wav --musica 04-projetos/<video>/audio/musica.wav \
      --video 04-projetos/<video>/render/previa.mp4 --drop 12.4
    
    输出 mix.wav、escuta/*.wav、relatorio-som.json 和 previa-som.mp4(图像被复制;只有声音改变)。
  6. 阅读报告并纠正直到没有警告。 “eventos sem som” 表示映射不认识的类型:将类型改为已知类型,在事件中添加 "som": "categoria",或编写 --mapa(见下文)。LUFS、峰值和“音乐低于人声”超出目标范围也会出现警告。
  7. 场景音? uv run scripts/som/verificar_som_de_cena.py <仅场景混音> 或 ... escuta/efeitos.wav --voz escuta/voz.wav。不通过则不能交付。
  8. 聆听。 带声音的预览会发送给工作室拥有人批准。在最终视频中,运行相同命令加上 --video render/final.mp4:这仅仅是 remux,无需重新渲染。

项目自定义音效(--mapa)

一个包含 MAPA = {tipo: função(M, e)} 的 .py 文件,仅在你列出的类型上覆盖默认映射:

# 04-projetos/<video>/audio/mapa.py
MAPA = {
    "logo": lambda M, e: (M.poe("logo", e["t"], -11), M.poe("impacto", e["t"], -16), M.golpe(e["t"], -20)),
    "moeda": lambda M, e: M.poe("sucesso/sucesso-2", e["t"], -14, st=3),   # st = 半音升调
}

映射中可用的 Mesa 函数:M.poe(som, t, ganho_db, pan, alinha="pico"|"ini"|"fim", st=semitons, fim=duração, fade=s, sala=True)、M.tonal(t, lufs)、M.golpe(t, lufs)、M.textura(t0, t1, lufs)、M.riser(t_pico)。som 接受一个类别(如 "whoosh",会在变种间切换)、库中的文件(如 "whoosh/whoosh-2")或文件路径。

命令

脚本用途
uv run scripts/som/som.py --eventos E.json [--voz V] [--musica M] [--video P.mp4] [--tom Am] [--drop T] [--mapa mapa.py]完整混音、报告以及粘贴到视频上的声音
uv run scripts/som/sintetizar_sfx.py [--amostra prova.wav]生成初始合成音效库
uv run scripts/som/nivelar.py PASTA [--categoria X] [--cama] [--destino D]将音效包标准化并更新目录
uv run scripts/som/verificar_som_de_cena.py MIX.wav [--voz VOZ.wav]拒绝过大的场景音(退出码 1)
uv run scripts/som/batida.py MUSICA [--fps 30] [--json grade.json] [--video render.mp4]节拍、强拍、BPM 和落点(beat_this)
`uv run scripts/som/separar.py MUSICA [--modo voz6] [--saida PASTA]`

som.py 的其他选项:--voz-entra、--musica-entra、--musica-de(对齐片段)、--dur、--impacto T0 T1(音乐提升至人声水平)、--lufs、--pico、--fx -10(效果相对于人声的 LUFS)、--saida。

batida.py 和 separar.py 使用 AI,需要额外依赖:uv sync --extra cpu(或使用 NVIDIA 显卡时 --extra gpu)。模型在首次使用时自动下载(beat_this 约 80 MB;每个分离模型约 300–700 MB,保存在 ~/.cache/estudio-ia/ 中)。如果没有额外依赖,这两个脚本会停止并显示安装说明。

常见错误

症状可能原因解决方法
场景视频中音效“过大”场景音被归一化为 -14无语音或音乐时 som.py 会瞄准 -25;用 verificar_som_de_cena.py 检查
无声视频中音效被音乐淹没音轨被母带处理为 -8 到 -11 LUFS混音台会将音轨校准至 -19 并将效果提升 ×2.2;若仍被淹没,则在事件中增大 vol
whoosh 音效“延迟”事件标记在动作结束时标记动作开始;映射会在 0.2 秒后将峰值放置在动作中间
重复相同音效听起来像机器人某个类别只有一个变种为该类别添加更多音效,或在 --mapa 中使用不同的 st
报告:“类别互换”库中没有该类别运行 sintetizar_sfx.py 或使用该类别标准化一个音效包

Individual skills in this repo

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

相关技能