[FFmpeg-cvslog] avfilter/af_silenceremove: improve trimming middle silence

Paul B Mahol git at videolan.org
Fri Sep 24 00:41:53 EEST 2021


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Thu Sep 23 22:17:48 2021 +0200| [6a1bda3df93ec879ce16fc09b0f4be1be2bc9e95] | committer: Paul B Mahol

avfilter/af_silenceremove: improve trimming middle silence

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

 libavfilter/af_silenceremove.c | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/libavfilter/af_silenceremove.c b/libavfilter/af_silenceremove.c
index e8e79e93f4..42cdb4efad 100644
--- a/libavfilter/af_silenceremove.c
+++ b/libavfilter/af_silenceremove.c
@@ -94,7 +94,6 @@ typedef struct SilenceRemoveContext {
     int64_t window_duration;
     double sum;
 
-    int threshold;
     int one_period;
     int restart;
     int64_t next_pts;
@@ -435,7 +434,6 @@ static int config_input(AVFilterLink *inlink)
     AVFilterContext *ctx = inlink->dst;
     SilenceRemoveContext *s = ctx->priv;
 
-    s->threshold = -1;
     s->next_pts = AV_NOPTS_VALUE;
     s->window_duration = av_rescale(s->window_duration_opt, inlink->sample_rate,
                                    AV_TIME_BASE);
@@ -629,10 +627,6 @@ silence_trim:
                 }
             }
 
-            if (s->threshold >= 0)
-                s->one_period = s->threshold != threshold;
-            s->threshold = threshold;
-
             if (threshold) {
                 for (j = 0; j < outlink->channels; j++) {
                     s->update(s, in, j, nb_samples_read);
@@ -646,7 +640,8 @@ silence_trim:
                 nb_samples_read++;
 
                 if (s->start_holdoff_end >= s->start_duration) {
-                    s->start_found_periods += s->one_period;
+                    s->start_found_periods += s->one_period >= 1;
+                    s->one_period = 0;
                     if (s->start_found_periods >= s->start_periods) {
                         s->mode = SILENCE_TRIM_FLUSH;
                         goto silence_trim_flush;
@@ -659,6 +654,7 @@ silence_trim:
                 }
             } else {
                 s->start_holdoff_end = 0;
+                s->one_period++;
 
                 for (j = 0; j < outlink->channels; j++) {
                     s->update(s, in, j, nb_samples_read);
@@ -755,13 +751,10 @@ silence_copy:
                     }
                 }
 
-                if (s->threshold >= 0)
-                    s->one_period = s->threshold != threshold;
-                s->threshold = threshold;
-
                 if (threshold && s->stop_holdoff_end && !s->stop_silence) {
                     s->mode = SILENCE_COPY_FLUSH;
                     flush(s, out, outlink, &nb_samples_written, 0);
+                    s->one_period++;
                     goto silence_copy_flush;
                 } else if (threshold) {
                     for (j = 0; j < outlink->channels; j++) {
@@ -774,6 +767,7 @@ silence_copy:
                         s->window_offset = 0;
                     nb_samples_read++;
                     nb_samples_written++;
+                    s->one_period++;
                 } else if (!threshold) {
                     for (j = 0; j < outlink->channels; j++) {
                         s->update(s, in, j, nb_samples_read);
@@ -798,7 +792,8 @@ silence_copy:
                     s->stop_holdoff_end++;
 
                     if (s->stop_holdoff_end >= s->stop_duration) {
-                        s->stop_found_periods += s->one_period;
+                        s->stop_found_periods += s->one_period >= 1;
+                        s->one_period = 0;
                         if (s->stop_found_periods >= s->stop_periods) {
                             s->stop_holdoff_offset = 0;
                             s->stop_holdoff_end = 0;
@@ -826,6 +821,7 @@ silence_copy:
                     }
                 }
             }
+            s->one_period++;
             flush(s, out, outlink, &nb_samples_written, 0);
         } else {
             av_samples_copy(out->extended_data, in->extended_data,



More information about the ffmpeg-cvslog mailing list