32blogby Studio Mitsu

fqmpeg Efectos creativos de audio: Reverb, Echo, Chorus y más (9 verbos)

Nueve verbos de fqmpeg para efectos creativos de audio: reverb, echo, chorus, phaser, flanger, tremolo, vibrato, karaoke, stereo widen — valores por defecto verificados en el código, salida de --dry-run, y una mirada honesta a qué está hardcodeado y por qué.

by omitsu18 min read
Contenido

El cluster C10 de fqmpeg es la caja de pedales del kit — nueve verbos que colorean el audio en lugar de arreglarlo. Dos son ecos basados en tiempo (reverb, echo-effect). Cinco son efectos de modulación LFO (chorus, phaser, flanger, tremolo, vibrato). Dos son trucos de campo estéreo (audio-karaoke, audio-stereo-widen).

Comparado con los verbos de dinámica/EQ de C9, C10 es pequeño y las implementaciones son cortas — pero cada uno envuelve un filtro de FFmpeg multiparamétrico detrás de una superficie de 2 o 3 opciones. Esta guía recorre cada verbo contra src/commands/ de fqmpeg 3.0.3 y es honesta sobre qué está hardcodeado y por qué. Algunos hardcodings son sensatos — ocultan coeficientes DSP que solo invitarían a meter la pata. Otros son limitaciones que conviene conocer antes de exportar un render.

Qué obtienes de esta guía

  • Una matriz de decisión para los 9 verbos por efecto sonoro (tiempo / modulación / estéreo)
  • La invocación exacta de FFmpeg que cada verbo genera (salida --dry-run verificada)
  • Defaults, unidades, nombres de archivo de salida — y los coeficientes de filtro que fqmpeg fija por ti
  • Tres recetas — calentar voz, guitarra lo-fi, diálogo estilo radio AM — y las puertas de escape cuando la superficie simplificada no alcanza

Los 9 verbos de un vistazo

Los nueve verbos preservan video con -c:v copy — pasa un archivo de video y obtienes el mismo video con el audio procesado.

GrupoVerbosQué hacen
Basado en tiemporeverb, echo-effectSimulación de retardo/reflexión vía aecho
Modulaciónchorus, phaser, flanger, tremolo, vibratoModulación LFO de tono / tiempo / amplitud
Estéreoaudio-karaoke, audio-stereo-widenEliminación de canal central, ensanchado tipo Haas

Cinco cosas que saber antes de seguir:

  1. reverb no es una reverb real. Es un filtro aecho de un solo tap con in_gain=0.8 y out_gain=0.88 hardcodeados. La reverb real (convolución de respuesta al impulso o red Schroeder) necesita afir o el filtro freeverb — para eso, bajá a FFmpeg crudo. reverb acá es "un toque de habitación", no una catedral.
  2. chorus incluye un preset de 3 voces que no es configurable. Las voces tienen delays 50|60|70 ms y decays 0.4|0.32|0.28 hardcodeados. Solo se exponen profundidad y velocidad de modulación. Razón: un chorus bien afinado necesita intuición sobre el espaciado de voces, y exponer los 6 parámetros en un CLI invitaría a configuraciones que suenan rotas. Si necesitás un arreglo multi-voz personalizado, ejecutá el filtro chorus de FFmpeg directamente (acepta hasta 32 voces).
  3. flanger --mix se remapea internamente a width. El filtro flanger de FFmpeg usa width=0-100 para la mezcla wet/dry, no mix=0-1. fqmpeg acepta la convención más común --mix 0.0-1.0 y multiplica por 100 antes de pasarlo. Así --mix 0.7 se convierte en width=70. (Fue un bugfix de B7 — fqmpeg antes pasaba mix= directo, que el filtro ignoraba silenciosamente.)
  4. tremolo y vibrato tienen superficies de opciones idénticas pero efectos completamente diferentes. Tremolo modula volumen (un LFO multiplica la amplitud). Vibrato modula tono (un LFO desplaza la frecuencia). Mismos --freq / --depth, mismos defaults (5 Hz, 0.5), mismos rangos — pero no son intercambiables.
  5. audio-karaoke solo funciona con voces dead-center y secas. El filtro es el clásico truco de cancelación de fase pan=stereo|c0=c0-c1|c1=c1-c0. Asume que la voz está paneada idéntica en ambos canales sin ensanchado estéreo, reverb ni chorus en el bus vocal. Las mezclas pop modernas rompen las tres suposiciones. Esperá residuos audibles.

