using FFMPEG with silencedetect to remove audio silence

35,024

Solution 1

Use the silenceremove filter. This removes silence from the audio track only - it will leave the video unedited, i.e., things will go out of sync

Its arguments are a little cryptic.

An example

ffmpeg -i input.mp3 -af silenceremove=1:0:-50dB output.mp3

This removes silence

  • at the beginning (indicated by the first argument 1)
  • with minimum length zero (indicated by the second argument 0)
  • silence is classified as anything under -50 decibels (indicated by -50dB).

Documentation: FFMPEG silence remove filter

Also anyone looking to find the right value to classify silence as may wish to look into normalising their input audio volume to 0dB first, to do this in ffmpeg see this answer.

Edit

As pointed out by @mems, to detect whether your version of ffmpeg has the filter run

ffmpeg -hide_banner -filters | grep silenceremove

if you have the filter it'll output something like

silenceremove A->A Remove silence

Solution 2

ffmpeg silence detect only detects the silence. One has to scan the ffmpeg output and cut the mp3 file.

In theory, this would be done as:

ffmpeg -i INPUT.mp3 -af silencedetect=n=-50dB:d=1

and monitoring for output in form of:

[silencedetect @ 0000000004970f80] silence_start: -0.00154195
[silencedetect @ 0000000004970f80] silence_end: 3.20435 | silence_duration: 3.2059
...
[silencedetect @ 0000000004970f80] silence_start: 343.84

And, cutting start and end silence:

ffmpeg -i INPUT.mp3 -ss 3.20435 -t (343.84-3.20435)

I ended up writing a small Java program which does it. Hints:

  • ffmpeg writes to stderr. This means, you need to use ProcessBuilder and redirectErrorStream(true).
  • secondly, you need to extract the silence_start and silence_end information.
  • then you might use the timestamps to cut the video

Following code may be helpful: Using Java and FFMPEG with silencedetect to remove audio silence

Solution 3

After reading the FFmpeg silenceremove documentation, this is how you remove silence at the beginning and end of an audio file (keeps silence in the middle).

ffmpeg -i "INPUT.mp3" -af silenceremove=start_periods=1:stop_periods=1:detection=peak "OUTPUT.mp3"
Share:
35,024
Zahlii
Author by

Zahlii

Updated on November 15, 2021

Comments

  • Zahlii
    Zahlii over 2 years

    I am trying to use the following command with the latest ffmpeg build to remove silence from my .mp3 files:

    ffmpeg -i SILENCE.mp3 -af silencedetect=n=-50dB:d=1 -y -ab 192k  SILENCE_OUT.mp3
    

    However, the following output is produced:

    ffmpeg version N-66154-g1654ca7 Copyright (c) 2000-2014 the FFmpeg developers
      built on Sep  5 2014 22:10:38 with gcc 4.8.3 (GCC)
      configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
    isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
    le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
    enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-lib
    modplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrw
    b --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinge
    r --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --en
    able-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis
     --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-
    libx265 --enable-libxavs --enable-libxvid --enable-decklink --enable-zlib
      libavutil      54.  7.100 / 54.  7.100
      libavcodec     56.  1.100 / 56.  1.100
      libavformat    56.  4.100 / 56.  4.100
      libavdevice    56.  0.100 / 56.  0.100
      libavfilter     5.  1.100 /  5.  1.100
      libswscale      3.  0.100 /  3.  0.100
      libswresample   1.  1.100 /  1.  1.100
      libpostproc    53.  0.100 / 53.  0.100
    Input #0, mp3, from 'SILENCE.mp3':
      Metadata:
        title           : Snowblind (Featuring Tasha Baxter)
        artist          : Au5
        album           : Snowblind (Featuring Tasha Baxter)
        genre           : Electronica
        performer       : Au5
        track           : 1/1
        date            : 2014
        album_artist    : Au5,Tasha Baxter
        major_brand     : mp42
        minor_version   : 0
        compatible_brands: isommp42
        encoder         : Lavf55.42.100
      Duration: 00:05:50.80, start: 0.025057, bitrate: 192 kb/s
        Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 192 kb/s
    Output #0, mp3, to 'SILENCE_OUT.mp3':
      Metadata:
        TIT2            : Snowblind (Featuring Tasha Baxter)
        TPE1            : Au5
        TALB            : Snowblind (Featuring Tasha Baxter)
        TCON            : Electronica
        TPE3            : Au5
        TRCK            : 1/1
        TDRL            : 2014
        TPE2            : Au5,Tasha Baxter
        major_brand     : mp42
        minor_version   : 0
        compatible_brands: isommp42
        TSSE            : Lavf56.4.100
        Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, stereo, s16p, 192 kb/s
        Metadata:
          encoder         : Lavc56.1.100 libmp3lame
    Stream mapping:
      Stream #0:0 -> #0:0 (mp3 (native) -> mp3 (libmp3lame))
    Press [q] to stop, [?] for help
    [silencedetect @ 0000000004398f40] silence_start: -0.00628118
    [silencedetect @ 0000000004398f40] silence_end: 3.21413 | silence_duration: 3.22
    041
    [silencedetect @ 0000000004398f40] silence_start: 343.844
    [libmp3lame @ 00000000043b2940] Trying to remove 1152 samples, but the queue is
    empty
    size=    8223kB time=00:05:50.79 bitrate= 192.0kbits/s
    video:0kB audio:8222kB subtitle:0kB other streams:0kB global headers:0kB muxing
    overhead: 0.011485%
    

    The generated audio file however still has the original length without any silence removed. See the following images: http://i.imgur.com/nVxe5lX.png

    Any help is appreciated!

    EDIT: Alright, silence detect is only DETECTING the silence. Not removing it. I will try to post a solution for this.