如何检测音频文件末尾的静音?
问题描述:
我试图在音频文件的末尾检测沉默。
我与的ffmpeg图书馆取得了一些进展。在这里,我用silencedetect列出在音频文件中的所有沉默。如何检测音频文件末尾的静音?
ffmpeg -i audio.wav -af silencedetect=n=-50dB:d=0.5 -f null - 2> /home/aliakber/log.txt
这里是命令的输出:
--with沉默的前部和端音频file--
[silencedetect @ 0x1043060] silence_start: 0.484979
[silencedetect @ 0x1043060] silence_end: 1.36898 | silence_duration: 0.884
[silencedetect @ 0x1043060] silence_start: 2.57298
[silencedetect @ 0x1043060] silence_end: 3.48098 | silence_duration: 0.908
[silencedetect @ 0x1043060] silence_start: 4.75698
size=N/A time=00:00:05.56 bitrate=N/A
--without沉默在的音频文件的前端和尾端 -
[silencedetect @ 0x106fd60] silence_start: 0.353333
[silencedetect @ 0x106fd60] silence_end: 1.25867 | silence_duration: 0.905333
[silencedetect @ 0x106fd60] silence_start: 2.46533
[silencedetect @ 0x106fd60] silence_end: 3.37067 | silence_duration: 0.905333
size=N/A time=00:00:04.61 bitrate=N/A
但我想要更灵活的东西,以便我可以操纵输出并根据结果执行更多任务。
我想要得到的输出类似真正或假。如果有一个沉默的一定时期存在于音频文件的末尾将返回真正和假否则。
有人建议我一个简单的方法来实现这一目标?
答
试试这个:
ffmpeg -i audio.wav -af silencedetect=n=-50dB:d=0.5 -f null - 2>&1 | grep -Eo "silence_(start|end)" | tail -n 1 | grep "start" | wc -l
输出:
-
1
- 那里到底是沉默 -
0
- 有在年底
没有沉默说明: 正如我在沉默情况看没有silence_end
在日志的末尾。
-
2>&1
- 重定向到stderr
stdin
-
grep -Eo "silence_(start|end)"
- 过滤日志,只保留silence_start
和silence_end
从日志。每个新行。 -
tail -n 1
- 得到最后一行。 (如果是这样,现在我们有3种情况的状态:'silence_start'
,'silence_end'
,<empty>
) -
grep "start"
- 保持在线,只有当它包含start
(两种情况:'silence_start'
,<empty>
) -
wc -l
- 获取行数。(1
在'silence_start'
和0
在<empty>
情况下)
确定,即'ffmpeg'是* *分析最好的软件?结果你接下来要做什么?你可以编写简单的脚本(也许在bash上)来分析ffmpeg输出并返回* true *或* false *。 –
也不清楚“沉默到底”是什么意思。如果在静音录音结束时,然后在最后 - 按下相机关闭按钮,如果它被认为是静音? –
最后可能有多少沉默是否有上限? – Mulvya