| Current AAC encoders|
(most to least recommended)
|1||Apple AAC M/W|
|2||FhG AAC (Winamp) W|
|3||Fraunhofer FDK AAC S/L/M/W|
|4||Nero AAC L/W|
|5||FFmpeg 3.0+ AAC encoder S/L/M/W|
|7||Libav (pre-3.0 FFmpeg) AAC encoder S/L/M/W|
|S Source code available; L Linux; M macOS; W Windows|
|List of AAC encoders|
Apple AAC is an AAC codec developed by Apple Inc. and included in Apple's audio framework, Core Audio. Core Audio is used in iTunes, Safari web browser, and other Apple products. Apple's AAC encoder is known to be one of the highest quality medium-bitrate CBR and VBR LC AAC encoders. The encoder started as part of the QuickTime media framework, but Apple has transitioned away from QuickTime, to AV Foundation and AudioToolbox.
The encoder does consistently well in Hydrogenaudio listening tests.
Four rate settings are present in Apple AAC:
- Constant bitrate (CBR)
- Similar to MP3 CBR in how it handles the bit reservior, but can still swing a little from the target
- Average bit rate (ABR)
- Constrained VBR
- Like ABR, but seems to be more open to using more bits
- Variable bitrate (VBR)
- "True" VBR (TVBR, unofficial name)
- Takes a quality from 0 to 127 (kAudioCodecPropertySoundQualityForVBR). Seems to perform similarly to cVBR once the below table is used for bitrate conversion.
|-ue / -Q||ffmpeg q||bitrate (bps)|
The above is approximated by a piece-wise function, although the neatness is likely more indicative of how HA users pick values for tests:
Bitrate(q) = (40 * q - 1184) / 9 82 <= q < 128 (16 * q + 128) / 9 64 <= q < 82
TVBR is not available for HE-AAC.
Apple's CoreAudioBaseTypes lists the following AAC-derived codecs on macOS 11.3:
- AAC-LC (MPEG-4)
- AAC-ELD + SBR
- HE-AAC v1 (AAC + SBR)
- HE-AAC v2 (v1 + PS)
- MPEG-4 Spatial
There should also be support for a number of other format, at least in decoding: Apple does not ship a standalone AAC codec, but a whole audio-processing kit.
Actual support depends on library version and whether the program used to call the library knows how to use these formats.
- afconvert is clumsy but exposes almost everything.
- QAAC only does LC and HEv1. It can use some of the audiotoolkit filters while it works.
- FFmpeg only knows about using Apple AAC with LC, LD, ELD, HE, and HEv2.
Apple's macOS includes a command-line utility for transcoding audio files that employs this encoder when encoding to AAC.
afconvert [options] <infile> <outfile>
- -f --file <string>
- File format. Several; use 'm4af' for '.m4a' file or 'adts' for raw '.aac' file.
- -d --data <string>
- Data format. Several; use 'aac' for AAC-LC. See CoreAudioBaseTypes.h link in footnote.
- -s --strategy <0,1,2,3>
- Bitrate allocation strategy. 0 for CBR, 1 for ABR, 2 for VBR_constrained, 3 for VBR
- -b --bitrate <n>
- Bitrate in bits per second. Does nothing when used with strategy 3.
- -ue vbrq <0-127>
- Output quality for VBR mode. Only applicable when using strategy 3.
- -q --quality <0-127>
- Speed/quality trade-off. Internally rounded to a value of either 32, 64, or 96.
afconvert has way more options than those listed above, but not all are useful for AAC. Run
afconvert --help to see them all, or see SS64 for an unofficial list.
QAAC is an open-source wrapper for Core Audio's AAC and ALAC encoders that allow them to be used directly in applications that don't otherwise use Core Audio. It exists only for Windows.
Linux users should be able to use wine. The most fragile part apparently is getting AppleApplicationSupport to install.
On macOS, ffmpeg 4.4 and above can use the
aac_at codec to use Apple AAC via the new AudioToolbox.framework. In addition to AAC-LC, HE-AAC (v1/v2), AAC-LD, and AAC-ELD are available, the same selection of profiles as FDK AAC. FFmpeg uses a 0-14 quality range to be converted to the 0-127 scale, using the expression
q = 127 - q * 9;.
On Windows, ffmpeg's build process can be tricked into linking to an CoreAudioToolbox.dll commonly distributed alongside iTunes, using AudioToolboxWrapper.
- ↑ https://hydrogenaud.io/index.php/topic,118203.0.html Testing by Pr0m3th3u5 in 2019; comment by JAZ
- ↑ 2.0 2.1 https://github.com/phracker/MacOSX-SDKs/blob/041600eda65c6a668f66cb7d56b7d1da3e8bcc93/MacOSX11.3.sdk/System/Library/Frameworks/CoreAudioTypes.framework/Versions/A/Headers/CoreAudioBaseTypes.h#LL391C2-L391C
- ↑ https://github.com/FFmpeg/FFmpeg/blob/f009f849617ab0c2015d2a748892d55b37d378c0/libavcodec/audiotoolboxenc.c#L328