How to Use FFmpeg SOFA Filter for HRTF Spatial Audio
This guide explains how to use FFmpeg's sofalizer filter
to apply Head-Related Transfer Functions (HRTF) to multi-channel audio
using standard SOFA (Spatially Oriented Format for Acoustics) files. You
will learn the required prerequisites, the core command syntax, key
filter parameters, and practical examples for rendering surround sound
layouts into immersive binaural stereo for headphones.
Prerequisites
To use SOFA HRTF processing, your FFmpeg build must be compiled with
libmysofa support. You can check if this library is
available on your system by running:
ffmpeg -filters | grep sofalizerIf sofalizer appears in the list, your build is
ready.
You also need a .sofa HRTF measurement file.
High-quality open-source HRTF profiles can be downloaded from databases
like the SOFA Conventions website or the Club Fritz database.
Basic Syntax
The sofalizer audio filter converts multi-channel audio
tracks (such as 5.1, 7.1, or custom channel mappings) into a two-channel
binaural audio track using spatial impulse responses.
The basic command structure is:
ffmpeg -i input_surround.wav -af "sofalizer=sofa=/path/to/hrtf.sofa" output_binaural.wavKey sofalizer
Parameters
You can fine-tune the spatial rendering using several parameters inside the filter string:
sofa: Specifies the absolute or relative path to the.sofafile.type: Processing mode. Acceptstime(time-domain convolution) orfreq(frequency-domain processing). Frequency-domain (freq) is generally much faster and recommended for real-time or fast processing.gain: Adjusts input/output gain in dB (e.g.,gain=-6) to prevent digital clipping caused by acoustic summing.radius: Distance in meters from the listener to the virtual sound sources (e.g.,radius=1.5).speakers: Allows manual definition of virtual speaker positions using azimuth and elevation coordinates if your source layout requires custom placement.
Practical Examples
1. Standard 5.1 to Binaural Stereo
Convert a standard 5.1 surround mix to 3D binaural stereo using frequency-domain processing and an attenuation gain of -4 dB:
ffmpeg -i movie_5.1.mkv -vn -af "sofalizer=sofa=dtf_nh2.sofa:type=freq:gain=-4" -c:a aac -b:a 320k binaural_audio.m4a2. 7.1 Video Remuxing
Process a 7.1 audio stream from a video file into binaural stereo while copying the video stream without re-encoding:
ffmpeg -i input_7.1.mp4 -c:v copy -af "sofalizer=sofa=ClubFritz12.sofa:type=freq:gain=-6" -c:a libopus -b:a 192k output_binaural.mkv3. Custom Speaker Placement
For non-standard audio channels, define the azimuth and elevation (in
degrees) for each channel using the speakers parameter:
ffmpeg -i quad_surround.wav -af "sofalizer=sofa=default.sofa:speakers=45 0|-45 0|135 0|-135 0:type=freq" output.wavIn the speaker definition, each channel's target direction is
separated by a pipe (|), where the first value is the
azimuth (-180 to 180 degrees, relative to front-center) and the second
value is the elevation (-90 to 90 degrees).