Adjust Crossfeed Level and Cutoff in FFmpeg

The FFmpeg crossfeed audio filter reduces channel separation on headphone listening by feeding low frequencies from one channel to the other, creating a more natural speaker-like soundstage. This article covers how to configure the crossfeed amount and frequency range using the native crossfeed filter parameters, as well as using the alternative bs2b filter when explicit frequency values in Hertz are required.

Understanding the crossfeed Parameters

FFmpeg's built-in crossfeed filter controls crossfeed intensity and frequency filtering using two primary floating-point options that range from 0.0 to 1.0:

  • strength (or s): Controls the crossfeed mixing level. Setting this to 0.0 disables crossfeed, while 1.0 produces maximum blending across channels. The default value is 0.5.
  • range (or r): Adjusts the frequency cutoff and soundstage range. Lower values allow higher frequencies to bleed through to the opposite channel, whereas higher values restrict the crossfeed strictly to lower bass frequencies. The default value is 0.5.

Additional optional parameters include level_in (input gain, default 0.9) and level_out (output gain, default 1.0) to help prevent clipping caused by channel summing.

Basic Command Syntax

To apply the crossfeed filter with specific values, use the -af (audio filter) flag:

ffmpeg -i input.wav -af "crossfeed=strength=0.6:range=0.4" output.wav

You can also use positional arguments instead of naming the parameters:

ffmpeg -i input.wav -af "crossfeed=0.6:0.4" output.wav

In this example, the crossfeed strength is set to 0.6 and the frequency cutoff range is set to 0.4.

Using Specific Cutoff Frequencies with the bs2b Filter

The native crossfeed filter abstracts frequency values into the range scale (0.0 to 1.0). If your workflow requires setting a specific cutoff frequency in Hertz (Hz) alongside a defined decibel feed level, use FFmpeg's bs2b (Bauer stereophonic-to-binaural) filter instead:

  • fcut: Cutoff frequency in Hz (typically between 300 and 2000 Hz; default is 700 Hz).
  • feed: Feed level in tenths of a decibel (dB) (typically between 10 and 150; default is 45, which equals 4.5 dB).

Example using exact frequency and feed values:

ffmpeg -i input.wav -af "bs2b=fcut=650:feed=60" output.wav

This sets the low-pass cutoff directly at 650 Hz with a 6.0 dB crossfeed level.