Configure FFmpeg acrossover Frequencies and Orders

This guide explains how to split audio into distinct frequency bands using FFmpeg's acrossover filter. You will learn the syntax for configuring specific crossover split frequencies, setting the filter order to control attenuation steepness, and properly routing the resulting multi-output audio streams in your FFmpeg commands.


Core Syntax and Parameters

The acrossover filter splits an audio stream into multiple frequency bands using Linkwitz-Riley crossover networks. The primary parameters are:

  • split: A space-separated list of crossover cutoff frequencies in Hertz (Hz). Specifying \(N\) frequencies will generate \(N + 1\) output audio bands, ordered from lowest frequency to highest.
  • order: The roll-off order of the Linkwitz-Riley filter. Supported values are:
    • 2nd: 12 dB/octave slope
    • 4th: 24 dB/octave slope (default)
    • 6th: 36 dB/octave slope
    • 8th: 48 dB/octave slope

Basic Configuration Example: 2-Way Crossover

To split an audio file into low-frequency and high-frequency bands at a single crossover point (e.g., 500 Hz) using a standard 4th-order filter:

ffmpeg -i input.wav -filter_complex "[0:a]acrossover=split=500:order=4th[low][high]" -map "[low]" low.wav -map "[high]" high.wav
  • split=500: Defines a single boundary at 500 Hz.
  • [low]: Receives frequencies below 500 Hz.
  • [high]: Receives frequencies above 500 Hz.

Multi-Band Configuration: 3-Way Crossover

When configuring multiple crossover points, separate the frequency values with a space inside quotes, or escape the space if using the inline filter graph format:

ffmpeg -i input.wav -filter_complex "[0:a]acrossover=split='300 3000':order=8th[low][mid][high]" -map "[low]" low.wav -map "[mid]" mid.wav -map "[high]" high.wav

In this command:

  • split='300 3000': Creates boundaries at 300 Hz and 3,000 Hz.
  • order=8th: Applies a steep 48 dB/octave slope for maximum band isolation.
  • [low]: Frequencies below 300 Hz.
  • [mid]: Frequencies between 300 Hz and 3,000 Hz.
  • [high]: Frequencies above 3,000 Hz.

Processing Bands Individually Before Recombining

You can chain other audio filters to individual bands and merge them back together using amix:

ffmpeg -i input.wav -filter_complex \
"[0:a]acrossover=split=150:order=4th[sub][main]; \
 [sub]volume=1.5[sub_boosted]; \
 [main]equalizer=f=3000:t=q:w=1:g=2[main_eq]; \
 [sub_boosted][main_eq]amix=inputs=2:dropout_transition=0" \
output.wav

This workflow separates sub-bass frequencies below 150 Hz, applies gain only to the sub-bass, applies an equalizer boost to the remaining audio band, and recombines the processed signals into a single output file.