0%

FFmpeg 根据声音的分贝截断声音

有这么一个需求,期望提取出有声音的片段,并且知道声音片段开始时间和结束时间。

研究了一下,代码如下

1
2
3
ffmpeg -i cut1.mp3 -af silencedetect=n=-50dB:d=1 -f null -
ffmpeg -i cut1.mp3 -af silencedetect=n=-40dB:d=0.2,ametadata=print:file=log.txt -f null -
ffmpeg -i cut1.mp3 -af silencedetect=noise=0.005:d=0.1,ametadata=print:file=log.txt -f null -

也可以用 ffprobe,这个命令会输出一个json文件

1
2
3
4
5
ffprobe -v error -f lavfi -i "amovie=cut1.mp3,silencedetect=n=-40dB:d=0.2,ametadata=print" -show_entries frame_tags=lavfi.silence_start -of json > output2.json

ffprobe -f lavfi -i amovie=cut1.mp3,silencedetect=n=-40dB:d=0.1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.silence_start:frame_tags=lavfi.silence_end:stream_tags:format_tags -of csv=p=0 -show_format -count_frames -show_streams -show_data -print_format json > something2.json

ffprobe -v error -f lavfi -i amovie=cut1.mp3,silencedetect=n=-35dB:d=0.1 -show_entries frame_tags=lavfi.silence_start:frame_tags=lavfi.silence_end -of json > output3.json

这儿还有一些获取声音信息的,命令研究了之后我就给忘了。。

1
2
3
ffprobe -v error -f lavfi -i "amovie=cut.mp3,asetnsamples=44100,astats=metadata=1:reset=1" -show_entries frame_tags=lavfi.astats.Overall.RMS_level -of json > output.json

ffprobe -v error -f lavfi -i "amovie=cut.mp3,asetnsamples=44100,astats=metadata=1:reset=1" -show_entries frame_tags=lavfi.astats.Overall.RMS_level -of csv=p=0 > output.log