afir
Apply an arbitrary Finite Impulse Response filter.
This filter is designed for applying long FIR filters, up to 60 seconds long.
It can be used as component for digital crossover filters, room equalization, cross talk cancellation, wavefield synthesis, auralization, ambiophonics, ambisonics and spatialization.
This filter uses the streams higher than first one as FIR coefficients. If the non-first stream holds a single channel, it will be used for all input channels in the first stream, otherwise the number of channels in the non-first stream must be same as the number of channels in the first stream.
It accepts the following parameters:
- dry
Set dry gain. This sets input gain.
- wet
Set wet gain. This sets final output gain.
- length
Set Impulse Response filter length. Default is 1, which means whole IR is processed.
- gtype
This option is deprecated, and does nothing.
- irnorm
Set norm to be applied to IR coefficients before filtering. Allowed range is from -1 to 2. IR coefficients are normalized with calculated vector norm set by this option. For negative values, no norm is calculated, and IR coefficients are not modified at all. Default is 1.
- irlink
For multichannel IR if this option is set to true, all IR channels will be normalized with maximal measured gain of all IR channels coefficients as set by
irnorm
option. When disabled, all IR coefficients in each IR channel will be normalized independently. Default is true.- irgain
Set gain to be applied to IR coefficients before filtering. Allowed range is 0 to 1. This gain is applied after any gain applied with irnorm option.
- irfmt
Set format of IR stream. Can be
mono
orinput
. Default isinput
.- maxir
Set max allowed Impulse Response filter duration in seconds. Default is 30 seconds. Allowed range is 0.1 to 60 seconds.
- response
This option is deprecated, and does nothing.
- channel
This option is deprecated, and does nothing.
- size
This option is deprecated, and does nothing.
- rate
This option is deprecated, and does nothing.
- minp
Set minimal partition size used for convolution. Default is 8192. Allowed range is from 1 to 65536. Lower values decreases latency at cost of higher CPU usage.
- maxp
Set maximal partition size used for convolution. Default is 8192. Allowed range is from 8 to 65536. Lower values may increase CPU usage.
- nbirs
Set number of input impulse responses streams which will be switchable at runtime. Allowed range is from 1 to 32. Default is 1.
- ir
Set IR stream which will be used for convolution, starting from 0, should always be lower than supplied value by
nbirs
option. Default is 0. This option can be changed at runtime via commands.- precision
Set which precision to use when processing samples.
- auto
Auto pick internal sample format depending on other filters.
- float
Always use single-floating point precision sample format.
- double
Always use double-floating point precision sample format.
Default value is auto.
- irload
Set when to load IR stream. Can be
init
oraccess
. First one load and prepares all IRs on initialization, second one once on first access of specific IR. Default isinit
.
Examples
- Apply reverb to stream using mono IR file as second input, complete command using ffmpeg:
ffmpeg -i input.wav -i middle_tunnel_1way_mono.wav -lavfi afir output.wav
- Apply true stereo processing given input stereo stream, and two stereo impulse responses for left and right channel,
the impulse response files are files with names l_ir.wav and r_ir.wav, and setting irnorm option value:
"pan=4C|c0=FL|c1=FL|c2=FR|c3=FR[a];amovie=l_ir.wav[LIR];amovie=r_ir.wav[RIR];[LIR][RIR]amerge[ir];[a][ir]afir=irfmt=input:irnorm=1.2,pan=stereo|FL<c0+c2|FR<c1+c3"
- Similar to above example, but with
irgain
explicitly set to estimated value and withirnorm
disabled:"pan=4C|c0=FL|c1=FL|c2=FR|c3=FR[a];amovie=l_ir.wav[LIR];amovie=r_ir.wav[RIR];[LIR][RIR]amerge[ir];[a][ir]afir=irfmt=input:irgain=-5dB:irnom=-1,pan=stereo|FL<c0+c2|FR<c1+c3"