Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I can issue this command:

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.m4a 

to create a m4a file.

But when I issue this command

ffmpeg -i input.mp3 -acodec alac -ab 128k -ar 48000 -ac 2 -y output.aac

ffmpeg is throwing an error saying

Could not write header for output file #0 (incorrect codec parameters ?).

Also, the size of the m4a file is really almost 5.8 times larger than the original file, which is absolutely not what I wanted and why I wanted to convert to AAC.

share|improve this question
up vote 24 down vote accepted

How can I convert to AAC?

This is the most basic FFmpeg command to convert input to AAC audio using the highest quality AAC FFmpeg has. libfdk_aac is the Fraunhofer AAC encoder, and it is available when you compiled FFmpeg with support for it.

ffmpeg -i input.mp3 -c:a libfdk_aac output.m4a

To change the quality, you have two options:

  • For variable bitrate (VBR), use the -vbr option. For example, -vbr 4 is a good choice (roughly 128 kBit/s for stereo audio). Higher means better. Values range from 1 to 5.

    ffmpeg -i input.mp3 -c:a libfdk_aac -vbr 4 output.m4a
  • For fixed bitrate (CBR), use the -b:a option, for example -b:a 128k. 128 kBit/s should be good enough for most situations. You can often choose something lower as well.

    ffmpeg -i input.mp3 -c:a libfdk_aac -b:a 128k output.m4a

What if I don't have libfdk_aac?

Some versions of FFmpeg do not have libfdk_aac (for licensing reasons). The same goes for other AAC encoders such as libfaac. If that's the case, you have various options:

Compile FFmpeg yourself.

There are guides on the FFmpeg Wiki. Compiling is easy on Linux, moderately easy on OS X, and rather hard on Windows. When you follow the compilation guides and install the appropriate libraries before, FFmpeg now gives you the following options for AAC:

Use another encoder.

FFmpeg typically has other AAC encoders, which you can use as a "fallback" if neither FAAC nor Fraunhofer AAC are available. Neither of these support VBR encoding, so you need to supply a constant bit rate with -b:a 192K, for example.

  • -c:a aac -strict experimental, is the "native" FFmpeg AAC encoder, but it is considered experimental (works fine though). Its quality is rather mediocre.
  • -c:a libvo_aacenc is shipped with most static builds of FFmpeg. It doesn't provide good quality though—even worse than the native AAC encoder—so you should avoid that if possible.

But honestly, if you care about quality, you should probably compile FFmpeg yourself.

There were some problems with your original approach:

  • alac is not AAC. ALAC is the Apple Lossless Audio Codec, whereas AAC is Advanced Audio Coding.

  • That's why your output is larger than the input, because in contrast to MP3, ALAC is still compressed, but it needs to be lossless – that's why it needs to store more data.

  • .aac is not an output container for ALAC audio. If you use AAC, that should work. I would use MP4 or M4A though.

share|improve this answer
On Ubuntu 12.04 I was unable to use an option -c:a, does this have any synonym? I guess it might mean -acodec:a but in the end I just dropped it, and ffmpeg was able to deduce a codec based on the desired output file name. (Need -strict experimental though; and threw in -map_metadata 0:0 for good measure, to preserve ID3 tags.) – tripleee Oct 3 '13 at 7:47
Also worth noting: I wanted M4B files (audiobooks), which ffmpeg does not appear to support, but converting into M4A and then just renaming seems to work. – tripleee Oct 3 '13 at 7:53
@tripleee That means you're using an outdated program called ffmpeg, but it's really not from FFmpeg, but the Libav fork. Ubuntu unfortunately bundled it instead of the "real" ffmpeg. See: Who can tell me the difference and relation between ffmpeg, libav, and avconv – slhck Oct 3 '13 at 7:57
@slhck: Thanks for the quick update and the link! – tripleee Oct 3 '13 at 8:00
@tripleee Actually no, .m4a files are identical to .mp4 (it's just a convention naming for mp4 files with audio only), but have a different format than .aac (which is known as an ADTS stream). You can also force FFmpeg to output in ADTS format by adding -f adts. – Bigue Nique Mar 22 at 3:32

Easy convert to AAC for Zeranoe Windows Builds

ffmpeg -i input.mp3 -c:a aac -b:a 128k output.m4a

Use "aac" instead of libfaac or libfdk_aac:

"FFmpeg can support three AAC-LC encoders (aac, libfaac, libfdk_aac) and one HE-AAC(v1/2) encoder (libfdk_aac). The licenses of libfaac and libfdk_aac are not compatible with the GPL, so the GPL does not permit distribution of binaries containing code licensed under these licenses when GPL-licensed code is also included."

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.