Basado en tiempo: Reverb y Echo

Ambos verbos usan el mismo filtro de FFmpeg (aecho) — la diferencia es la configuración. reverb es un tap corto (típicamente 40 ms) usado como ambiente. echo-effect es una cadena de repeticiones decrecientes usadas como efecto musical distinto.

reverb — Añadir ambiente tipo reverb al audio

Un eco de un solo tap disfrazado de reverb. Bueno para agregar un toque de espacio, no para emular una sala.

OpciónDefaultNotas
--delay <ms>40Retardo entre dry y wet
--decay <n>0.5Factor de decaimiento (0.0-1.0)
-o, --output <path><input-stem>-reverb.<ext>
bash
$ npx fqmpeg reverb input.mp4 --dry-run

  ffmpeg -i input.mp4 -af aecho=0.8:0.88:40:0.5 -c:v copy input-reverb.mp4

Qué está hardcodeado y por qué: in_gain=0.8 y out_gain=0.88 están fijos en el string del filtro aecho. Son atenuación dry/wet — no cambian el carácter del eco, solo su volumen relativo a la fuente. La elección de fqmpeg es una mezcla media segura que no clipea en entradas típicas.

Cuando esto se te queda corto: la reverb real son múltiples líneas de retardo descorrelacionadas (red Schroeder) o convolución de respuesta al impulso. Para un sonido creíble de hall/plate, cambiá a freeverb (si tu build de FFmpeg lo trae) o afir con un WAV de respuesta al impulso:

bash
ffmpeg -i input.mp4 -i hall_ir.wav -filter_complex "[0:a][1:a]afir=dry=10:wet=10[a]" \
  -map 0:v -map "[a]" -c:v copy hall-reverb.mp4

echo-effect — Añadir efecto echo / delay con múltiples taps

Genera una cadena geométrica de ecos: delay, 2×delay, 3×delay, ..., cada uno más bajo que el anterior por un factor de decay^i.

OpciónDefaultNotas
--delay <ms>500Retardo base; los taps siguientes son 2×, 3×, ...
--decay <n>0.3Factor de decay; los taps siguientes decaen geométricamente
--repeats <n>3Número de taps
-o, --output <path><input-stem>-echo.<ext>
bash
$ npx fqmpeg echo-effect input.mp4 --dry-run

  ffmpeg -i input.mp4 -af aecho=0.8:0.88:500|1000|1500:0.300|0.090|0.027 -c:v copy input-echo.mp4

Qué está hardcodeado y por qué: como en reverb, los in_gain/out_gain están fijos en 0.8:0.88. El decaimiento geométrico (decay^i para el tap i) no está "hardcodeado" en sentido peligroso — es el modelo físico natural para una sola superficie reflectante que pierde energía en cada rebote. Exponer delays/decays por tap permitiría construir filtros de peine patológicos, así que fqmpeg los ata juntos.

Cuando esto se te queda corto: si querés espaciado irregular de taps (un slapback que vira a una cola larga, o ping-pong estéreo), bajá directo a aecho con listas separadas por |, o usá adelay para un offset estéreo en milisegundos exactos:

bash
ffmpeg -i input.mp3 -af "aecho=0.8:0.9:60|300|800:0.5|0.3|0.15" out.mp3

Efectos de modulación

Los cinco verbos de modulación están impulsados por un oscilador de baja frecuencia (LFO) que varía alguna propiedad de la señal con el tiempo. El modelo mental compartido: elegir una velocidad (qué tan rápido cicla el LFO, en Hz) y una profundidad (cuánto varía).

chorus — Añadir efecto chorus / espesado

Apila 3 copias ligeramente desafinadas y retardadas sobre la señal seca. Suena como varios músicos tocando la misma línea.

  • Fuente: src/commands/chorus.js
  • Filtro: chorus=0.5:0.9:50|60|70:0.4|0.32|0.28:<depth>|<depth>|<depth>:<speed>|<speed>|<speed>
  • Salida: <input-stem>-chorus.<ext>
