¿Qué es AAC (Advanced Audio Coding)?
Advanced Audio Coding, o AAC, es una familia de códecs de audio perceptuales con pérdida estandarizados por MPEG en MPEG-2 Parte 7 y MPEG-4 Parte 3. Suele almacenarse en archivos MP4 y M4A, encapsularse en tramas ADTS y transportarse en los segmentos multimedia de protocolos de streaming adaptativo como HLS y DASH.
Cómo funciona AAC (Advanced Audio Coding)
AAC comprime el audio mediante un modelo perceptual y un banco de filtros MDCT: los componentes espectrales se cuantizan con el objetivo de mantener el ruido resultante por debajo del umbral de enmascaramiento estimado, lo que hace que la codificación tenga pérdida. Es una familia de códecs, no una configuración fija. MPEG-4 define tipos de objeto de audio como AAC-LC, y los perfiles HE-AAC y HE-AAC v2 añaden Spectral Band Replication y Parametric Stereo sobre un núcleo AAC-LC. Los manifiestos y los tipos MIME identifican la variante mediante una cadena de códecs conforme al RFC 6381: mp4a.40.2 para AAC-LC, mp4a.40.5 para HE-AAC y mp4a.40.29 para HE-AAC v2. Con Spectral Band Replication, el núcleo AAC-LC suele funcionar a la mitad de la frecuencia de muestreo de salida, por lo que la frecuencia de muestreo y el número de canales declarados por un flujo dependen de si su señalización describe el núcleo o la salida del decodificador. Cuando la frecuencia de salida se duplica de esta manera, una trama HE-AAC se decodifica en 2048 muestras de salida, mientras que una trama AAC-LC suele contener 1024.
Datos clave
- ¿Puede un decodificador AAC-LC reproducir HE-AAC? Solo el núcleo, y únicamente cuando la señalización es retrocompatible. HE-AAC consta de un núcleo AAC-LC más Spectral Band Replication (SBR), y HE-AAC v2 añade Parametric Stereo (PS); un decodificador HE-AAC v2 también decodifica HE-AAC y AAC-LC. Con señalización implícita, en la que la configuración del decodificador no declara SBR, o con señalización explícita retrocompatible, un decodificador compatible solo con AAC-LC decodifica únicamente el núcleo: audio de banda limitada, normalmente a la mitad de la frecuencia de muestreo de salida y, cuando se utiliza PS, en mono. Con señalización jerárquica explícita, los decodificadores compatibles solo con AAC-LC no pueden decodificar el flujo en absoluto, y los decodificadores sin soporte para PS no pueden decodificar HE-AAC v2.
- ¿Cómo debe señalizarse HE-AAC para streaming? La especificación de creación de HLS de Apple exige señalización explícita de los datos SBR para HE-AAC en MP4 fragmentado sin especificar un modo, y las directrices de interoperabilidad de DASH-IF recomiendan el modo explícito retrocompatible para SBR y PS y contemplan que los clientes reproduzcan AAC-LC, HE-AAC y HE-AAC v2. En un manifiesto DASH, la frecuencia de muestreo y la configuración de canales declaradas describen la salida después de SBR y PS, por ejemplo, 48 kHz en estéreo a partir de un núcleo mono de 24 kHz. Los reproductores usan la cadena de códecs declarada para decidir si pueden reproducir una variante, por lo que un dispositivo compatible solo con AAC-LC puede omitir una declarada como
mp4a.40.5aunque su decodificador pudiera reproducir el núcleo. - ¿Es intercambiable AAC en ADTS con AAC en MP4? El audio codificado puede ser idéntico, pero la estructura de las tramas difiere. ADTS coloca un encabezado con los parámetros de decodificación antes de cada trama, de modo que un decodificador puede comenzar en cualquier trama sin una configuración independiente, aunque necesita la trama anterior para reproducir el audio correctamente. MP4 y M4A, en cambio, incluyen un AudioSpecificConfig de MPEG-4 como configuración del decodificador fuera de banda y almacenan las tramas sin encabezado en cajas de datos multimedia, localizadas mediante las tablas de muestras de la caja de película en un archivo normal y mediante cada caja de fragmento de película en MP4 fragmentado. Al trasladar audio entre ambos, se reescribe la estructura de las tramas sin decodificarlo, por ejemplo, con el filtro de flujo de bits
aac_adtstoascde FFmpeg. El filtro construye esa configuración a partir del encabezado ADTS, que solo puede señalizar SBR de forma implícita, por lo que, para HE-AAC, no añade por sí solo la señalización SBR explícita que Apple exige en MP4 fragmentado. - ¿Por qué el AAC decodificado dura más que su fuente? Los codificadores anteponen muestras silenciosas de preparación (una cantidad que depende de la implementación, históricamente a menudo 2112) y añaden relleno al paquete final, que suele contener 1024 muestras. A menos que el reproductor recorte ambas cosas, el audio comienza tarde respecto al video y el relleno permanece en la salida decodificada, lo que afecta a las uniones sin interrupciones y las ediciones con precisión de muestra. Los archivos MP4 y M4A pueden indicar el recorte explícitamente mediante una lista de edición y grupos de muestras de tipo roll; los flujos de bits AAC normalmente no transmiten esa información, por lo que un reproductor ADTS tiene que asumir un valor. En MP4 fragmentado, la lista de edición se encuentra en el segmento de inicialización; las directrices de DASH-IF exigen que el contenido se reproduzca correctamente cuando los clientes ignoran las listas de edición, y el RFC 8216 no las menciona para HLS, por lo que un paquete de streaming no debería depender únicamente de una de ellas.
Cuándo es importante AAC (Advanced Audio Coding)
Elige AAC cuando un único formato de audio con pérdida deba reproducirse en distintos navegadores y reproductores HLS o DASH; algunos navegadores dependen del decodificador del sistema operativo en lugar de incluir uno propio. Usa AAC-LC de forma predeterminada y reserva HE-AAC para tasas de bits bajas: la especificación de creación de HLS de Apple indica que HE-AAC no debería usarse por encima de 64 kbit/s. Como punto de referencia, la documentación del codificador FDK AAC de Fraunhofer sugiere entre 1 y 1,5 bits por muestra de audio para AAC-LC, que sitúa entre 48 y 72 kbit/s para un canal de 48 kHz, frente a 0,625 para HE-AAC con un núcleo a la mitad de la frecuencia de muestreo de salida y 0,5 para HE-AAC v2.
Cómo ayuda Transloadit con AAC (Advanced Audio Coding)
El Robot /audio/encode de Transloadit realiza el encoding de audio a AAC con sus ajustes preestablecidos aac y audio/aac, que producen una salida MP4. La tasa de bits, la frecuencia de muestreo y las opciones individuales de FFmpeg pueden sobrescribirse por Step, y los ajustes preestablecidos de audio dash/ preparan variantes AAC que /video/adaptive puede combinar en un flujo adaptativo.
La página de ajustes preestablecidos enumera el códec, la tasa de bits y la frecuencia de muestreo de cada uno según la versión del stack de FFmpeg.
Fuentes
- W3C: Registro de AAC para WebCodecs (cadenas de códecs, formatos ADTS y AAC sin encapsular, muestras de preparación)
- RFC 6416: Formato de carga útil RTP para flujos audiovisuales MPEG-4 (señalización de SBR y PS)
- Encabezado de la API del codificador Fraunhofer FDK AAC: modos de señalización SBR y tamaño de trama HE-AAC
- RFC 6381: Los parámetros «Codecs» y «Profiles» para tipos de medios «contenedor»
- RFC 8216: HTTP Live Streaming (segmentos MPEG-4 fragmentados y de audio empaquetado)
- Apple: Especificación de creación de HLS para dispositivos Apple (requisitos de audio)
- Puntos de interoperabilidad de DASH-IF v4.3, sección 6.3: Audio
- Formato de archivo QuickTime de Apple: fundamentos del encoding AAC (muestras de preparación y de relleno final)
- Formato de archivo QuickTime de Apple: uso de estructuras de pista para representar explícitamente el retardo del codificador (lista de edición y grupos de muestras de tipo roll)
- Nota técnica TN2258 de Apple: Audio AAC (retardo del codificador y sincronización)
- W3C: Formato de flujo de bytes de audio MPEG (tramas ADTS en Media Source Extensions)
- Documentación de filtros de flujo de bits de FFmpeg: aac_adtstoasc
- Brandenburg: Explicación de MP3 y AAC (Conferencia Internacional número 17 de AES)
- MDN: Guía de códecs de audio para la web