Configure FFmpeg acrossover Frequencies and Filter Orders

This article explains how to use the FFmpeg acrossover audio filter to split an input audio signal into multiple frequency bands. You will learn how to define custom crossover frequencies, select the appropriate filter order to control the steepness of the division, and map the resulting output streams in a practical command-line example.

The acrossover Filter Syntax

The acrossover filter splits an audio stream into several frequency bands using Linkwitz-Riley crossovers. The basic syntax is:

acrossover=split='freq1 freq2 ...':order=value

The filter creates \(N + 1\) output pads, where \(N\) is the number of split frequencies specified. For example, if you define two split frequencies, the filter will output three separate audio bands (low, mid, and high).

Configuring Split Frequencies

The split parameter accepts a space-separated list of frequency values in Hertz. These values must be listed in strictly ascending order.

Configuring Filter Orders

The order parameter determines the steepness of the filter roll-off at the crossover frequency points. A higher order results in a steeper attenuation curve, which reduces the frequency overlap between the split bands.

You can specify the filter order using either its numeric value or its text alias:

Numeric Value Text Alias Steepness / Roll-off
0 4th 24 dB/octave (Linkwitz-Riley 4th order)
1 8th 48 dB/octave (Linkwitz-Riley 8th order)
2 12th 72 dB/octave (Linkwitz-Riley 12th order)
3 16th 96 dB/octave (Linkwitz-Riley 16th order)

If you do not specify an order, FFmpeg defaults to 4th (24 dB/octave).

Practical Command Example

To split an audio file into three bands with crossover points at 200 Hz and 2500 Hz using an 8th-order (48 dB/octave) filter, use the following filter_complex command:

ffmpeg -i input.wav -filter_complex "acrossover=split='200 2500':order=8th[low][mid][high]" \
-map "[low]" low.wav \
-map "[mid]" mid.wav \
-map "[high]" high.wav

In this command: * split='200 2500' creates two crossover points, resulting in three output streams. * order=8th applies a steep 48 dB/octave slope at both 200 Hz and 2500 Hz. * [low], [mid], and [high] label the output pads of the filter. * The -map options route each frequency-band stream to its own output file.