OpciónDefaultNotas
--depth <ms>2Profundidad de modulación (aplicada a las 3 voces)
--speed <Hz>0.5Velocidad de modulación (aplicada a las 3 voces)
-o, --output <path><input-stem>-chorus.<ext>
bash
$ npx fqmpeg chorus input.mp4 --dry-run

  ffmpeg -i input.mp4 -af chorus=0.5:0.9:50|60|70:0.4|0.32|0.28:2|2|2:0.5|0.5|0.5 -c:v copy input-chorus.mp4

Qué está hardcodeado y por qué: bastante. La configuración de 3 voces está fija: delays por voz 50|60|70 ms, decays por voz 0.4|0.32|0.28, in/out gain 0.5:0.9. Solo --depth y --speed se exponen, y ambos se aplican uniformemente a las tres voces.

Es una decisión deliberada de preset. Un chorus bien afinado depende del espaciado entre voces — si las tres tienen el mismo delay, obtenés un solo eco más grueso, no chorus. Si los delays están muy cerca (ej. 50|51|52), suena como un filtro de peine. El preset de fqmpeg (50|60|70 ms con decays descendentes) es un "chorus pop cálido" que funciona en voces, guitarra eléctrica y pads de sintetizador. No va a darte pads etéreos con dispersión estéreo amplia — eso necesita otro espaciado de voces y otras tasas de modulación por voz.

Cuando esto se te queda corto: invocá el filtro chorus directamente. Acepta cuentas arbitrarias de voces vía listas separadas por |:

bash
ffmpeg -i input.wav -af "chorus=0.6:0.9:30|45|60|80:0.3|0.25|0.2|0.15:1.5|2|2.5|3:0.3|0.4|0.5|0.6" wide-chorus.wav

phaser — Aplicar efecto phaser de barrido

Combina la señal con una copia de sí misma con fase desplazada, produciendo el clásico barrido "whoosh".

  • Fuente: src/commands/phaser.js
  • Filtro: aphaser=speed=<speed>:decay=<decay>
  • Salida: <input-stem>-phaser.<ext>
OpciónDefaultNotas
--speed <Hz>0.5Velocidad del LFO
--decay <n>0.4Factor de decay (0.0-1.0); controla la intensidad de retroalimentación
-o, --output <path><input-stem>-phaser.<ext>
bash
$ npx fqmpeg phaser input.mp4 --dry-run

  ffmpeg -i input.mp4 -af aphaser=speed=0.5:decay=0.4 -c:v copy input-phaser.mp4

El filtro aphaser de FFmpeg tiene parámetros adicionales (in_gain, out_gain, delay, type para LFO sinusoidal vs triangular) que fqmpeg deja en los defaults del filtro — pasalos directo a aphaser=... crudo si querés barrido triangular u otro número de etapas.

flanger — Aplicar efecto flanger

Como phaser pero con un delay mucho más corto y modulado — da el barrido metálico de "motor a reacción" familiar del rock de fines de los 70.

  • Fuente: src/commands/flanger.js
  • Filtro: flanger=speed=<speed>:depth=<depth>:width=<mix×100>
  • Salida: <input-stem>-flanger.<ext>
OpciónDefaultNotas
--speed <Hz>0.5Velocidad del LFO
--depth <ms>2Profundidad de modulación
--mix <n>0.7Mezcla dry/wet (0.0-1.0) — fqmpeg multiplica por 100 internamente
-o, --output <path><input-stem>-flanger.<ext>
bash
$ npx fqmpeg flanger input.mp4 --dry-run

  ffmpeg -i input.mp4 -af flanger=speed=0.5:depth=2:width=70 -c:v copy input-flanger.mp4

El mapeo --mixwidth: el filtro flanger de FFmpeg llama a su parámetro wet/dry width y acepta 0-100. fqmpeg usa la convención más común --mix 0.0-1.0 y multiplica por 100 silenciosamente. Fue un bugfix de 3.0 — fqmpeg antes pasaba mix=0.7 directo al filtro, que lo ignoraba y corría con su default (100% wet — muchísimo). Corré con --dry-run para confirmar que --mix 0.7 produce width=70.

