El número estaba bien

El documento de política de audio de la fábrica de vídeo cuenta un caso concreto: la cama de audio sinusoidal de la versión V2.2 midió exactamente en su objetivo, y aun así una persona la encontró “too synthetic, too loud” (demasiado sintética, demasiado fuerte).

La documentación de ffmpeg describe el filtro loudnorm como “EBU R128 loudness normalization.” Ese tipo de filtro lleva una mezcla a un número. Lo que el caso muestra es que llegar al número no responde a la pregunta de si suena bien.

Lo que dice el código

Un comentario en audio_gate.py dice que “LUFS in range is NECESSARY, never sufficient”. El módulo guarda dos veredictos separados:

  • TECHNICAL_AUDIO_PASS, que calcula la máquina. La función technical_verdict añade un motivo de fallo, por ejemplo, cuando la sonoridad integrada no se midió.
  • HUMAN_AUDIO_PASS, que nace en falso. gate_state devuelve HUMAN_AUDIO_PASS en False, con human_audio_state en PENDING y human_audio_pass_by en None.

La única vía para cambiarlo es human_pass, y esa función lanza un ValueError si no recibe el nombre de la persona que escuchó, y otro si no recibe la variante de audio que se oyó. Un generador no tiene nada que pasarle: hace falta alguien con nombre.

La política documentada añade una excepción: la puerta humana no se exige a una pieza realmente silenciosa (audio_kind: "none").

Validar antes de ffmpeg

El mismo módulo valida cada evento de audio antes de que llegue a una cadena de filtros. Un comentario explica el motivo: un número NaN, inf, negativo o absurdo “must never become adelay=nan|nan or volume=infdB”. La función auxiliar _finite rechaza los booleanos y los números no finitos.

La lección

Cuando el objetivo es la percepción, la métrica es un suelo de seguridad, no una puntuación de calidad. Guarda el veredicto de la máquina y el de la persona en campos distintos, para que uno no pueda ocupar el lugar del otro.

El mensaje de un commit relacionado dice que los niveles “are reported but are NOT an acceptance”: se informan, pero no aceptan nada.

Si quieres ver más cómo montamos estas puertas, sigue el blog.

Fuentes

  1. FFmpeg Filters Documentation: loudnorm