使用 ffmpeg 減少背景噪音並優化音訊剪輯中的語音

使用 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

但結果卻非常令人失望。我的理由是,由於語音頻率低於 300-3000 Hz 範圍,我可以過濾掉所有其他頻率以抑制任何背景噪音。我缺什麼?

另外,我讀到了可用於語音增強的韋納濾波器,並發現但我不知道如何使用它。

答案1

如果您希望隔離可聽語音,請嘗試將低通濾波器與高通濾波器結合使用。對於可用的音頻,我注意到過濾掉 200hz 及以下的音頻,然後過濾掉 3000hz 及以上的音頻可以很好地保留可用的語音音頻。

ffmpeg -i <input_file> -af "highpass=f=200, lowpass=f=3000" <output_file>

在此範例中,首先加入高通濾波器來濾除較低頻率,然後使用低通濾波器濾除較高頻率。如果需要,您可以多次執行文件,以清理截止頻率範圍內的較高分貝頻率。

答案2

FFmpeg 現在有 3 個原生過濾器來處理噪音背景:

  • afftdn:使用 FFT 對音訊樣本進行降噪
  • anlmdn:使用非局部均值演算法減少音訊樣本中的寬頻噪聲
  • arnndn:使用循環神經網路減少語音噪音。可以找到要載入的模型文件的範例這裡

另外,從一段時間開始,人們可以在 FFmpeg 中使用ladspa(尋找噪音抑制器)和/或lv2(尋找語音降噪器)濾波器。

答案3

更新:最近新增了 FFmpeg afftdn,它使用下面描述的每個 FFT-bin 的雜訊閾值方法,以及用於動態調整/計算出適當閾值的各種選項。

anlmdn(非本地手段)是一種非常適合視訊的技術;我還沒有嘗試過音頻過濾器。

其中任何一個都應該是很多比高通/低通更好,除非你唯一的噪音是 60Hz 的嗡嗡聲或其他東西。 (在相當窄的帶通中,人類語音聽起來仍然不錯,但是有更好的方法來消除寬頻噪音背景嘶嘶聲。)


ffmpeg 沒有任何像樣的內建降噪音頻濾波器。

樓上的評論https://github.com/audacity/audacity/blob/master/src/effects/NoiseReduction.cpp解釋它是如何工作的。 (基本上:抑制低於閾值的每個FFT 箱。因此,只有當訊號比該頻段中的本底噪聲大時,它才允許訊號通過。它可以做令人驚奇的事情,而不會引起問題。

也可以看看音訊降噪:Audacity 與其他選項相比如何?了解其工作原理的更多細節,以及以一種或另一種方式對 FFT 箱進行閾值處理也是典型商業降噪濾波器的基礎。

將該濾鏡移植到 ffmpeg 會有點尷尬。也許將其實現為具有 2 個輸入的濾波器,而不是 2 通濾波器,效果最佳。由於它只需要幾秒鐘即可獲得雜訊輪廓,因此不需要讀取整個檔案。無論如何,您不應該將整個音訊串流作為噪音樣本提供給它。它需要查看 JUST 雜訊樣本來設定每個 FFT bin 的閾值。

所以是的,第二個輸入,而不是 2pass,是有意義的。但這使得它比大多數 ffmpeg 過濾器更不容易使用。你需要一堆帶有流分割/時間範圍提取的巫毒。當然,您需要手動幹預,除非您在單獨的文件中有適合多個輸入文件的雜訊樣本。 (來自同一麥克風/設定的一個雜訊樣本應該適合該設定中的所有剪輯。)

答案4

去完成用戶564335的回答:

這: -af arnndn=m=cb.rnnn 可能是我用過的最好的雜訊濾波器ffmpeg(基於人工智慧)。

像這樣:

ffmpeg -i <input_file> -af arnndn=m=cb.rnnn <output_file>

不需要頻帶濾波器。訓練模型 ( files.rnnn)可以在這裡找到(您需要下載並使用其中一個檔案)。

cb( )模型conjoined-burgers是我找到的模型最令人印象深刻和多才多藝。我還發現這個過濾器非常有效率(loudnorm例如,似乎沒有比過濾器使用更多的 CPU )。


另外,從 ffmpeg 5.0 開始,有一個新的噪音過濾器:AFWTDN

如果我沒記錯的話,我嘗試過,但它不如恕我直言上面經過訓練的神經網路那麼有效。

相關內容