FFmpeg acrossover Filter for Multi-Amp Audio
The acrossover filter in FFmpeg allows you to divide an
audio stream into multiple distinct frequency bands using Linkwitz-Riley
crossover filters, making it ideal for active crossover systems and
multi-amplifier sound configurations. This guide explains the mechanics
of the acrossover filter, its essential parameters, and
practical command examples to route split audio into separate files or
discrete output channels.
Understanding the acrossover Filter
The acrossover filter splits an incoming audio signal at
designated cutoff frequencies. When audio is split, it produces \(N + 1\) output streams for \(N\) cutoff frequencies, preserving the
original input channel layout (such as stereo) across all produced
bands.
Key parameters include:
split: A space-separated list of crossover frequencies in Hertz.order: Specifies the filter steepness/order. Options include2nd(12 dB/octave),4th(24 dB/octave, default), and8th(48 dB/octave). Linkwitz-Riley 4th order (4thor24dB) is typically preferred in multi-amp processing due to flat magnitude summing at crossover points.
Bi-Amping: Splitting Into Two Bands
To split a stereo file into low and high frequencies (e.g., separating a subwoofer or woofer from a tweeter at 1500 Hz):
ffmpeg -i input.wav -filter_complex \
"[0:a]acrossover=split=1500:order=4th[low][high]" \
-map "[low]" low_band.wav \
-map "[high]" high_band.wavIn this command:
split=1500creates a split at 1500 Hz.[low]contains frequencies below 1500 Hz.[high]contains frequencies above 1500 Hz.- The results are written to two separate stereo output files.
Tri-Amping: Splitting Into Three Bands
For a three-way speaker setup (woofer, midrange, and tweeter), define two split points (e.g., 500 Hz and 3500 Hz):
ffmpeg -i input.wav -filter_complex \
"[0:a]acrossover=split=500 3500:order=4th[low][mid][high]" \
-map "[low]" low_freq.wav \
-map "[mid]" mid_freq.wav \
-map "[high]" high_freq.wavThe filter outputs three distinct stereo signals:
[low]: 0 Hz to 500 Hz[mid]: 500 Hz to 3500 Hz[high]: 3500 Hz and above
Combining Frequency Bands into a Single Multi-Channel File
If your audio interface or multi-channel amplifier accepts a single
6-channel (5.1 or 6.0) feed directly, you can merge the resulting bands
back into a single multi-channel stream using the amerge
filter:
ffmpeg -i input.wav -filter_complex \
"[0:a]acrossover=split=500 3500:order=4th[low][mid][high]; \
[low][mid][high]amerge=inputs=3[out]" \
-map "[out]" -c:a pcm_s24le multichannel_output.wavIn this configuration, channels 1 and 2 deliver the low band, channels 3 and 4 deliver the mid band, and channels 5 and 6 deliver the high band, ready for transmission to corresponding amplifier channels.