tremolo — Aplicar tremolo (oscilación de volumen)

Modula el volumen de salida con un LFO. Efecto clásico de amplificador de guitarra surf rock.

OpciónDefaultNotas
--freq <Hz>5Frecuencia del LFO
--depth <n>0.5Profundidad (0-1); más alta = oscilación de volumen más marcada
-o, --output <path><input-stem>-tremolo.<ext>
bash
$ npx fqmpeg tremolo input.mp4 --dry-run

  ffmpeg -i input.mp4 -af tremolo=f=5:d=0.5 -c:v copy input-tremolo.mp4

vibrato — Aplicar vibrato (oscilación de tono)

Modula el tono (no el volumen) con un LFO. Misma superficie de opciones que tremolo — no confundir.

OpciónDefaultNotas
--freq <Hz>5Frecuencia del LFO
--depth <n>0.5Profundidad (0-1); más alta = oscilación de tono más amplia
-o, --output <path><input-stem>-vibrato.<ext>
bash
$ npx fqmpeg vibrato input.mp4 --dry-run

  ffmpeg -i input.mp4 -af vibrato=f=5:d=0.5 -c:v copy input-vibrato.mp4

Tremolo vs vibrato: CLI idéntico, efecto opuesto. Si corriste tremolo y el resultado suena como si la fuente se marease (tono tambaleando) en vez de oscilar de volumen (sube y baja), llamaste accidentalmente a vibrato. Test rápido: con --depth 1.0 --freq 0.5, tremolo cicla entre silencio y volumen máximo cada 2 segundos; vibrato cicla entre tono bajo y alto.

Manipulación estéreo

audio-karaoke — Eliminar voces paneadas al centro

Resta el canal derecho del izquierdo y viceversa, cancelando todo lo que esté paneado idénticamente en ambos canales. Truco clásico de karaoke.

  • Fuente: src/commands/audio-karaoke.js
  • Filtro: pan=stereo|c0=c0-c1|c1=c1-c0
  • Opciones: ninguna — solo entrada y -o opcional
  • Salida: <input-stem>-karaoke.<ext>
bash
$ npx fqmpeg audio-karaoke song.mp3 --dry-run

  ffmpeg -i song.mp3 -af pan=stereo|c0=c0-c1|c1=c1-c0 -c:v copy song-karaoke.mp3

Las limitaciones honestas:

  1. Solo funciona con voces dead-center y secas. Si la voz tiene reverb, doubler, chorus o cualquier ensanchado estéreo en su propio bus, esos componentes wet sobreviven a la resta.
  2. Mata cualquier cosa paneada al centro, incluyendo bombo, bajo y caja. La mayoría de las mezclas pop panean los cuatro al centro, así que perdés la sección rítmica junto con la voz.
  3. Los masters modernos de streaming están muy procesados, y la suposición de "canal central" se rompe — típicamente vas a oír voz residual a -10 a -15 dB en vez de eliminación completa.

Para aislar/eliminar voces de forma creíble en pistas modernas, el único enfoque confiable es la separación de fuentes basada en ML (Spleeter, Demucs) — eso está fuera del alcance de FFmpeg.

audio-stereo-widen — Ensanchar la imagen estéreo

Añade un retardo corto tipo Haas entre canales para empujar el ancho percibido más allá de los parlantes.

OpciónDefaultNotas
--delay <ms>20Retardo intercanal; más alto = más ancho pero más fase
-o, --output <path><input-stem>-wide.<ext>
bash
$ npx fqmpeg audio-stereo-widen input.mp4 --dry-run

  ffmpeg -i input.mp4 -af stereowiden=delay=20 -c:v copy input-wide.mp4

Advertencia de suma a mono: el truco de Haas depende de pequeños retardos intercanal, lo que significa que si tu salida se suma a mono (transmisión de radio, parlante de teléfono, auricular Bluetooth en modo mono), el retardo se vuelve un filtro de peine y el audio suena delgado y hueco. Verificá compatibilidad mono — usá una previsualización de downmix: ffmpeg -i input-wide.mp4 -ac 1 -t 10 -f null - y escuchá. Si el ensanchado es para un video online y no te importa la reproducción mono, ignoralo.

