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:
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.
解决方案
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
Original: https://blog.csdn.net/weixin_29554335/article/details/111976992
Author: 林瑞和
Title: ffmpeg 静默_使用FFMPEG与silencedetect去除音频静音
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/525133/
转载文章受原作者版权保护。转载请注明原作者出处!