Qu’est-ce que l’AAC (Advanced Audio Coding) ?

Advanced Audio Coding, ou AAC, est une famille de codecs audio perceptuels avec perte normalisée par MPEG dans MPEG-2 partie 7 et MPEG-4 partie 3. L’audio AAC est couramment stocké dans des fichiers MP4 et M4A, encapsulé en trames ADTS et transporté dans les segments multimédias de protocoles de streaming adaptatif tels que HLS et DASH.

Fonctionnement de l’AAC (Advanced Audio Coding)

AAC compresse l’audio à l’aide d’un modèle perceptuel et d’un banc de filtres MDCT : les composantes spectrales sont quantifiées dans le but de maintenir le bruit résultant sous le seuil de masquage estimé, ce qui rend le codage avec perte. Il s’agit d’une famille de codecs plutôt que d’une configuration fixe unique. MPEG-4 définit des types d’objets audio tels qu’AAC-LC, et les profils HE-AAC et HE-AAC v2 ajoutent Spectral Band Replication et Parametric Stereo à un noyau AAC-LC. Les manifestes et les types MIME désignent la variante à l’aide d’une chaîne de codecs conforme à la RFC 6381 : mp4a.40.2 pour AAC-LC, mp4a.40.5 pour HE-AAC et mp4a.40.29 pour HE-AAC v2. Avec Spectral Band Replication, le noyau AAC-LC fonctionne généralement à la moitié de la fréquence d’échantillonnage de sortie. La fréquence d’échantillonnage et le nombre de canaux déclarés par un flux dépendent donc de ce que sa signalisation décrit : le noyau ou la sortie du décodeur. Lorsque la fréquence de sortie est ainsi doublée, une trame HE-AAC donne au décodage 2048 échantillons de sortie, tandis qu’une trame AAC-LC en contient généralement 1024.

Points clés

  1. Un décodeur AAC-LC peut-il lire du HE-AAC ? Uniquement le noyau, et seulement si la signalisation est rétrocompatible. HE-AAC associe un noyau AAC-LC à Spectral Band Replication (SBR), et HE-AAC v2 ajoute Parametric Stereo (PS) ; un décodeur HE-AAC v2 décode également HE-AAC et AAC-LC. Avec une signalisation implicite, où la configuration du décodeur ne déclare pas SBR, ou une signalisation explicite rétrocompatible, un décodeur limité à AAC-LC décode uniquement le noyau : un audio à bande limitée, généralement à la moitié de la fréquence d’échantillonnage de sortie et, lorsque PS est utilisé, en mono. Avec une signalisation explicite hiérarchique, les décodeurs limités à AAC-LC ne peuvent pas du tout décoder le flux, et les décodeurs sans prise en charge de PS ne peuvent pas décoder HE-AAC v2.
  2. Comment signaler HE-AAC pour le streaming ? La spécification de création HLS d’Apple exige une signalisation explicite des données SBR pour HE-AAC dans du MP4 fragmenté, sans nommer de mode. Les recommandations d’interopérabilité de DASH-IF préconisent le mode explicite rétrocompatible pour SBR et PS et attendent des clients qu’ils lisent AAC-LC, HE-AAC et HE-AAC v2. Dans un manifeste DASH, la fréquence d’échantillonnage et la configuration des canaux déclarées décrivent la sortie après SBR et PS, par exemple 48 kHz en stéréo à partir d’un noyau mono à 24 kHz. Les lecteurs utilisent la chaîne de codecs déclarée pour déterminer s’ils peuvent lire un rendu. Un appareil limité à AAC-LC peut donc ignorer un rendu déclaré comme mp4a.40.5, même si son décodeur pourrait lire le noyau.
  3. L’AAC en ADTS est-il interchangeable avec l’AAC en MP4 ? L’audio codé peut être identique, mais la mise en trames diffère. ADTS place un en-tête contenant les paramètres de décodage devant chaque trame. Un décodeur peut donc démarrer à n’importe quelle trame sans configuration séparée, bien qu’il ait besoin de la trame précédente pour reproduire correctement l’audio. MP4 et M4A transportent plutôt une unique AudioSpecificConfig MPEG-4 comme configuration de décodeur hors bande et stockent les trames sans en-tête dans des boîtes de données multimédias. Ces trames sont localisées à l’aide des tables d’échantillons de la boîte movie dans un fichier classique, et de chaque boîte movie fragment dans du MP4 fragmenté. Le passage de l’audio d’un format à l’autre réécrit la mise en trames sans décodage, par exemple avec le filtre de flux binaire aac_adtstoasc de FFmpeg. Ce filtre construit la configuration à partir de l’en-tête ADTS, qui ne peut signaler SBR qu’implicitement. Pour HE-AAC, il n’ajoute donc pas à lui seul la signalisation SBR explicite exigée par Apple dans du MP4 fragmenté.
  4. Pourquoi l’AAC décodé est-il plus long que sa source ? Les encodeurs ajoutent au début des échantillons d’amorçage silencieux, dont le nombre dépend de l’implémentation et était historiquement souvent de 2112, puis complètent le dernier paquet par du remplissage ; ce paquet contient généralement 1024 échantillons. Si le lecteur ne supprime pas les deux, l’audio commence en retard par rapport à la vidéo et le remplissage reste dans la sortie décodée, ce qui compte pour les raccords sans interruption et les montages à l’échantillon près. Les fichiers MP4 et M4A peuvent indiquer explicitement les éléments à supprimer au moyen d’une liste de montage et de groupes d’échantillons roll ; les flux binaires AAC eux-mêmes ne transmettent généralement pas cette information, si bien qu’un lecteur ADTS doit supposer une valeur. Dans du MP4 fragmenté, la liste de montage se trouve dans le segment d’initialisation. Les recommandations de DASH-IF exigent que le contenu soit lu correctement lorsque les clients ignorent les listes de montage, et la RFC 8216 ne les mentionne pas pour HLS. Le conditionnement du contenu pour le streaming ne devrait donc pas dépendre d’une telle liste seule.

