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 include 2nd (12 dB/octave), 4th (24 dB/octave, default), and 8th (48 dB/octave). Linkwitz-Riley 4th order (4th or 24dB) 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.wav

In this command:

  • split=1500 creates 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.wav

The 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.wav

In 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.