FFmpeg -b:a vs -ab: What is the Difference?

When compressing or converting audio using FFmpeg, you will often see command-line examples using either the -b:a or -ab flag to set the audio bitrate. This article explains the difference between these two options, how FFmpeg defines them, and which one you should use in your multimedia workflows.

The Short Answer: Alias vs. Stream Specifier

In modern versions of FFmpeg, there is no functional difference in the output when using -b:a or -ab for basic stereo audio encoding. The -ab option is a legacy alias for -b:a. Both commands tell FFmpeg to set the audio bitrate (for example, -b:a 192k or -ab 192k).

However, they differ significantly in their syntax design, flexibility, and compatibility with modern FFmpeg standards.

The Modern Syntax: -b:a

The -b:a option uses FFmpeg’s modern stream specifier syntax.

Because it uses stream specifiers, -b:a is highly flexible. It allows you to target specific audio streams if your file has more than one. For example: * -b:a 128k sets the bitrate of all audio streams to 128 kbps. * -b:a:0 192k sets only the first audio stream to 192 kbps. * -b:a:1 96k sets the second audio stream to 96 kbps.

The Legacy Syntax: -ab

The -ab option stands for “audio bitrate.” It is an older, deprecated option from earlier versions of FFmpeg.

While it still works in current releases, it is maintained solely for backward compatibility so that older scripts and legacy applications do not break. Unlike -b:a, the -ab flag does not support advanced stream selection. You cannot easily target specific audio tracks (like a secondary commentary track) in a multi-stream audio file using -ab.

Recommendation

You should always use -b:a in your current and future FFmpeg commands. It is the official, non-deprecated standard that ensures your scripts will remain compatible with future FFmpeg updates and allows you to easily handle complex, multi-stream audio files.