![使用 ffmpeg 減少背景噪音並優化音訊剪輯中的語音](https://rvso.com/image/1402573/%E4%BD%BF%E7%94%A8%20ffmpeg%20%E6%B8%9B%E5%B0%91%E8%83%8C%E6%99%AF%E5%99%AA%E9%9F%B3%E4%B8%A6%E5%84%AA%E5%8C%96%E9%9F%B3%E8%A8%8A%E5%89%AA%E8%BC%AF%E4%B8%AD%E7%9A%84%E8%AA%9E%E9%9F%B3.png)
我從視訊檔案中提取音訊剪輯以進行語音識別。這些影片來自移動/其他手工設備,因此包含大量噪音。我想減少音訊的背景噪音,以便我中繼到語音辨識引擎的語音清晰。我正在使用 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
答案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。
如果我沒記錯的話,我嘗試過,但它不如恕我直言上面經過訓練的神經網路那麼有效。