Opción 1: Filtros de normalización incorporados
Actualmente ffmpeg tiene dos filtros que se pueden utilizar directamente para la normalización - aunque ya son bastante avanzados, por lo que no se limitan a aplicar la ganancia para alcanzar un nivel máximo. Aquí están:
-
loudnorm
: normalización de la sonoridad según EBU R128. Se puede establecer un objetivo de sonoridad integrado, un objetivo de rango de sonoridad o un pico real máximo. Se recomienda para la publicación de audio y vídeo y lo utilizan emisoras de todo el mundo.
-
dynaudnorm
: Normalización “inteligente” de la sonoridad sin recorte, que aplica la normalización de forma dinámica sobre las porciones de ventana del archivo. Esto puede cambiar las características del sonido, por lo que debe aplicarse con precaución.
Además, el filtro volume
puede utilizarse para realizar ajustes de volumen sencillos. Consulte la entrada de la wiki Manipulación del volumen del audio para más información.
El filtro loudnorm
puede utilizarse con una sola pasada, pero se recomienda realizar dos pasadas, lo que permite una normalización lineal más precisa. Esto es un poco difícil de automatizar. Además, si quieres una normalización “simple” basada en RMS o en picos a 0 dBFS (o cualquier otro objetivo), sigue leyendo.
Opción 2: Usar la herramienta ffmpeg-normalize
He creado un programa en Python para normalizar archivos multimedia , disponible también en PyPi . Simplemente:
- descargue ffmpeg (elija una construcción estática, versión 3. 1 o superior)
- poner el ejecutable
ffmpeg
en su $PATH
añadiéndolo, por ejemplo, en /usr/local/bin
, o añadiendo su directorio a $PATH
- Ejecutar
pip install ffmpeg-normalize
- Usar
ffmpeg-normalize
Por ejemplo:
ffmpeg-normalize input.mp4 -o output.mp4 -c:a aac -b:a 192k
O, para simplemente normalizar por lotes un número de archivos de audio y escribirlos como WAV sin comprimir en una carpeta de salida:
ffmpeg-normalize *.m4a -of /path/to/outputFolder -ext wav
La herramienta soporta EBU R128 (por defecto), RMS y pico. Echa un vistazo a ffmpeg-normalize -h
para ver más opciones y consulta el README para ver algunos ejemplos.
Además, soporta la recodificación con otros codificadores (por ejemplo, AAC o MP3), o la fusión automática del audio con el vídeo.
Opción 3: Normalizar manualmente el audio con ffmpeg
En ffmpeg puede utilizar el filtro volume
para cambiar el volumen de una pista. Asegúrate de descargar una versión reciente del programa.
Esta guía es para la normalización de pico, lo que significa que hará que la parte más fuerte del archivo se sitúe en 0 dB en lugar de algo más bajo. También hay una normalización basada en RMS que trata de hacer que la sonoridad promedio sea la misma en varios archivos. Para ello, no intenta llevar el volumen máximo a 0 dB, sino el volumen medio al nivel de dB elegido (por ejemplo, -26 dB).
Averiguar la ganancia a aplicar
Primero hay que analizar el flujo de audio para el volumen máximo para ver si la normalización valdría la pena:
ffmpeg -i video.avi -af "volumedetect" -vn -sn -dn -f null /dev/null
Sustituir /dev/null
por NUL
en Windows.
Los argumentos -vn
, -sn
, y -dn
indican a ffmpeg que ignore los flujos que no son de audio durante este análisis. Esto acelera drásticamente el análisis.
El resultado será algo parecido a lo siguiente:
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] mean_volume: -16.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] max_volume: -5.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] histogram_0db: 87861
Como puede ver, nuestro volumen máximo es de -5,0 dB, por lo que podemos aplicar una ganancia de 5 dB. Si obtienes un valor de 0 dB, entonces no necesitas normalizar el audio.
Aplicar el filtro de volumen:
Ahora aplicamos el filtro volume
a un archivo de audio. Tenga en cuenta que aplicar el filtro significa que tendremos que recodificar el flujo de audio. El códec que quieras para el audio depende del formato original, por supuesto. He aquí algunos ejemplos:
Archivo de audio plano: Simplemente codifica el archivo con el codificador que necesites:
Formato AVI: Normalmente hay audio MP3 con el vídeo que viene en un contenedor AVI:
Formato MP4: Con un contenedor MP4, normalmente encontrarás audio AAC. Podemos utilizar el codificador AAC incorporado de ffmpeg.
En los ejemplos anteriores, el flujo de vídeo se copiará con -c:v copy
. Si hay subtítulos en su archivo de entrada, o múltiples flujos de vídeo, utilice la opción -map 0
antes del nombre del archivo de salida.