Communitygithub.com

iamjeffia/estudio-ia

Diseño de sonido y mezcla de video en el estudio. Úsalo siempre que debas dar sonido a un video o animación (efecto para cada elemento que entra o sale, música, narración, mezcla final, sonido pegado a la vista previa), montar o ampliar la biblioteca de efectos (sintetizar o nivelar un pack), medir los beats y el drop de una canción para cortar a tiempo, separar la voz de la música en stems o comprobar si el sonido de ambiente está demasiado alto antes de entregar. Vale para videos hechos en After Effects, HyperFrames, Remotion o editados a mano.

¿Qué es estudio-ia?

Esta skill proporciona un flujo de trabajo completo para el diseño de sonido y mezcla de video orientado a AI agents como Claude Code, Cursor o Codex. Se basa en una lista de eventos (uno por elemento que aparece, sale o golpea la pantalla) y en un comando central, `som.py`, que coloca cada efecto con su pico en el cuadro exacto, asienta la música bajo la voz y entrega la mezcla final con un informe detallado. Soporta plataformas como After Effects, HyperFrames y Remotion, y puede trabajar de forma independiente al render, ya que con el tiempo de la animación definido el sonido puede generarse por separado. Incluye scripts para sintetizar bibliotecas de efectos, nivelar packs de sonido, medir BPM y detectar drops mediante IA (`batida.py`), y separar voz e instrumental (`separar.py`). La mezcla se realiza siempre bajo un conjunto de reglas de volumen y sincronía que garantizan claridad y profesionalismo, y el agente puede ajustar parámetros como el tono musical, el mapa de sonidos por evento y los niveles de masterización.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Sonido del video

Fecha: 2026-10-22 · Tipo: skill · Estado: vigente

Resumen: el sonido de un video parte de una lista de eventos (uno por elemento que aparece, sale o golpea la pantalla) y de un comando, som.py, que coloca cada efecto con el pico en el cuadro correcto, asienta la música bajo la voz y entrega la mezcla con un informe. El sonido no espera al render: con el tiempo de la animación asentado, ya se puede realizar. Los números de la mezcla tienen un único dueño, 06-metodo/reglas.md; esta skill trae el método, los comandos y la tabla principal.

Cuándo usar

  • Cualquier video con motion, interfaz, tutorial, anuncio o video solo con música que necesite efectos sincronizados.
  • Video narrado: voz seca al frente, música de fondo, efectos discretos.
  • Video con personas o lugares que parece "mudo": sonido de ambiente (ambiencia y foley). Ver references/som-de-cena.md.
  • Para tratar una canción: medir beats y drop (batida.py) o separar la voz (separar.py).

El método

  1. Un sonido por cada acción visible, y el sonido describe la acción. Tarjeta que entra hace pop, botón hace clic, cambio de pantalla hace whoosh, sello golpea, número rueda. La densidad es por acción, no por palabra: máximo dos efectos sonando juntos bajo la voz.
  2. Solo entra sonido que la imagen motiva. Whoosh en corte estático, reloj sin reloj en escena y riser sin nada subiendo despegan el sonido del video. Antes de mezclar, mira el video y anota qué se mueve, cuándo y con qué material.
  3. El pico cae en el cuadro del evento. Clic, pop, sello e impacto: el pico en el cuadro donde el elemento toca. Whoosh: el pico en medio del gesto (~0.2 s después del inicio; el mapa estándar ya lo hace). Riser: termina seco en el drop o en el corte.
  4. Tonal solo en hype, transición y sorpresa. Golpe en el tono en el impacto, en el sello y en el logo; pad corto en la transición grande; campana en la revelación. Nunca en clic, pop o tecla, que se vuelven "musiquita" y cansan. Usa --tom (ej.: Am) solo cuando la canción tenga tono conocido.
  5. Música por momentos, no una alfombra. Apertura suave; desaceleración antes del drop; respiro; clímax en el bombo. Con narración, la música queda muy por debajo de la voz y sube en los respiros y en los tramos sin habla.
  6. Respiro antes del drop. El instrumental cae seco por ~0.3–0.5 s en el último beat antes del drop (--drop T hace esto), y la palabra clave o el mayor cambio de imagen va en el primer cuadro del drop. Mide el drop con batida.py, no a ojo.
  7. Capas solo en los picos. 2–3 sonidos juntos en el drop, en el logo y en el cierre; en el resto, un sonido por acción. Varía la altura cuando el mismo sonido se repite (el mapa rota entre las variaciones de la categoría).
  8. Voz seca. Narración sin reverb ni eco.
  9. Escucha las capas separadas. som.py graba escuta/voz.wav, musica.wav, efeitos.wav y tonais.wav. La sincronía se comprueba en el stem de efectos, nunca en la mezcla.

Números principales

Dueño: 06-metodo/reglas.md. Si allí dice otro número, vale el de allí. La Mesa ya aplica estos valores por sí sola.

QuéValor
Master con voz o música−14 LUFS integrado, pico verdadero ≤ −1 dBTP (limitador a 4×)
Música bajo la voz~15 dB por debajo cuando hay habla (el informe mide; acepta 12–18)
Mezcla sin voz con música realpista nivelada a −19 LUFS antes de efectos; efectos ×2.2; limitador; master −14
Pieza solo de sonido de ambiente−25 LUFS integrado (techo −24), corto plazo ≤ −20, momentáneo ≤ −16, pico ≤ −3. Nunca normalizar a −14
Sonido de ambiente con vozstem del sonido de ambiente ≥ 15 LU por debajo de la voz
Biblioteca de efectoscortos −20 LUFS de pico momentáneo, fondos −24, pico ≤ −3 dBTP; posición at = evento − pico_ms/1000
Sincroníamediana ≤ 25 ms en el stem de efectos
Beatsbeat_this, File2Beats(checkpoint_path="final0"); corte a ≤ 2 cuadros del beat

