How to Configure FFmpeg acrossover Frequencies
This article explains how to use and configure the
acrossover audio filter in FFmpeg to split an audio stream
into multiple frequency bands. You will learn the syntax for setting
crossover frequencies, how the filter maps audio outputs, and practical
command-line examples to implement 2-way and 3-way crossovers.
The acrossover filter in FFmpeg splits a single audio
input into multiple frequency-limited output streams. This is commonly
used for bi-amping, creating subwoofer channels, or processing specific
frequency bands (like bass, mids, or treble) independently.
Basic Syntax
To configure the crossover frequencies, you use the
split parameter. The basic syntax is:
acrossover=split='freq_1 freq_2 ... freq_n'
- split: A space-separated list of frequency values in Hertz (Hz). The frequencies must be listed in ascending order.
- Outputs: The number of output streams is always \(N + 1\), where \(N\) is the number of split frequencies.
2-Way Crossover Example
To split an audio file into two bands—low frequencies (below 500 Hz) and high frequencies (above 500 Hz)—use the following command:
ffmpeg -i input.mp3 -filter_complex "acrossover=split=500[low][high]" -map "[low]" low.wav -map "[high]" high.wavIn this command, split=500 creates two output pads named
[low] and [high]. Each output retains the
original channel layout (for example, stereo remains stereo).
3-Way Crossover Example
To split audio into three bands—lows (below 500 Hz), mids (500 Hz to 3000 Hz), and highs (above 3000 Hz)—enclose the space-separated frequencies in single quotes:
ffmpeg -i input.mp3 -filter_complex "acrossover=split='500 3000'[low][mid][high]" -map "[low]" low.wav -map "[mid]" mid.wav -map "[high]" high.wavConfiguring Filter Order (Steepness)
You can control the steepness of the crossover roll-off using the
order parameter.
The order parameter accepts index values that correspond
to the filter’s steepness: * 0: 1st order (6 dB/octave) *
1: 2nd order (12 dB/octave) * 2: 3rd order (18
dB/octave) * 3: 4th order (24 dB/octave, default) *
9: 10th order (60 dB/octave)
To apply a 2nd-order (12 dB/octave) crossover at 1000 Hz, use:
ffmpeg -i input.mp3 -filter_complex "acrossover=split=1000:order=1[low][high]" -map "[low]" low.wav -map "[high]" high.wav