diff options
author | Paul B Mahol <onemda@gmail.com> | 2022-04-23 16:06:50 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2022-04-23 16:25:45 +0200 |
commit | a64e250680fbc7296eff714b81b54b1c0e2d185f (patch) | |
tree | 57427984bcc491fa028c504febca2b2c1a0e4a51 | |
parent | 16463520d9de05481320303dd49ea5158c715c9f (diff) | |
download | ffmpeg-a64e250680fbc7296eff714b81b54b1c0e2d185f.tar.gz |
avfilter/af_afftdn: add gain_smooth option
-rw-r--r-- | doc/filters.texi | 6 | ||||
-rw-r--r-- | libavfilter/af_afftdn.c | 11 |
2 files changed, 17 insertions, 0 deletions
diff --git a/doc/filters.texi b/doc/filters.texi index a428191f6a..039b25bae1 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -1390,6 +1390,12 @@ Stop sample noise capture and measure new noise band profile. Default value is @code{none}. @end table + +@item gain_smooth, gs +Set gain smooth factor, used to lowpass gains applied to each frequency bin. +Useful to reduce random music noise artefacts. +Higher values reduce smoothing of gains. +Default value is @code{1.0}. @end table @subsection Commands diff --git a/libavfilter/af_afftdn.c b/libavfilter/af_afftdn.c index 253526e532..2fb3cb19ac 100644 --- a/libavfilter/af_afftdn.c +++ b/libavfilter/af_afftdn.c @@ -114,6 +114,7 @@ typedef struct AudioFFTDeNoiseContext { int output_mode; int noise_floor_link; float ratio; + float gain_smooth; float band_multiplier; float floor_offset; @@ -207,6 +208,8 @@ static const AVOption afftdn_options[] = { { "begin", "start", 0, AV_OPT_TYPE_CONST, {.i64 = SAMPLE_START}, 0, 0, AFR, "sample" }, { "stop", "stop", 0, AV_OPT_TYPE_CONST, {.i64 = SAMPLE_STOP}, 0, 0, AFR, "sample" }, { "end", "stop", 0, AV_OPT_TYPE_CONST, {.i64 = SAMPLE_STOP}, 0, 0, AFR, "sample" }, + { "gain_smooth", "set gain smooth factor",OFFSET(gain_smooth), AV_OPT_TYPE_FLOAT, {.dbl = 1.00}, 0.0001, 1, AFR }, + { "gs", "set gain smooth factor",OFFSET(gain_smooth), AV_OPT_TYPE_FLOAT, {.dbl = 1.00}, 0.0001, 1, AFR }, { NULL } }; @@ -421,6 +424,14 @@ static void process_frame(AVFilterContext *ctx, } } + { + const double f = s->gain_smooth; + const double F = 1. - f; + + for (int i = 1; i < s->bin_count; i++) + gain[i] = gain[i-1] * F + f * gain[i]; + } + for (int i = 0; i < s->bin_count; i++) { const double new_gain = gain[i]; |