How to Use FFmpeg Haas Filter on Mono Audio

This article explains how to use the FFmpeg haas filter to apply the Haas (precedence) effect to a mono audio source, transforming it into a wider, more spacious stereo track. You will learn the basic command-line syntax, key parameters like delay time and channel routing, and a practical example to quickly enhance your audio files.

Understanding the Haas Effect in FFmpeg

The Haas effect is a psychoacoustic phenomenon where a listener perceives the spatial position of a sound based on the first-arriving wavefront. By duplicating a mono channel, delaying one side by a tiny fraction (typically between 10 to 35 milliseconds), and panning them left and right, you create a realistic sense of stereo width without changing the pitch or tone of the audio.

FFmpeg features a built-in haas filter designed specifically to automate this process. When you input a mono audio file, the filter automatically outputs a stereo file with the delay applied.

Basic Command Syntax

To apply the default Haas effect to a mono audio file, use the following command:

ffmpeg -i input_mono.wav -af "haas" output_stereo.wav

By default, this command applies a 20-millisecond delay to the left channel, instantly widening your mono source into a stereo field.

Customizing the Haas Filter Parameters

To fine-tune the spatial image, the haas filter allows you to customize several parameters using a key=value format separated by colons.

  • delay: Sets the delay time in milliseconds (acceptable range is 1.0 to 40.0). The default is 20.0 ms. Delays below 10 ms may cause phase cancellation, while delays above 35 ms might be perceived as a distinct echo rather than a stereo widening effect.
  • side_ch: Determines which channel receives the delayed signal. You can set this to left (default) or right.
  • level_in: Sets the input level helper (default is 1.0).
  • level_out: Sets the output level helper (default is 1.0).

Practical Example

If you want to apply a 15-millisecond delay to the right channel instead of the left to shift the spatial depth, use this command:

ffmpeg -i voice_mono.mp3 -af "haas=delay=15:side_ch=right" widened_stereo.mp3

In this command:

  • -i voice_mono.mp3 specifies your mono input file.
  • -af invokes the audio filter graph.
  • haas=delay=15:side_ch=right configures the Haas filter to use a 15ms delay and applies it to the right channel.
  • widened_stereo.mp3 is your finished, wide stereo output file.