Recetas del mundo real

Calentar voz: levantar una pista de voz seca

Una grabación de voz seca suena clínica. Un toque de reverb y un muy ligero chorus agrega el pulido típico de intros de podcast y voces en off de YouTube — sin sonar procesado.

bash
# Paso 1: chorus sutil para cuerpo (depth/speed muy ligeros)
npx fqmpeg chorus voice.wav --depth 1.5 --speed 0.3 -o voice-chorus.wav

# Paso 2: cola corta de reverb para sensación de habitación
npx fqmpeg reverb voice-chorus.wav --delay 60 --decay 0.3 -o voice-ready.wav

Por qué este orden: chorus primero engrosa la fuente, luego reverb coloca el resultado engrosado en una habitación pequeña. Al revés, cada voz del chorus tiene su propia cola de reverb — más turbio.

Capa de guitarra lo-fi: phaser + tremolo

Para un fondo de guitarra chillhop, capa el barrido de phaser sobre un pulso de tremolo:

bash
# Barrido lento de phaser (ciclo largo)
npx fqmpeg phaser guitar.wav --speed 0.2 --decay 0.5 -o guitar-phaser.wav

# Pulso lento de tremolo encima (1 ciclo por segundo)
npx fqmpeg tremolo guitar-phaser.wav --freq 1 --depth 0.4 -o guitar-lofi.wav

El phaser provee el movimiento textural; el tremolo provee el pulso rítmico. Ambos a tasas lentas — la modulación rápida empuja esto de "lo-fi" a "cassette roto".

Efecto de diálogo radio AM

El clásico efecto de "voz por teléfono" necesita filtrado bandpass (en C9, no acá) más distorsión o eco. Combinar audio-bandpass con echo-effect es una aproximación rápida y creíble:

bash
# Paso 1: filtro de banda telefónica (300-3400 Hz) — verbo de C9
npx fqmpeg audio-bandpass voice.wav --low 300 --high 3400 -o voice-band.wav

# Paso 2: eco corto y metálico
npx fqmpeg echo-effect voice-band.wav --delay 60 --decay 0.5 --repeats 2 -o voice-radio.wav

El diálogo de radio AM real también agrega clipeo de amplitud y ruido — para eso, irías a acrusher y anoisesrc de FFmpeg crudo. fqmpeg actualmente no expone ninguno.

Preguntas frecuentes

¿Por qué reverb es tan diferente de un plugin de reverb de un DAW real?

Porque internamente es un filtro aecho de un solo tap, no una reverb de respuesta al impulso ni una red Schroeder. Con --delay 40 --decay 0.5 obtenés una reflexión discreta a 40 ms, atenuada al 50% — suficiente para sugerir "habitación pequeña" si mezclás liviano, pero le falta el cluster denso de reflexiones tempranas y la cola difusa que define un espacio real. Para reverb creíble, cambiá a ffmpeg ... -af freeverb=... (si tu build lo trae) o convolución vía afir con un WAV de respuesta al impulso.

¿Puedo afinar chorus para que suene menos "cálido" y más "etéreo"?

No vía fqmpeg — la configuración de 3 voces (delays 50|60|70 ms, decays 0.4|0.32|0.28) está hardcodeada. Podés cambiar solo la profundidad y velocidad del LFO, que controla cuánto oscilan las 3 voces existentes, no cómo están espaciadas. Para un chorus etéreo/ancho (ej. 8 voces distribuidas 20-200 ms con bajo decay), llamá al filtro chorus de FFmpeg directamente con listas personalizadas separadas por |. Usá npx fqmpeg chorus input --dry-run para ver el formato, después editá las listas en una invocación manual de FFmpeg.

flanger --mix 0.7 parece producir width=70 — ¿es un bug?

No, es el comportamiento intencional. El filtro flanger subyacente de FFmpeg espera width=0-100 para wet/dry, pero la convención CLI común para "mix" es 0-1. fqmpeg acepta el formato 0-1 y multiplica por 100. Las versiones anteriores (pre-v3.0) pasaban mix=0.7 directo al filtro, que lo ignoraba silenciosamente y corría con su default (100% wet). La multiplicación es la corrección.

