I have MP3 files that sometimes have silence at the end. I would like to remove this silence automatically. From what I can tell, it is "perfect" silence (0 amplitude), not background noise. The length of the content and the silence varies.
I found some other questions about cropping to the first 30 seconds or cropping to X and X+N seconds using ffmpeg
. I would think I could use a similar approach, as long as I have a way to find when the silence starts. How would I do that programatically?
For example, one possible solution would be to have a command that finds the beginning of the "silence". I'd expect a sequence like this
end=$(ffmpeg some-command-to-find-start-of-silence)
ffmpeg -t "$end" -acodec copy -i inputfile.mp3 outputfile.mp3
The solution does not have to use ffmpeg
, but it does need to be available on Ubuntu.
sox inputfile.mp3 outputfile.mp3 silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse
This will trim any silence longer than 0.1 second from your file. If you're only concerned about trimming the end, this can be simplified to:
sox inputfile.mp3 outputfile.mp3 reverse silence 1 0.1 0.1% reverse
A detailed look into how sox
's silence
works can be found here.
You probably are looking for a lossless solution, i.e. one that does not require re-encoding (which reduces quality).
I believe mp3splt is what you are looking for. It can be used from command line and GUI.
sudo aptitude install mp3splt mp3splt-gtk
should work on Debian and Ubuntu.
From the man page:
You can also try to split files automatically with silence detection (see -s option), trim files using silence detection (see -r option), or by a fixed time length (see -t option)
Have a look at the silencedetect
FFmpeg audio filter:
Detect silence in an audio stream.
This filter logs a message when it detects that the input audio volume is less or equal to a noise tolerance value for a duration greater or equal to the minimum detected noise duration.
The printed times and duration are expressed in seconds.
It has parameters to adjust how quiet something has to be to be considered silence, and how long the silence needs to be to be noted.