The basics
What is an AAC file?
AAC (Advanced Audio Coding) is the lossy audio codec that succeeded MP3. It sounds better than MP3 at the same bit rate, particularly at low bit rates, and it's the audio inside most MP4 videos, M4A music files, streaming services, digital radio and phone recordings. Most of the time you meet AAC inside a container, as an .m4a or .mp4 file.
A .aac file is AAC without that container: the raw stream of frames, each with a small ADTS header that repeats the format details. That makes it easy to stream and to cut, like an MP3, but it loses what a container provides: an index for seeking, an exact duration, gapless playback information and proper tags. You'll typically find .aac files when audio is extracted from a video, recorded from an internet radio stream, produced by some voice recorders and screen recorders, or used as segments in HTTP Live Streaming.
Codec, not container
"AAC" names the compression. An M4A file and an AAC file can hold exactly the same compressed audio; the difference is the packaging. Converting between them with -c copy changes the packaging without re-encoding.
Anatomy
What's inside an AAC file
A raw AAC file is nothing but ADTS frames back to back. Each frame is a header of 7 bytes (9 with a checksum) followed by one block of compressed audio, about 23 milliseconds at 44.1 kHz. The header's fields don't line up with byte boundaries, so the annotation below splits them by bits. Here are the real bytes of sample-adts-lc.aac, our 10-second sample.
offset bytes meaning
0 FF F1 50 80 2E 62 44 frame 0: ADTS header, 7 bytes
FF F sync word: 12 bits of 1
1 MPEG-4, layer 0, no CRC
50 8 … AAC-LC, 44,100 Hz, 2 channels
… 2E 6 … frame length: 371 bytes
… 2 44 buffer fullness 0x091, 1 block
7 21 11 45 00 14 50 01 46 … AAC audio data: 364 bytes
371 FF F1 50 80 2E 62 44 frame 1: 371 bytes
742 FF F1 50 80 3C 42 0C frame 2: 482 bytes
1,224 FF F1 50 80 20 C2 … frame 3: 262 bytes
… 433 frames in all, 262 to 482 bytes
160,496 FF F1 50 80 2E 82 44 frame 432: 372 bytes
160,868 end of file: no index, no trailer- 1
FF FThe sync word
12 bits that are all 1. Every frame starts with it, so a player can start in the middle of a stream and find the next frame. It's not a unique signature: other formats, and the audio data itself, can contain the same bits, so a parser checks that the next frame starts where this header says it will.
- 2
1 (0001)ID, layer and protection
1 bit of MPEG version (0 for MPEG-4, 1 for MPEG-2, which gives
FF F9), 2 bits of layer (always 0) and a protection-absent bit. 1 means there's no CRC, so the header is 7 bytes; 0 adds a 2-byte CRC, as in oursample-crc-mono-48khz.aac, which startsFF F0. - 3
50 (0101 0000)Profile and sample rate
2 bits of profile,
01, which is the audio object type minus 1: object type 2, AAC-LC. Then a 4-bit sample rate index,0100= 4, meaning 44,100 Hz, and a private bit. - 4
80 (10 …)Channels
A 3-bit channel configuration split across bytes 2 and 3:
010= 2, stereo. The remaining bits of byte 3 are flags for originality and copyright, all 0 here. - 5
… 2E 6 …Frame length
13 bits giving the length of the whole frame, header included: 371 bytes. This is how a reader steps from frame to frame. 13 bits caps a frame at 8,191 bytes.
- 6
… 2 44Buffer fullness and block count
11 bits of decoder buffer fullness (
0x091here, a constant-bit-rate stream;0x7FFsignals variable bit rate), then the number of audio blocks in the frame minus 1: 0, so one block of 1,024 samples. - 7
21 11 45 00 …The audio data
The compressed audio for 1,024 samples per channel: 364 bytes in this frame. The encoder counts the 7-byte header as part of its 128 kbps budget, so in our M4A sample, made with the same encoder from the same music, the audio blocks are 7 bytes bigger on average and carry no headers: their sizes live in the index instead.
- 8
433 framesNo index, no end
The file simply stops after the last frame. Nothing records the total length, so a player works out the duration from the file size and bit rate, or by reading every header.
Versions
AAC-LC, HE-AAC and HE-AAC v2
| Profile | What it adds | Typical stereo bit rate | Used for |
|---|---|---|---|
| AAC-LC (Low Complexity) | The core codec | About 96 to 256 kbps | Music downloads, video soundtracks, most .aac and .m4a files. |
| HE-AAC (v1, also called AAC+) | Spectral band replication (SBR): the core codes the lower frequencies at half the sample rate, and the decoder rebuilds the highs from a few hints | About 32 to 64 kbps | Internet radio, streaming at low bit rates. |
| HE-AAC v2 (eAAC+) | Parametric stereo (PS) on top of SBR: the core codes mono, plus parameters to recreate the stereo image | About 32 kbps and below | Very low bit rates, such as DAB+ digital radio and mobile streaming. |
| AAC Main, LTP, SSR | Older or specialised tools | Rare in files today. | |
| AAC-LD, AAC-ELD | Low delay for real-time use | Real-time communication such as video calls; not usually stored as files. |
The ADTS header has only 2 bits for the profile, so it can't say "HE-AAC" directly. HE-AAC files use implicit signalling instead: the header describes the AAC-LC core, and the decoder discovers SBR and PS inside the audio data. Our samples show it:
sample-he-aac.aachas headers that say AAC-LC at 22,050 Hz stereo. A full decoder finds the SBR data and outputs 44,100 Hz.sample-he-aac-v2.aachas headers that say AAC-LC at 22,050 Hz mono. A full decoder outputs 44,100 Hz stereo.- A decoder without SBR plays only the core: the right pitch and speed, but dull, because everything above about 11 kHz is missing. One without PS plays the v2 file in mono.
That's why tools sometimes disagree about the same file: one reports 22.05 kHz mono from the headers, another 44.1 kHz stereo from the decoded audio. ffprobe reports the decoded values and the profile, HE-AAC or HE-AACv2.
Packaging
Raw AAC (.aac) vs AAC in M4A
| `.aac` (ADTS) | `.m4a` (MP4 container) | |
|---|---|---|
| Structure | A 7-byte header on every frame | Headerless frames, plus one index (moov) for the whole file |
| Duration | Estimated from size and bit rate, or by reading every header | Stored exactly |
| Seeking | Approximate, unless the player scans the file | Exact, from the frame table |
| Gapless playback | Not possible: the encoder delay at the start can't be recorded | Delay and padding recorded, so players can trim them |
| Tags and cover art | None in the format; some tools prepend an ID3 tag | Full iTunes-style tags, cover art, chapters |
| Streaming and cutting | Start anywhere, cut at any frame, append more frames | Needs the index; live streaming uses fragmented MP4 |
Our featured .aac file and the featured M4A sample were made by the same encoder from the same music at a constant 128 kbps. Both streams have 433 frames totalling 160,868 bytes, but in the ADTS file 3,031 of those bytes (433 × 7) are headers, while the M4A spends them on audio and keeps the frame sizes in its index. The M4A also records that the first 2,048 samples (about 46 ms) are encoder delay. Played from the .aac file, that delay can't be trimmed: decoders return 10.054 seconds for 10 seconds of music.
Two other raw AAC formats sometimes carry the .aac extension too. ADIF has a single header at the start of the file and none on the frames; it's rarely used today. LATM/LOAS is the framing used in digital TV broadcasts. Both are registered under the same media type, but not every player that handles ADTS handles them.
Metadata
Tags in AAC files: ID3 and HLS timestamps
ADTS has no place for a title or artist. In practice, two kinds of tag show up in .aac files:
- ID3v2 tags, the same tags MP3 files use, placed before the first frame. The IANA registration for
audio/aacallows ID3 frames at any frame boundary, and FFmpeg and many players read past them. Strict ADTS parsers may not. - HLS timestamps. In Apple's HTTP Live Streaming (RFC 8216), audio-only streams can be sent as "packed audio" segments of raw ADTS. Each segment must begin with an ID3 tag holding a
PRIVframe owned bycom.apple.streaming.transportStreamTimestamp, giving the time of its first sample. - APE tags at the end of the file are written by a few tools. Fewer players read them.
Our sample-1mb-id3.aac starts with an ID3v2.4 tag containing a title, artist, album, comment, URL and an HLS-style PRIV timestamp frame, padded to make the file exactly 1 MiB. If a player can't open it but opens our other samples, it doesn't skip ID3 tags.
Related formats
AAC vs MP3, Opus, Vorbis and FLAC
| Codec | Compression | Notes |
|---|---|---|
| AAC | Lossy | Better than MP3 at the same bit rate. Supported by every current phone, browser and TV. Usually in .m4a or .mp4. |
| MP3 | Lossy | Older and a little less efficient; the most compatible format there is. Also a raw frame stream, like ADTS. |
| Opus | Lossy | Open and royalty-free, better than AAC at low bit rates. Usually in .opus, .ogg or .webm. |
| Vorbis | Lossy | Open and royalty-free, roughly AAC-LC quality. Usually in .ogg. |
| FLAC, ALAC | Lossless | No loss at all, but several times the size of a 128 kbps AAC file. Uncompressed CD audio is 11 times the size. |
Converting an MP3 to AAC, or AAC to MP3, stacks the losses of both codecs. If you have a lossless original, encode from that.
Troubleshooting
Common AAC problems and their causes
- Wrong duration, or seeking lands in the wrong place: ADTS has no index or length field, so players estimate. Remux into M4A for exact seeking:
ffmpeg -i in.aac -c copy out.m4a. - Sounds muffled, or mono, on one device: an HE-AAC or HE-AAC v2 file on a decoder without SBR or parametric stereo. Re-encode as AAC-LC at a higher bit rate for that device.
- A short silence at the start, or a gap between tracks: the encoder delay, about 46 ms at 44.1 kHz, which raw AAC can't mark for trimming. Use M4A for gapless albums.
- Renamed to .m4a and now it won't play: renaming doesn't add a container. Remux with the command above instead.
- Won't open at all: check the first bytes. A real ADTS file starts with
FF Fx, or withID3. A file startingftypat byte 4 is really an M4A; one startingADIFis the older ADIF format; one starting56 E0to56 FFmay be LOAS/LATM.
How to
How to open, edit and convert an AAC file
- Play it: double-click it. Windows Media Player, QuickTime Player on a Mac, iPhone and Android play
.aac, and most browsers play it when you drag it in or put it online. VLC plays every variant. - Inspect it:
ffprobe file.aacshows the profile, sample rate and channels after decoding. For the raw header values, read the first 7 bytes in a hex viewer. - Put it in a container without re-encoding:
ffmpeg -i in.aac -c copy out.m4a. FFmpeg moves the header details into the M4A's index. - Extract AAC from a video without re-encoding:
ffmpeg -i video.mp4 -vn -c:a copy audio.aac(oraudio.m4a, usually the better choice). - Convert: to MP3,
ffmpeg -i in.aac -c:a libmp3lame -q:a 2 out.mp3. To make AAC from WAV,ffmpeg -i in.wav -c:a aac -b:a 192k out.m4a. - Edit it: Audacity (with its FFmpeg import option) or any audio editor. Exporting re-encodes, so export once at the end.
Is an AAC file safe?
It can't run code. As with any media format, a deliberately malformed file could trigger a decoder bug, so keep players and browsers updated.
Free downloads
Sample AAC files to download
Free sample raw AAC (ADTS) files for testing players, parsers, streaming pipelines and upload forms: AAC-LC, HE-AAC v1 and v2, a CRC-protected stream and a tagged 1 MiB file. The sounds are generated chords and a sweep, encoded with the Fraunhofer FDK AAC encoder. Each file was checked with ffprobe and decoded in full without errors.
What's inside sample-adts-lc.aac
A 10-second AAC-LC file at a constant 128 kbps, 44.1 kHz stereo, in ADTS frames with no tags: the file shown byte by byte in the anatomy above.
The music
Five two-second chords (C, A minor, F, G, C), the same as our MP3, M4A and Ogg samples. Bass notes lean left and upper notes right.
The first bytes
FF F1: noID3, no container, the file starts directly with a frame header.Every frame header
MPEG-4 AAC-LC, 44,100 Hz, 2 channels, no CRC, constant bit rate.
433 frames
Each holds 1,024 samples per channel, between 262 and 482 bytes long, averaging 371.5 bytes.
Duration
433 × 1,024 = 443,392 samples, which decode to 10.054 seconds: 10 seconds of music plus the encoder's delay and padding, which ADTS can't mark.
Compared with M4A
Our featured M4A sample has the same music, encoder and bit rate, and the same 160,868 bytes of AAC stream; here, 3,031 of those bytes are ADTS headers. Remuxing this file to M4A with
ffmpeg -c copykeeps every audio block byte for byte.
All sample AAC files
AAC-LC in ADTS, 128 kbps
sample-adts-lc.aac · 157.1 KB (160,868 bytes)
10 seconds, AAC-LC at a constant 128 kbps, 44.1 kHz stereo. Plain ADTS frames, no tags, starting
FF F1 50 80.- Checking a player, host or upload form handles .aac
- Testing ADTS parsers and file-type detection
HE-AAC (v1) at 48 kbps
sample-he-aac.aac · 59.5 KB (60,904 bytes)
The same music with spectral band replication. Headers say 22,050 Hz stereo; a full decoder outputs 44,100 Hz.
- Testing SBR support: without it, the sound is dull
- Checking that tools report the decoded sample rate
HE-AAC v2 at 32 kbps
sample-he-aac-v2.aac · 39.9 KB (40,861 bytes)
SBR plus parametric stereo. Headers say 22,050 Hz mono; a full decoder outputs 44,100 Hz stereo.
- Testing parametric stereo support: without it, the sound is mono
- Low-bit-rate streaming pipelines
ADTS with CRC, 48 kHz mono
sample-crc-mono-48khz.aac · 78.6 KB (80,508 bytes)
10 seconds of AAC-LC at 64 kbps, 48 kHz mono, with CRC protection: 9-byte headers starting
FF F0.- Parsers that assume a 7-byte header
- Decoders and tools that assume 44.1 kHz stereo
1 MB AAC file with an ID3 tag
sample-1mb-id3.aac · 1 MB (1,048,576 bytes)
A 60-second sine sweep from 20 Hz to 20 kHz, AAC-LC at 128 kbps, after an ID3v2.4 tag (with an HLS-style
PRIVtimestamp) whose padding makes the file exactly 1,048,576 bytes (1 MiB). Turn the volume down: it's a test tone.- Upload and size-limit tests
- Checking that players and parsers skip an ID3 tag before ADTS
Ways to test with them
- Profiles: play the LC, HE-AAC and HE-AAC v2 files on the device you care about. They should sound alike. A dull HE-AAC file means no SBR; a mono HE-AAC v2 file means no parametric stereo.
- Header parsing:
sample-crc-mono-48khz.aachas 9-byte headers. A parser that skips 7 bytes per frame reads the CRC as audio and fails. - Detection: the featured file starts with
FF F1, the 1 MB file withID3. A detector that only accepts one of these will reject the other. - Duration: the four short files should report about 10 seconds and the 1 MB file about 60. Big differences mean the player is estimating from the wrong bit rate.
- Upload limits:
sample-1mb-id3.aacis exactly 1 MiB, so you can test a limit at the boundary.
Free to use for testing, teaching and demos, commercially or not, with no attribution needed. A link back to this page is always appreciated.
Put it online
Have an AAC file? Give it a link.
Drop an AAC file on 99helpers and it gets its own address that plays in the browser, with nothing to install. Share a recording or a stream capture as a link instead of an attachment.
Questions
AAC files, frequently asked
What does AAC stand for?
Advanced Audio Coding, the audio codec standardised by MPEG as the successor to MP3, first in MPEG-2 (1997) and then in MPEG-4.
Is AAC better than MP3?
Yes, at the same bit rate AAC usually sounds better, especially below 128 kbps. MP3's advantage is that even very old devices play it.
Is AAC lossless?
No, AAC is lossy. Apple's lossless format, ALAC, often lives in the same .m4a files, which causes confusion, but it's a different codec.
What's the difference between AAC and M4A?
AAC is the codec; M4A is a container. An .aac file is raw AAC frames with small headers. An .m4a file holds the same frames in an MP4 container with an index, tags and gapless information.
Why does my AAC file show the wrong length?
A raw .aac file has no index or length field, so players estimate the duration from the file size and bit rate. Remuxing it into M4A with ffmpeg -i in.aac -c copy out.m4a fixes it.
What is HE-AAC?
High-Efficiency AAC: AAC-LC plus spectral band replication, which rebuilds high frequencies from a few hints. It keeps music listenable at about 32 to 64 kbps. HE-AAC v2 adds parametric stereo for even lower bit rates.
Can browsers play .aac files?
Yes, current versions of Chrome, Edge, Safari and Firefox play ADTS AAC files. Firefox relies on the operating system's decoder for AAC.
How do I convert AAC to MP3?
Use a converter app, Audacity, or FFmpeg: ffmpeg -i in.aac -c:a libmp3lame -q:a 2 out.mp3. It's a lossy-to-lossy conversion, so use a good bit rate.
Related formats
Other file types explained
Keep going
Related
Sources
- IANA: audio/aac media type registration
- Library of Congress: AAC (MPEG-4)
- Library of Congress: AAC ADIF
- RFC 8216: HTTP Live Streaming (packed audio)
- MDN: Media container formats (ADTS)
Last reviewed 27 October 2026.