ffmpeg can convert between different audio formats including MP3, AAC, AIFF, AU-SUN , DTS, WMA, M4A,
MP2, RA, WAV, AAC, FLAC, OGG, APE.
This page describes how to use the "lame" encoder within ffmpeg to creates mp3's (ffmpeg apparently has no native mp3 encoder). See also other codecs you could use, and/orAACEncodingGuide for background on FFmpeg audio encoding in general.
Example to encode VBR MP3 audio with ffmpeg using the libmp3lame library:
ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3
Control quality with -qscale:a (or the alias -q:a). Values are encoder specific, so for libmp3lame the range is 0-9 where a lower value is a higher quality. 0-3 will normally produce transparent results, 4 (default) should be close to perceptual transparency, and 6 produces an "acceptable" quality. The option -qscale:a is mapped to the -V option in the standalone lame command-line interface tool.
LAME Bitrate Overview | |||
---|---|---|---|
Option | Kbit/s | Bitrate range kbit/s | ffmpeg equiv. |
-b 320 | 320 | 320 CBR (non VBR) example | -b:a 320k (NB this is 32KB/s, or its max) |
-V 0 | 245 | 220...260 | -q:a 0 (NB this is VBR from 22 to 26 KB/s...) |
-V 1 | 225 | 190...250 | -q:a 1 |
-V 2 | 190 | 170...210 | -q:a 2 |
-V 3 | 175 | 150...195 | -q:a 3 |
-V 4 | 165 | 140...185 | -q:a 4 |
-V 5 | 130 | 120...150 | -q:a 5 |
-V 6 | 115 | 100...130 | -q:a 6 |
-V 7 | 100 | 80...120 | -q:a 7 |
-V 8 | 85 | 70...105 | -q:a 8 |
-V 9 | 65 | 45...85 | -q:a 9 |
In our example above, we selected -qscale:a 2, meaning we used LAME's option -V 2, which gives us a VBR MP3 audio stream with an average stereo bitrate of 170-210 kBit/s.
If you need constant bitrate (CBR) MP3 audio, you need to use the -b:a option instead of -qscale:a. Here you can specify the number of bits per second, for example -b:a 256k if you want 256 Kbit/s (25.6 KB/s) audio. Available options are: 8, 16, 24, 32, 40, 48, 64, 80, 96, 112, 128, 160, 192, 224, 256, or 320 (add a k after each to get that rate). So to get the highest quality setting, it would be like -b:a 320k.
Sometimes it will give you *less* bits per second than you request. If you're doing CBR, it could be because you chose a value "in between" its allowable settings (if defaults down to the next lower). If you're doing VBR, it could be because the input itself is already in a lower bitrate than the requested, in which case, it basically just re-encodes it at the bitrate the input already was. Or possibly that the input was CBR and the VBR aspect is able to reduce bitrate by quite a lot.