Sud*_*udh 52 audio noise voice speech-recognition ffmpeg
我从视频文件中提取音频剪辑以进行语音识别。这些视频来自移动/其他手工设备,因此包含大量噪音。我想降低音频的背景噪音,以便我传递给语音识别引擎的语音清晰。我正在使用 ffmpeg 来完成所有这些工作,但我仍停留在降噪阶段。
到目前为止,我已经尝试过以下过滤器:
ffmpeg-20140324-git-63dbba6-win64-static\bin>ffmpeg -i i nput.wav -filter_complex "highpass=f=400,lowpass=f=1800" out2.wav
ffmpeg -i i nput.wav -af "equalizer=f=1000:width_type=h:width=900:g=-10" output.wav
ffmpeg -i i nput.wav -af "bandreject=f=1200:width_type=h:width=900:g=-10" output.wav
Run Code Online (Sandbox Code Playgroud)
但结果非常令人失望。我的理由是,由于语音低于 300-3000 Hz 范围,我可以过滤掉所有其他频率以抑制任何背景噪音。我错过了什么?
此外,我阅读了有关可用于语音增强的韦纳过滤器并发现了这一点,但我不确定如何使用它。
小智 48
如果您希望隔离可听语音,请尝试将低通滤波器与高通滤波器结合使用。对于可用音频,我注意到过滤掉 200hz 及以下然后过滤掉 3000hz 及以上在保持可用语音音频方面做得非常好。
ffmpeg -i <input_file> -af "highpass=f=200, lowpass=f=3000" <output_file>
Run Code Online (Sandbox Code Playgroud)
在这个例子中,首先添加高通滤波器来削减较低的频率,然后使用低通滤波器来削减较高的频率。如果需要,您可以多次运行文件以清除截止频率范围内的更高分贝频率。
Pet*_*des 16
更新:最近添加了 FFmpeg afftdn,它使用下面描述的每个 FFT-bin 的噪声阈值方法,并提供各种选项来即时调整/找出适当的阈值。
anlmdn(非本地方式)是一种适用于视频的技术;我没有试过音频过滤器。
无论这些应该是多比的高通/低通更好的,除非你的唯一的噪音是60Hz的嗡嗡声或东西。(人类语音在非常窄的带通中听起来仍然可以,但有更好的方法来清除宽带噪声背景嘶嘶声。)
ffmpeg 没有内置任何像样的降噪音频过滤器。 Audacity 有一个相当有效的 NR 过滤器,但它被设计用于 2-pass 操作,只有噪声样本,然后是输入。
https://github.com/audacity/audacity/blob/master/src/effects/NoiseReduction.cpp顶部的评论解释了它是如何工作的。(基本上:抑制低于阈值的每个 FFT bin。因此,它仅在信号比该频带中的本底噪声大时才允许信号通过。它可以做惊人的事情而不会引起问题。它就像一个带通滤波器,可以适应由于噪声的能量分布在整个频谱上,因此只让它的几个窄带通过就会大大降低总噪声能量。
另请参阅音频降噪:大胆与其他选项相比如何?有关其工作原理的更多详细信息,并且以一种或另一种方式对 FFT bin 进行阈值处理也是典型商业降噪滤波器的基础。
将该过滤器移植到 ffmpeg 会有点尴尬。也许将它实现为具有 2 个输入的滤波器,而不是 2 通滤波器,效果最好。因为它只需要几秒钟就可以得到一个噪声配置文件,所以它不必通读整个文件。无论如何,您不应该将整个音频流作为噪声样本提供给它。它需要查看一个 JUST 噪声样本来为每个 FFT bin 设置阈值。
所以是的,第二个输入而不是 2pass 是有意义的。但这使它比大多数 ffmpeg 过滤器更不易于使用。你需要一堆带有流分割/时间范围提取的巫毒。当然,您需要手动干预,除非您在单独的文件中有一个适合多个输入文件的噪声样本。(来自同一麦克风/设置的一个噪声样本应该适用于该设置中的所有剪辑。)
小智 10
我有一个带有各种糟糕背景噪音的视频。我设法以这种方式修复:我使用以下命令进行了两次传递:
ffmpeg -i input.mp4 -af "afftdn=nf=-25" file1.mp4
ffmpeg -i file1.mp4 -af "afftdn=nf=-25" file2.mp4
Run Code Online (Sandbox Code Playgroud)
比我用来澄清说话的
ffmpeg -i file2.mp4 -af "highpass=f=200, lowpass=f=3000" file3.mp4
Run Code Online (Sandbox Code Playgroud)
最后增加了音量:
ffmpeg file3.mp4 -af "volume=4" finaloutput.mp4
Run Code Online (Sandbox Code Playgroud)
通过这种方式,我设法获得了相当不错的音频。无论如何,声音是主观的,对我有益的可能对其他人不利。希望能帮助到你。毫米
小智 5
低通和高通滤波器与 afftdn 的组合令人印象深刻,我已经成功地使用此配置清除了旧 vhs 视频中的白噪声:
-af "highpass=200,lowpass=3000,afftdn"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61050 次 |
| 最近记录: |