Quand l’AAC (Advanced Audio Coding) est utile

Choisissez AAC lorsqu’un même format audio avec perte doit être lu dans les navigateurs et les lecteurs HLS ou DASH ; certains navigateurs s’appuient sur le décodeur du système d’exploitation plutôt que d’intégrer le leur. Utilisez AAC-LC par défaut et réservez HE-AAC aux faibles débits : la spécification de création HLS d’Apple indique que HE-AAC ne devrait pas être utilisé au-delà de 64 kbit/s. Comme point de fonctionnement, la documentation de l’encodeur FDK AAC de Fraunhofer suggère 1 à 1,5 bits par échantillon audio pour AAC-LC, soit, selon elle, 48 à 72 kbit/s pour un canal à 48 kHz, contre 0,625 pour HE-AAC avec un noyau à demi-fréquence et 0,5 pour HE-AAC v2.

L’apport de Transloadit pour l’AAC (Advanced Audio Coding)

Le Robot /audio/encode de Transloadit encode l’audio en AAC avec ses préréglages aac et audio/aac, qui produisent une sortie MP4. Le débit, la fréquence d’échantillonnage et les options FFmpeg individuelles peuvent être redéfinis pour chaque Step. Les préréglages audio dash/ préparent des rendus AAC que /video/adaptive peut combiner en un flux adaptatif.

La page des préréglages indique le codec, le débit et la fréquence d’échantillonnage de chaque préréglage pour chaque version de la pile FFmpeg.

Découvrir les fonctionnalités audio de Transloadit

Références

Transformer vos connaissances sur les médias en une chaîne de traitement opérationnelle

Reliez les téléversements, le traitement, l’IA, le stockage et la diffusion via une seule API déclarative — la pile d’encodage, la montée en charge et l’évolution constante des formats sont prises en charge pour vous.

Essayer Transloadit gratuitement