Paso a paso

Todos los comandos se ejecutan desde la raíz del estudio.

  1. ¿Biblioteca lista? Si 05-biblioteca/som/sfx/catalogo.json no existe: uv run scripts/som/sintetizar_sfx.py. Sonidos grabados: uv run scripts/som/nivelar.py <carpeta del pack> (detalles en 05-biblioteca/som/README.md).
  2. Eventos. Exporta desde el motor de animación un eventos.json en la carpeta audio/ del proyecto. Formato, tipos aceptados y cómo exportar desde After Effects, HyperFrames y Remotion: references/eventos.md.
  3. ¿Música con beat? uv run scripts/som/batida.py musica.mp3 --fps 30 da BPM, tiempos fuertes y drop probable. Anima los cortes en esa cuadrícula.
  4. ¿Necesitas la voz o el instrumental de la canción? uv run scripts/som/separar.py musica.mp3 (voz + instrumental) o --modo 6 (seis stems).
  5. Mezcla:
    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
    
    Genera mix.wav, escuta/*.wav, relatorio-som.json y previa-som.mp4 (la imagen se copia; solo cambia el sonido).
  6. Lee el informe y corrige hasta que no haya advertencias. "eventos sem som" = tipo que el mapa no conoce: cambia el tipo por uno conocido, pon "som": "categoria" en el evento o escribe un --mapa (abajo). LUFS, pico y "música bajo la voz" fuera del objetivo también aparecen.
  7. ¿Sonido de ambiente? uv run scripts/som/verificar_som_de_cena.py <mezcla solo de ambiente> o ... escuta/efeitos.wav --voz escuta/voz.wav. Si no pasa, no se entrega.
  8. Escucha. La vista previa con sonido va al dueño del estudio para aprobar. En el video final, ejecuta el mismo comando con --video render/final.mp4: es solo remux, sin renderizar de nuevo.

Sonidos propios del proyecto (--mapa)

Un archivo .py con MAPA = {tipo: función(M, e)} sobrescribe el mapa estándar solo en los tipos que listes:

# 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 = semitonos arriba
}

Funciones de la Mesa que sirven en el mapa: M.poe(sonido, t, ganancia_db, pan, alinea="pico"|"ini"|"fin", st=semitonos, fin=duración, fade=s, sala=True), M.tonal(t, lufs), M.golpe(t, lufs), M.textura(t0, t1, lufs), M.riser(t_pico). sonido acepta una categoría ("whoosh", rota entre las variaciones), un archivo de la biblioteca ("whoosh/whoosh-2") o una ruta.

Comandos

ScriptPara qué
uv run scripts/som/som.py --eventos E.json [--voz V] [--musica M] [--video P.mp4] [--tom Am] [--drop T] [--mapa mapa.py]la mezcla completa, el informe y el sonido pegado al video
uv run scripts/som/sintetizar_sfx.py [--amostra prueba.wav]genera la biblioteca inicial sintetizada
uv run scripts/som/nivelar.py CARPETA [--categoria X] [--cama] [--destino D]pone un pack en el estándar y actualiza el catálogo
uv run scripts/som/verificar_som_de_cena.py MEZCLA.wav [--voz VOZ.wav]rechaza sonido de ambiente demasiado alto (código de salida 1)
uv run scripts/som/batida.py MUSICA [--fps 30] [--json grade.json] [--video render.mp4]beats, tiempos fuertes, BPM y drop (beat_this)
`uv run scripts/som/separar.py MUSICA [--modo voz6] [--saida CARPETA]`

Otras opciones de som.py: --voz-entra, --musica-entra, --musica-de (alinear tramos), --dur, --impacto T0 T1 (música sube al nivel de la voz), --lufs, --pico, --fx -10 (efectos en LUFS relativos a la voz), --saida.

batida.py y separar.py usan IA y necesitan el extra: uv sync --extra cpu (o --extra gpu con placa NVIDIA). Los modelos se descargan solos en el primer uso (beat_this ~80 MB; cada modelo de separación ~300–700 MB, guardados en ~/.cache/estudio-ia/). Sin el extra, ambos se detienen con la instrucción de instalación.

Errores comunes

SíntomaCausa probableQué hacer
Efectos "demasiado altos" en un video de ambientesonido de ambiente normalizado a −14som.py sin voz ni música ya apunta a −25; comprueba con verificar_som_de_cena.py
Efectos desaparecen bajo la música en un video sin vozpista masterizada (−8 a −11 LUFS)la Mesa nivela la pista a −19 y sube los efectos ×2.2; si aún desaparecen, vol mayor en el evento
Sonido "retrasado" en el whooshevento marcado al final del gestomarca el inicio del gesto; el mapa pone el pico 0.2 s después
Mismo sonido repetido suena a robotcategoría con una sola variaciónnivela más sonidos en esa categoría o usa st diferente en --mapa
Informe: "categorías intercambiadas"la biblioteca no tiene la categoríaejecuta sintetizar_sfx.py o nivela un pack con ella

Individual skills in this repo

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

Skills relacionados