¿Cómo es vibrato diferente de audio-pitch (en C9)?

audio-pitch desplaza el tono por un número fijo de semitonos, aplicado uniformemente a toda la pista. vibrato oscila el tono arriba y abajo alrededor del original a una tasa elegida — el tono promedio no cambia. Usá audio-pitch para transponer una melodía a otra tonalidad; usá vibrato para hacer que una nota sostenida "brille".

¿Por qué audio-karaoke deja la voz parcialmente audible?

Asume que las voces están paneadas idénticamente en ambos canales estéreo (lo que las hace cancelar cuando restás uno del otro). La producción pop moderna rompe esta suposición: las voces a menudo tienen ensanchado estéreo, doublers, reverb y chorus en un bus estéreo — ninguno cancela. La batería, el bajo y otros elementos paneados al centro también se cancelan, así que lo que queda es un instrumental delgado + voz fantasma. Para eliminación de voz real, usá herramientas de separación de fuentes basadas en ML (Spleeter, Demucs, Moises) fuera de FFmpeg.

¿audio-stereo-widen se rompe en reproducción mono?

Sí, ese es su riesgo principal. El retardo intercanal tipo Haas (default 20 ms) crea relaciones de fase que sumadas a mono se vuelven un filtro de peine — el audio suena hueco y con muescas. Si tu salida final podría reproducirse en un solo parlante (parlantes inteligentes, altavoz de teléfono, Bluetooth mono, simulcast de radio AM), probá el downmix mono primero: ffmpeg -i input-wide.mp4 -ac 1 -t 10 mono-test.mp3. Si suena significativamente peor que la fuente, bajá --delay (probá 8-12 ms) o salteá el ensanchado para esa entrega.

¿Puedo encadenar múltiples verbos C10 en un solo pase de FFmpeg para evitar pérdida de generación?

No vía fqmpeg directamente — cada verbo produce su propia salida y reencoda. Para intermedios sin pérdida entre verbos, pasar -c:a copy no ayuda porque el filtro tiene que reencodear audio; en su lugar, encodea cada paso a un formato sin pérdida como FLAC o WAV con FFmpeg crudo, o copiá los strings de filtro de cada --dry-run y combinalos en una invocación de FFmpeg:

bash
# Combinar chorus + reverb en un solo pase (filtros de --dry-run)
ffmpeg -i voice.wav -af "chorus=0.5:0.9:50|60|70:0.4|0.32|0.28:1.5|1.5|1.5:0.3|0.3|0.3,aecho=0.8:0.88:60:0.3" voice-warm.wav

Tremolo y vibrato tienen los mismos flags — ¿cómo recuerdo cuál es cuál?

Una mnemotécnica: tremolo modula volumen (pensá en "tembla la sonoridad" — una nota sostenida que pulsa); vibrato modula tono (pensá en "vibra la cuerda" — una nota sostenida que ondula en tono). Mismos --freq y --depth, sensación musical opuesta.

Cierre

Los nueve verbos de C10 cubren las operaciones de efecto creativo más comunes a las que recurrirías entre EQ/dinámica (C9) y entrega final:

  • reverb, echo-effect para profundidad basada en tiempo (la reverb de un tap es honesta sobre ser un aecho de 1 tap; el decaimiento geométrico de echo es el modelo físico natural)
  • chorus, phaser, flanger, tremolo, vibrato para modulación LFO (chorus tiene la maquinaria más oculta — el preset de 3 voces es hardcodeado e intencional; tremolo y vibrato comparten superficie de opciones pero hacen cosas completamente diferentes)
  • audio-karaoke, audio-stereo-widen para trucos de campo estéreo (karaoke solo funciona con voces secas paneadas al centro; widen se rompe en reproducción mono)

Cada verbo imprime su invocación FFmpeg subyacente con --dry-run, así que cuando la superficie simplificada no alcanza (chorus de 8 voces personalizado, ecos estéreo ping-pong, barrido triangular de phaser), copiá el filtro, editá los parámetros y llamá a FFmpeg directamente. Para el mapa completo de fqmpeg, ver la fqmpeg complete guide.