[FFmpeg-cvslog] avfilter/af_afftdn: add gain_smooth option

Paul B Mahol git at videolan.org
Sat Apr 23 17:23:41 EEST 2022


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sat Apr 23 16:06:50 2022 +0200| [a64e250680fbc7296eff714b81b54b1c0e2d185f] | committer: Paul B Mahol

avfilter/af_afftdn: add gain_smooth option

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a64e250680fbc7296eff714b81b54b1c0e2d185f
---

 doc/filters.texi        |  6 ++++++
 libavfilter/af_afftdn.c | 11 +++++++++++
 2 files changed, 17 insertions(+)

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
+
+ at 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];
 



More information about the ffmpeg-cvslog mailing list