How to Remove DC Offset in FFmpeg Using dcshift
This article provides a straightforward guide on how to use the
dcshift audio filter in FFmpeg to eliminate DC offset from
your audio files. You will learn what DC offset is, how the
dcshift filter works, and the exact command-line syntax
required to apply this correction to restore balance to your audio
waveforms.
Understanding DC Offset
DC offset is an unwanted amplitude displacement in an audio signal where the entire waveform is shifted away from the center zero-bias line. This distortion reduces the available headroom for your audio, causes clicking sounds during cuts or edits, and can lead to early clipping.
To resolve this, FFmpeg offers the dcshift filter, which
allows you to manually shift the audio waveform back to the zero
baseline by applying a constant DC shift.
Using the dcshift Filter
The dcshift filter accepts two primary parameters: 1.
shift: The amount of DC shift to apply.
This value must be a decimal between -1.0 and
1.0. A negative value shifts the waveform down, while a
positive value shifts it up. 2.
limitergain: An optional parameter (value
between 0.0 and 1.0) used to prevent clipping
when the waveform is shifted. If the shift pushes the signal beyond the
maximum limit, the limiter gain attenuates the signal to avoid digital
distortion.
Step 1: Identify the Required Shift
Before applying the filter, you need to know how much your audio is
offset. You can analyze your file using audio editing software (like
Audacity) or use FFmpeg’s volumedetect filter to inspect
the signal properties. Once you determine the offset amount (for
example, a positive offset of 0.05), you will need to apply
an equal and opposite shift (in this case, -0.05).
Step 2: Run the FFmpeg Command
To apply the DC shift, use the -af (audio filter) flag
followed by the dcshift configuration.
Here is the basic command to shift the audio down by
0.05:
ffmpeg -i input.wav -af "dcshift=shift=-0.05" output.wavStep 3: Prevent Clipping with Limiter Gain
If your audio signal is highly dynamic or already loud, shifting it
might cause the peaks to clip. To safely prevent this, you can specify
the limitergain parameter.
The following command applies the same -0.05 shift but
includes a limiter gain of 0.05 to prevent peak
distortion:
ffmpeg -i input.wav -af "dcshift=shift=-0.05:limitergain=0.05" output.wavBy applying these settings, the dcshift filter will
realign your audio to the center axis, cleaning up your signal and
restoring lost headroom for subsequent audio processing.