如何检测音频文件末尾的静音?

问题描述:

我试图在音频文件的末尾检测沉默。
我与的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 

但我想要更灵活的东西,以便我可以操纵输出并根据结果执行更多任务。
我想要得到的输出类似真正。如果有一个沉默的一定时期存在于音频文件的末尾将返回真正否则。

有人建议我一个简单的方法来实现这一目标?

+0

确定,即'ffmpeg'是* *分析最好的软件?结果你接下来要做什么?你可以编写简单的脚本(也许在bash上)来分析ffmpeg输出并返回* true *或* false *。 –

+0

也不清楚“沉默到底”是什么意思。如果在静音录音结束时,然后在最后 - 按下相机关闭按钮,如果它被认为是静音? –

+0

最后可能有多少沉默是否有上限? – Mulvya

试试这个:

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在日志的末尾。

  1. 2>&1 - 重定向到stderrstdin
  2. grep -Eo "silence_(start|end)" - 过滤日志,只保留silence_startsilence_end从日志。每个新行。
  3. tail -n 1 - 得到最后一行。 (如果是这样,现在我们有3种情况的状态:'silence_start''silence_end'<empty>
  4. grep "start" - 保持在线,只有当它包含start(两种情况:'silence_start'<empty>
  5. wc -l - 获取行数。1'silence_start'0<empty>情况下)
+0

的OP说,“*如果有沉默0.05秒,我需要假输出和真实的,否则*。” - 所以,你需要分析的开始时间和总时间和减。 – Mulvya

+0

@Mulvya什么是“沉默”? :)见silencedetect文档:https://ffmpeg.org/ffmpeg-filters.html#toc-silencedetect。 OP指定的沉默最小持续时间在他的命令后带'd'参数。 –

+0

糟糕。跳过使用'd'。虽然它应该是'0.05'。 – Mulvya