LAME - Variable Bit Rate
Suggested usage:
lame -V2 input.wav output.mp3
In Variable Bitrate (VBR) coding, the user chooses a desired quality level instead of a bitrate. A correct implementation should be able to maintain the same quality perception, changing the bitrate to a higher or lower one whenever the audio file is more or less complex. With MP3, this is not always possible.
VBR encoding is the logical way of encoding data. General data compressors (like .zip and .rar) are VBR, as lossless codecs are as well. Being able to indicate a quality value, the encoder decides for each frame, which is the most appropiate bitrate to keep it.
The main advantage of using VBR is that the encoder will use the smallest amount of bytes needed to keep the asked quality. The inconvenience is that the file size is quite unpredictable, and can change from file to file in more than 50kbps. (or nearly double the size, with different genres and quasi-mono content)