Was ist AAC (Advanced Audio Coding)?
Advanced Audio Coding, kurz AAC, ist eine Familie verlustbehafteter, wahrnehmungsbasierter Audiocodecs, die MPEG in MPEG-2 (Teil 7) und MPEG-4 (Teil 3) standardisiert hat. AAC wird häufig in MP4- und M4A-Dateien gespeichert, in ADTS-Frames verpackt und in den Mediensegmenten adaptiver Streaming-Protokolle wie HLS und DASH übertragen.
So funktioniert AAC (Advanced Audio Coding)
AAC komprimiert Audio mit einem Wahrnehmungsmodell und einer MDCT-Filterbank: Spektrale Komponenten werden quantisiert, damit das entstehende Rauschen möglichst unter der geschätzten Maskierungsschwelle bleibt. Dadurch ist das Encoding verlustbehaftet. AAC ist eine Codec-Familie und keine einzelne feste Konfiguration. MPEG-4 definiert Audioobjekttypen wie AAC-LC. Die Profile HE-AAC und HE-AAC v2 ergänzen einen AAC-LC-Kern um Spectral Band Replication und Parametric Stereo. Manifeste und MIME-Typen benennen die Variante mit einer Codec-Zeichenfolge gemäß RFC 6381: mp4a.40.2 für AAC-LC, mp4a.40.5 für HE-AAC und mp4a.40.29 für HE-AAC v2. Mit Spectral Band Replication arbeitet der AAC-LC-Kern üblicherweise mit der halben Ausgabeabtastrate. Welche Abtastrate und Kanalanzahl ein Stream angibt, hängt daher davon ab, ob seine Signalisierung den Kern oder die Decoderausgabe beschreibt. Wird die Ausgabeabtastrate auf diese Weise verdoppelt, ergibt das Decodieren eines HE-AAC-Frames 2048 Ausgabesamples, während ein AAC-LC-Frame üblicherweise 1024 enthält.
Wichtige Fakten
- Kann ein AAC-LC-Decoder HE-AAC wiedergeben? Nur den Kern, und nur bei rückwärtskompatibler Signalisierung. HE-AAC besteht aus einem AAC-LC-Kern plus Spectral Band Replication (SBR), HE-AAC v2 ergänzt Parametric Stereo (PS). Ein Decoder für HE-AAC v2 decodiert auch HE-AAC und AAC-LC. Bei impliziter Signalisierung, bei der die Decoderkonfiguration SBR nicht deklariert, oder bei expliziter rückwärtskompatibler Signalisierung decodiert ein reiner AAC-LC-Decoder nur den Kern: bandbegrenztes Audio, üblicherweise mit der halben Ausgabeabtastrate und bei Verwendung von PS in Mono. Bei expliziter hierarchischer Signalisierung können reine AAC-LC-Decoder den Stream überhaupt nicht decodieren. Decoder ohne PS-Unterstützung können HE-AAC v2 nicht decodieren.
- Wie sollte HE-AAC für Streaming signalisiert werden? Die HLS-Authoring-Spezifikation von Apple verlangt für HE-AAC in fragmentiertem MP4 eine explizite Signalisierung der SBR-Daten, ohne einen Modus zu nennen. Die Interoperabilitätsrichtlinien von DASH-IF empfehlen für SBR und PS den expliziten rückwärtskompatiblen Modus und erwarten, dass Clients AAC-LC, HE-AAC und HE-AAC v2 wiedergeben. In einem DASH-Manifest beschreiben die deklarierte Abtastrate und Kanalkonfiguration die Ausgabe nach SBR und PS, beispielsweise 48 kHz in Stereo bei einem Mono-Kern mit 24 kHz. Player entscheiden anhand der deklarierten Codec-Zeichenfolge, ob sie eine Variante wiedergeben können. Ein reines AAC-LC-Gerät kann daher eine als
mp4a.40.5deklarierte Variante überspringen, selbst wenn sein Decoder den Kern wiedergeben könnte. - Sind AAC in ADTS und AAC in MP4 austauschbar? Die codierten Audiodaten können identisch sein, die Frame-Struktur unterscheidet sich jedoch. ADTS stellt jedem Frame einen Header mit den Decodierungsparametern voran. Ein Decoder kann deshalb ohne separate Konfiguration an jedem Frame beginnen, benötigt für die korrekte Audiowiedergabe allerdings den vorherigen Frame. MP4 und M4A enthalten stattdessen eine AudioSpecificConfig gemäß MPEG-4 als Out-of-Band-Decoderkonfiguration und speichern Frames ohne Header in Mediendatenboxen. In einer regulären Datei werden diese über die Sample-Tabellen der Movie-Box lokalisiert, in fragmentiertem MP4 über die jeweilige Movie-Fragment-Box. Beim Übertragen von Audio zwischen den beiden Formaten wird die Frame-Struktur ohne Decodieren umgeschrieben, beispielsweise mit dem Bitstream-Filter
aac_adtstoascvon FFmpeg. Der Filter erstellt diese Konfiguration aus dem ADTS-Header, der SBR nur implizit signalisieren kann. Bei HE-AAC fügt er daher allein nicht die explizite SBR-Signalisierung hinzu, die Apple für fragmentiertes MP4 verlangt. - Warum ist decodiertes AAC länger als seine Quelle? Encoder stellen stumme Priming-Samples voran, deren Anzahl von der Implementierung abhängt und früher häufig 2112 betrug. Außerdem füllen sie das letzte Paket auf, das üblicherweise 1024 Samples enthält. Wenn ein Player nicht beides abschneidet, beginnt Audio gegenüber Video verspätet, und die Auffüllung bleibt in der decodierten Ausgabe erhalten. Das ist für lückenlose Übergänge und samplegenaue Bearbeitungen relevant. MP4- und M4A-Dateien können den Zuschnitt mit einer Edit-Liste und Roll-Sample-Gruppen explizit angeben. AAC-Bitstreams selbst übermitteln ihn üblicherweise nicht, weshalb ein ADTS-Player einen Wert annehmen muss. Bei fragmentiertem MP4 liegt die Edit-Liste im Initialisierungssegment. Die DASH-IF-Richtlinien verlangen, dass Inhalte auch dann korrekt wiedergegeben werden, wenn Clients Edit-Listen ignorieren, und RFC 8216 erwähnt sie für HLS nicht. Ein Streaming-Paket sollte sich daher nicht allein auf eine Edit-Liste verlassen.
Wann AAC (Advanced Audio Coding) relevant ist
Wählen Sie AAC, wenn ein einziges verlustbehaftetes Audioformat in Browsern sowie HLS- oder DASH-Playern wiedergegeben werden muss. Manche Browser nutzen den Decoder des Betriebssystems, statt einen eigenen mitzuliefern. Verwenden Sie standardmäßig AAC-LC und reservieren Sie HE-AAC für niedrige Bitraten: Laut der HLS-Authoring-Spezifikation von Apple sollte HE-AAC nicht oberhalb von 64 kbit/s verwendet werden. Als Arbeitspunkt empfiehlt die Dokumentation des FDK-AAC-Encoders von Fraunhofer für AAC-LC 1 bis 1,5 Bit pro Audiosample. Für einen Kanal mit 48 kHz entspricht das laut Dokumentation 48 bis 72 kbit/s. Dem stehen 0,625 für HE-AAC mit einem Kern bei halber Abtastrate und 0,5 für HE-AAC v2 gegenüber.
So hilft Transloadit bei AAC (Advanced Audio Coding)
Der Robot /audio/encode von Transloadit codiert Audio mit den Voreinstellungen aac und audio/aac in AAC. Beide erzeugen eine MP4-Ausgabe. Bitrate, Abtastrate und einzelne FFmpeg-Optionen lassen sich pro Step überschreiben. Die Audio-Voreinstellungen dash/ bereiten AAC-Varianten vor, die /video/adaptive zu einem adaptiven Stream kombinieren kann.
Die Seite zu Voreinstellungen listet für jede Voreinstellung Codec, Bitrate und Abtastrate je FFmpeg-Stack-Version auf.
Quellen
- W3C: AAC-Registrierung für WebCodecs (Codec-Zeichenfolgen, ADTS- und rohe AAC-Formate, Priming-Samples)
- RFC 6416: RTP-Nutzlastformat für Audio-/Videostreams gemäß MPEG-4 (SBR- und PS-Signalisierung)
- API-Header des Fraunhofer-FDK-AAC-Encoders: SBR-Signalisierungsmodi und HE-AAC-Framegröße
- RFC 6381: Die Parameter „Codecs“ und „Profiles“ für „Bucket“-Medientypen
- RFC 8216: HTTP Live Streaming (fragmentierte Segmente gemäß MPEG-4 und Packed-Audio-Segmente)
- Apple: HLS-Authoring-Spezifikation für Apple-Geräte (Audioanforderungen)
- DASH-IF-Interoperabilitätsrichtlinien v4.3, Abschnitt 6.3: Audio
- Apple-QuickTime-Dateiformat: Hintergründe zum AAC-Encoding (Priming- und Restsamples)
- Apple-QuickTime-Dateiformat: Encoderverzögerung mit Track-Strukturen explizit darstellen (Edit-Liste und Roll-Sample-Gruppen)
- Technischer Hinweis TN2258 von Apple: AAC-Audio – Encoderverzögerung und Synchronisierung
- W3C: MPEG-Audio-Bytestream-Format (ADTS-Frames in Media Source Extensions)
- FFmpeg-Dokumentation zu Bitstream-Filtern: aac_adtstoasc
- Brandenburg: MP3 und AAC erklärt (Internationale AES-Konferenz Nr. 17)
- MDN: Leitfaden zu Audiocodecs im Web