FFmpeg command to convert MP3 to AAC
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.
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
You can also use HE-AAC (v1/v2) instead of the default AAC-LC (low complexity) profile, which is best suited for low bitrates:
ffmpeg -i input.mp3 -c:a libfdk_aac -profile:a aac_he_v2 -b:a 32k output.m4a
What if I don't have libfdk_aac
?
Some versions of FFmpeg do not have libfdk_aac
(for licensing reasons). If that's the case, you can use the built-in AAC encoder:
ffmpeg -i input.mp3 -c:a aac -b:a 192k output.m4a
This encoder does not support VBR properly, so if you need that or HE-AAC, read on.
You can compile ffmpeg yourself and add libfdk_aac
support. 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 option to use libfdk_aac
.
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.
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: https://trac.ffmpeg.org/wiki/Encode/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."