Diseño de sonido con AudioFX
AudioFX convierte efectos de diseño de sonido en filtergraphs de ffmpeg. Cada efecto es una cadena que va directamente a ffmpeg -af, o se aplica a un archivo con la CLI. Lo que escuchas en el estudio web es exactamente lo que sale del render.
Comando
A lo largo de este documento, sfx significa:
node {{AUDIOFX_DIR}}/bin/sfx.mjs
Si sfx no es un comando en esta máquina, usa la ruta completa. Funciona desde cualquier carpeta. Si falla por culpa de ffmpeg, ejecuta sfx doctor.
| Necesitas | Comando |
|---|---|
| El catálogo | sfx list (o --json) |
| Parámetros, rangos y cuándo usar un efecto | sfx describe <effect> |
| Procesar un archivo de audio o video | sfx apply <input> <output> <step...> |
| El filtergraph para tu propio ffmpeg | sfx graph <step...> |
| Medir loudness y picos | sfx analyze <file> |
| La duración de un video y sus cortes duros | sfx cuts <video> |
| Dónde sube una canción (candidatos a drop) y dónde baja | sfx sections <file> |
| Mezclar voz, música y efectos en una línea de tiempo, con la música atenuada bajo la voz | sfx mix <output> --voice v.wav --music m.wav [--sfx hit.wav@6] [--video cut.mp4], o sfx mix project.json <output> |
| Guardar un sample grabado y superponerlo | `sfx sample add <file |
| Una nueva voz, sonido o canción, ya procesados | `sfx generate <sfx |
| Dejar que el usuario escuche y ajuste | sfx studio (abre http://127.0.0.1:5177) |
Un paso se escribe effect[:param=value,param=value][@from-to]:
sfx apply voice.wav voice-phone.wav telephone
sfx apply clip.mp4 clip-fx.mp4 "underwater:[email protected]" --fade 0.4
sfx graph "reverb:space=cathedral,mix=0.4" "fade:in=0,out=2"
- Los pasos se ejecutan en orden.
@3.2-7limita el efecto a esa ventana, con un crossfade de--fadesegundo (0.25 por defecto) entre la señal seca y la procesada.@3.2-significa desde 3.2 s hasta el final.- Si la salida es
.mp4,.mov,.mkvo.webm, la imagen se copia sin recodificar y el audio se reemplaza. - Si te equivocas en un parámetro, la CLI lista los válidos. No adivines: ejecuta
sfx describe.
Flujo de trabajo
- Lee el guion o el montaje y marca los momentos que necesitan tratamiento: una voz que llega a través de un teléfono, la cámara bajo el agua, un recuerdo, un drop, un corte cómico.
sfx cuts video.mp4imprime la duración del video y sus cortes duros (un--thresholdmás bajo, por defecto 10, captura los más suaves). Anota los tiempos en segundos. - Elige el efecto de la tabla de abajo. Cuando no estés seguro,
sfx listysfx describe. Comienza con los valores por defecto: están ajustados para sonar claros sin exagerar. - Trata cada pista por separado, antes de mezclar. Los efectos de época, carácter y espacio van en la voz o en el efecto específico, no en la mezcla completa. La excepción es un recurso narrativo que afecta todo lo que se escucha (bajo el agua, shell shock, sueño).
- Usa ventanas para cambios dentro de un clip (
@from-to) en lugar de cortar y empalmar archivos. - Mezcla y normaliza al final con
sfx mix(ver "Mezcla"): atenúa la música bajo la voz y normaliza el master hacia -14 LUFS para redes sociales y YouTube (--loudness -16para podcasts,-23para radiodifusión). Para un solo archivo,loudnessal final de su cadena hace lo mismo. Luego verifica consfx analyzeque el loudness esté cerca del objetivo y que el pico verdadero se mantenga en -1 dBTP o menos. - No puedes escuchar. Di qué efectos aplicaste y a qué horas, y ofrece
sfx studiopara que el usuario los ajuste de oído. Si te devuelven nuevos valores, el estudio les da el comando exacto para copiar.
Momentos cinematográficos: lo que vende un corte
Los videos de lanzamiento no suenan "cinematográficos" por un filtro en la voz, sino por elementos colocados en el instante justo: un riser que sube hasta el corte, un gap de silencio y un hit con sub cuando aparece el producto. Estos efectos sintetizan esos elementos dentro del mismo filtergraph (sin samples con licencia) y se anclan con at=<segundo>:
| Momento | Cadena (el corte en T) |
|---|---|
| Hit en el corte, revelación del producto | "riser:at=T,length=2.5" "drop-gap:at=T-0.45,gap=0.45" "hit:at=T" |
| Título o logotipo | "braam:at=T" "sub-drop:at=T,level=-4" |
| Texto o UI entrando volando | "whoosh:at=T,length=0.8" (pico en T) |
| Corte a negro | "stop-tail:at=T,decay=3.5" "sub-drop:at=T,level=-4" |
| Puntuar una palabra | "throw:at=T,kind=echo" en la voz |
| Glitch tecnológico | "stutter:at=T,slice=0.12,repeats=4" (alarga el audio) |
ates el segundo del corte en el archivo que estás procesando. Parariseres donde termina; parawhoosh, donde alcanza su pico; paradrop-gap, donde el gap comienza.- Ajusta el nivel con
level(dB) antes de tocargain:hitysub-dropya vienen fuerte. - Pocos y precisos: uno o dos momentos cada 15 s. Un hit en cada corte cansa.
trailer-voice(voz profunda, épica con sala) yarchival(entrevista de archivo) son tratamientos de voz, sinat.- ¿Necesitas un sonido grabado real (un impacto con peso, una puerta, cristal, lluvia) en lugar de uno sintetizado? Superpone un sample en
T: ver la siguiente sección.
Samples reales como capas
Los hits sintetizados son rápidos y gratuitos, pero un impacto, whoosh o foley grabado suele sonar más real. El efecto layer mezcla cualquier archivo de audio en la señal en un segundo exacto, dentro del mismo filtergraph:
sfx apply mix.wav mix-door.wav "layer:file=door.wav,at=6,align=onset,level=-3"
sfx apply mix.wav mix-hit.wav "riser:at=6,length=2.5" "drop-gap:at=5.55,gap=0.45" "layer:file=library:ab12cd34ef56,at=6,align=onset" "sub-drop:at=6,level=-4"
align=onsetmide dónde está el ataque del sample y coloca eso enat. Los samples a menudo comienzan con 20–300 ms de silencio o pre-roll; con el valor por defectoalign=start, ese silencio hace que el hit aterrice tarde. Usaalign=peakpara whooshes y swells, cuyo punto más fuerte es lo que aterriza en el corte.levelen dB,lengthpara usar solo los primeros segundos,fadeIn/fadeOutpara darle forma.sync=<s>establece el punto de sincronización manualmente (conalign=start).- Un sample reemplaza el
hit,braamowhooshsintetizado; mantén elriser,drop-gapysub-dropa su alrededor. - Para tratar el sample en sí mismo (reverberación, distancia, un altavoz), procesa primero con
sfx apply sample.wav sample-fx.wav ...y superpone el resultado. - Un paso (coche, moto, dron): renderiza el sample aislado a través de
dopplerconaten su punto más cercano, luego superpónlo consyncen ese segundo para que el paso aterrice en el corte:sfx apply car.wav car-pass.wav "doppler:at=2,speed=90", luego"layer:file=car-pass.wav,at=6,sync=2". - Los niveles de los samples varían mucho. Después de superponer, ejecuta
sfx analyzeen el resultado y bajalevelsi el pico alcanza 0 dBFS.
Dónde viven los samples
Los samples son audio con licencia que pertenece a la suscripción del usuario. Viven en ~/.audiofx/samples, cada uno con un .json (id, título, fuente, tipo, stem) a su lado, y nunca en una carpeta de proyecto o en un repositorio:
sfx sample add <file-o-url> --title "Portazo, madera pesada" --id <id de biblioteca> --source epidemic-sound
sfx sample list # cada sample tiene library:<id>, duración y dónde está su ataque
sample add copia un archivo local o descarga una URL, mide el ataque e imprime la referencia library:<id> para usar en layer:file=.... El estudio muestra los samples en su pestaña Samples, y sus momentos pueden usar uno en lugar del impacto o whoosh sintetizado.
Obtener de una biblioteca de sonidos (Epidemic Sound MCP)
Cuando el usuario tiene el MCP de Epidemic Sound conectado (herramientas SearchSoundEffects y DownloadSoundEffect):
- Reutiliza primero.
sfx sample list: si ya hay un sample adecuado, úsalo. - Busca con
SearchSoundEffects: un término corto y concreto ("impacto cinematográfico grave", "whoosh rápido corto", "cristal roto"),first: 5, y un filtro de duración en milisegundos que se ajuste al uso (impactos y whooshes menores de 4000; ambientes más largos). Elige por título, etiquetas y duración. - Descarga con
DownloadSoundEffect(fileType: WAV). Devuelve una URL firmada que caduca. - Guárdalo:
sfx sample add "<assetUrl>" --title "<título>" --id <id> --source epidemic-sound. Nunca escribas la URL firmada en un archivo, y nunca guardes el audio dentro del proyecto. - Úsalo con el
library:<id>quesample addimprimió:"layer:file=library:<id>,at=T,align=onset".
No puedes escuchar, así que no afirmes que un sample "suena bien". Reporta lo que puedas medir (duración, dónde está el ataque, el pico del resultado) y, cuando la elección importe, añade dos o tres candidatos y deja que el usuario elija de oído en la pestaña Samples del estudio. Si una descarga falla con RETRY_LATER, espera los segundos que indique antes de volver a intentarlo.
Mezcla: sfx mix
sfx mix coloca clips de voz, música y efectos en una línea de tiempo, atenúa la música bajo la voz y normaliza el master, en un solo paso de ffmpeg. La forma rápida toma una bandera por clip, archivo@segundo:
sfx mix final.mp4 --video cut.mp4 --voice [email protected] --music library:<id> --sfx [email protected]
sfx mix final.wav --voice vo.wav --music song.wav --duck 14 --loudness -16
sfx mix --video cut.mp4 --voice [email protected] --music song.wav --print > mix.json
- La música baja 10 dB mientras se reproduce una voz (
--duck <dB>,--no-duck). El ataque de un clip--sfxaterriza en su segundo, comoalign=onset. - El master se normaliza hacia -14 LUFS (
--loudness <LUFS|off>), luego un techo de -1 dB. La mezcla se mide y se lleva al objetivo con una ganancia fija, por lo que su dinámica se mantiene; cuando los picos alcanzan primero el techo, el limitador se empuja hasta 6 dB para cerrar la brecha, por lo que una mezcla con hits muy fuertes aún puede aterrizar por debajo del objetivo: verifica consfx analyze. El audio AAC de un video puede tener picos de aproximadamente 0.3 dB por encima del techo ("master": { "ceiling": -1.5 }lo mantiene en -1 dBTP). - La mezcla dura
--duration, de lo contrario la duración del video, o hasta el final del último clip. Con--videoy una salida de video, la imagen se copia y el audio se reemplaza. --printescribe el JSON del proyecto en lugar de renderizar: edítalo, luegosfx mix mix.json final.mp4.
Un archivo de proyecto le da a cada clip y pista su propia configuración. Las rutas son relativas al archivo del proyecto, y library:<id> funciona donde sea que lo haga un archivo:
{
"version": 1,
"video": "cut.mp4",
"tracks": [
{ "id": "voz", "role": "voice", "clips": [{ "file": "vo.wav", "at": 1.5, "steps": [{ "effect": "voice-clean" }] }] },
{ "id": "musica", "role": "music", "clips": [{ "file": "library:<id>", "fadeOut": 2 }], "duck": { "depth": 12, "release": 600 } },
{ "id": "golpes", "role": "sfx", "clips": [{ "file": "door.wav", "at": 7.52, "align": "onset", "gain": -3 }] }
],
"master": { "loudness": -14 }
}
- Clip:
file,at(segundo de la línea de tiempo),startylength(el tramo del archivo a usar),gain(dB),fadeIn,fadeOut,align(start,onset,peak),steps. - Track:
id,role(voice,music,sfx),gain,mute,solo,steps,duck(true,falseo{ depth, attack, release, threshold }; activado por defecto para la música). - Step:
{ "effect": "underwater", "params": { "depth": 0.8 }, "from": 4, "to": 9.5, "fade": 0.35 }. Los pasos del clip se ejecutan en tiempo del clip (0 = inicio del clip); los pasos de la pista se ejecutan en tiempo de la línea de tiempo, por lo que sus ventanas se alinean con el video. - Master:
steps,loudness(nulldeja el nivel como está mezclado),ceiling(dB, por defecto -1).
Música ajustada al video
El objetivo es una pista cortada a la duración exacta del video, con su drop en el corte principal del video. No puedes escuchar qué subida es "el" drop: mide, propón con números y deja que el usuario confirme de oído. Con el MCP de Epidemic Sound (SearchRecordings, DownloadRecording, EditRecording, PollEditRecordingJob, DownloadRecordingEdit):
- Mide el video.
sfx cuts cut.mp4imprime su duración (digamos 30.000 s) y sus cortes duros. Acuerda con el usuario el corte principalCdonde debe aterrizar el drop (digamos 12.4 s). - Encuentra y guarda una pista.
SearchRecordingsconquery: { term: "..." }, unfilter(bpm: {min,max},duration: {min,max}) y una fuente (opcional). Elige por título, etiquetas, BPM, duración y clave. Descárgala conDownloadRecordingy guárdala consfx sample add ... --source epidemic-sound, o pasa directamente sulibrary:<id>asfx mix(el mix la descargará solo si es necesario y nunca la almacena en el proyecto). - Mide sus secciones.
sfx sections <archivo>imprime las subidas (candidatos a drop) y bajadas en segundos, con la energía y los picos. Si la pista ya tiene un drop natural alrededor deC, dilo y usa la pista tal cual. - Una pista no termina en el lugar correcto, su drop no está en el momento justo o la duración sobra: córtala con parámetros. Usa
EditRecordingparaaction: trim, split, tempo, pitch, fadeIn, fadeOut, normalize, reverse. Espera a quePollEditRecordingJobdevuelvacompleted, luegoDownloadRecordingEdit: descarga a un archivo temporal, luegosfx sample add ... --source epidemic-soundcon una nota sobre lo que se editó. - Colócala en la mezcla y atenuación.
sfx mix final.mp4 --video cut.mp4 --music library:<id-edited>. Si la música tiene un ataque suave, usaalign=peaken el music clip para que el drop aterrice exactamente en el corte:--music library:<id>@12.4,pista=peak(perosfx mixusaalign=startpor defecto para la música; usa un archivo de proyecto y pon"align":"peak"en el clip). - Stems para cortes y drops ajustados. Cuando la pista está en stems (batería, bajo, pads, leads, voces), cada uno se puede tratar por separado. Para stems de Epidemic Sound, el MCP devuelve una lista de stems en el
Recording, cada uno conid,slugyduration. Decide qué stem necesita acción (batería con filtro, bajo al frente en el drop). Un efecto de tratamiento que va solo en un stem o un efecto de filtro que barre uno mientras los demás siguen limpios: usa un archivo de proyecto con un clipsfxo multiplica las pistas, da a cada una su propia cadena de pasos y enmudece las otras.
Tratamientos
El catálogo completo de efectos con sus parámetros y cuándo usarlos se obtiene ejecutando:
sfx list
Los efectos se agrupan en:
| Grupo | Efectos |
|---|---|
| Voz y carácter | voice-clean, radio-am, landline, telephone, device-speakers, walkie-talkie, old-tv, vinyl, cassette, trailer-voice, archival, robot, monster, ghost |
| Espacio y ambiente | underwater, behind-wall, far-away, reverb (de baño a catedral), echo |
| Psicológico / estado | dream, flashback, shell-shock, slow-motion |
| Transiciones | tape-stop, filter-sweep, reverse-swell, low-pass, high-pass |
| Momentos cinematográficos | hit, riser, whoosh, sub-drop, braam, drop-gap, stop-tail, throw, stutter |
| Utilidades | loudness, fade, layer, gain, normalize |
El efecto voice-clean elimina el ruido de fondo, la reverberación no deseada, el soplido y normaliza la voz a un nivel uniforme. Es el paso uno de cualquier tratamiento de voz (después de aplicarlo, añade el efecto de carácter o espacio).
Cómo pedir el efecto
Describe lo que quieres que suene y la IA lo traduce al efecto correcto:
| Lo que dices | Efecto que se aplica |
|---|---|
| "Suena como si estuviera llamando por teléfono" | telephone |
| "La cámara está bajo el agua" | underwater |
| "Está recordando" | flashback |
| "Queremos que la voz suene como la de un robot" | robot |
| "La música necesita un barrido de filtro" | filter-sweep |
| "La escena necesita un impacto en el corte" | hit en el corte |
| "La voz necesita sonar limpia y clara" | voice-clean |
Samples y este documento en español
También para pedidos en español: bajo el agua, radio, teléfono, golpe, riser, whoosh, braam, sample, efecto de sonido grabado, mezcla, ducking, música al largo del video, el drop en el corte, stems, LUFS.
Preguntas frecuentes
P: ¿Puedo usar sfx sin instalar ffmpeg?
R: No. AudioFX necesita ffmpeg en el PATH. Ejecuta sfx doctor para diagnosticar problemas.
P: ¿Cómo sé si un efecto está funcionando correctamente?
R: No puedes escuchar. Aplica el efecto con los valores por defecto, ofrece sfx studio para que el usuario ajuste, y verifica con sfx analyze que los niveles de loudness y pico sean correctos.
P: ¿Puedo aplicar múltiples efectos a un solo clip?
R: Sí. Los pasos se ejecutan en orden. Ponlos en una cadena separada por espacios: sfx apply clip.mp4 clip-out.mp4 "effect1" "effect2" "effect3".
P: ¿Cómo manejo los samples de Epidemic Sound?
R: Usa el MCP para buscar y descargar. Guarda el sample con sfx sample add y refiérete a él con library:<id> en la capa o mezcla. Nunca guardes la URL firmada o el archivo de audio dentro del proyecto.
P: ¿Qué hago si un paso de mezcla suena distorsionado?
R: Baja el gain del clip o el level del efecto. Verifica con sfx analyze que el pico verdadero esté por debajo de -1 dBTP. Añade loudness al final de la cadena del master.
P: ¿Puedo usar sfx con archivos de video que no tienen pista de audio?
R: No. Si el video no tiene audio, añade una pista de silencio con ffmpeg antes de aplicar sfx, o usa sfx mix con el flag --video que añadirá la pista de audio resultante.