バックグラウンドノイズを減らし、ffmpegを使用してオーディオクリップからの音声を最適化する


30

音声認識のためにビデオファイルからオーディオクリップを抽出します。これらのビデオはモバイル/その他の手作りデバイスからのものであるため、多くのノイズが含まれています。音声のバックグラウンドノイズを減らして、音声認識エンジンに中継する音声が明瞭になるようにします。私は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の範囲内にあるため、他のすべての周波数をフィルタリングしてバックグラウンドノイズを抑えることができるからです。私は何が欠けていますか?

また、音声の強調に使用できるウィナーフィルターについて読んだところ、これを見つけましが、その使用方法はわかりません。

回答:


35

可聴音声を分離する場合は、ローパスフィルターとハイパスフィルターを組み合わせてみてください。使用可能なオーディオについては、200hz以下をフィルタリングしてから3000hz以上をフィルタリングすると、使用可能な音声オーディオを保持するのにかなり良い仕事をすることに気付きました。

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

この例では、最初にハイパスフィルターを追加して低い周波数をカットし、次にローパスフィルターを使用して高い周波数をカットします。必要に応じて、これを複数回実行して、カット周波数範囲内のより高いdb周波数をクリーンアップできます。


申し訳ありませんが、これでは目立ったノイズ低減は行われていないようです。
アンガッド

これは、低レベルのバックグラウンドノイズ(ファン、バズなど)を低減するのに非常に効果的ですが、後で他のフィルターを適用することで多少は軽減できますが、オーディオ品質がわずかに低下する可能性があります。
イアンコリンズ

3
私の場合、元の音声は非常に悪かったので、バックグラウンドでの滝の音のために声を聞くことはほとんど不可能でした。以下を使用しました。それは素晴らしい品質ではありませんが、オリジナルよりも1000倍優れています。-af "highpass=f=200, lowpass=f=1000"
エリック

上記またはむしろ、ffmpegからの警告でエラーが発生します:[Parsed_highpass_0 @ 0x1524780] 52回のクリッピング。ゲインを減らしてください。
シェビー

6
あなたがあなたのフィルタをプレビューすることffplay <input file> -af lowpass=3000,highpass=200
ビョルン

11

FFmpegには、ノイズバックグラウンドを処理する2つのネイティブフィルターがあります。

また、しばらくしてから、FFmpegで(ladspaノイズlv2サプレッサーを探す)および/または(音声ノイズ除去を探す)フィルターを使用できます。


9

ffmpegにはノイズリダクション用の適切なオーディオフィルターは組み込まれていません。Audacityにはかなり効果的なNRフィルターがありますが、ノイズと入力のみのサンプルで2パス操作で使用するように設計されています。

https://github.com/audacity/audacity/blob/master/src/effects/NoiseReduction.cppの上部にあるコメントは、その仕組みを説明しています。(基本的には、しきい値を下回るすべてのFFTビンを抑制します。そのため、その周波数帯域のノイズフロアよりも大きい場合にのみ信号を通過させます。問題を引き起こすことなく驚くべきことを行うことができます。ノイズのエネルギーはスペクトル全体に分散しているため、わずかな狭い帯域を通過させるだけで、総ノイズエネルギーa LOTが減少します。

オーディオノイズリダクションも参照してください:大胆さは他のオプションと比較してどうですか?動作の詳細と、何らかの方法でFFTビンをしきい値処理することは、一般的な市販のノイズ低減フィルターの基礎でもあります。

そのフィルターをffmpegに移植するのは少し厄介です。2パスフィルターではなく、2入力のフィルターとして実装するのが最適でしょう。ノイズプロファイルを取得するのに数秒しか必要ないため、ファイル全体を読み取る必要はありません。とにかく、ノイズサンプルとしてオーディオストリーム全体をフィードする必要はありません。各FFTビンのしきい値を設定するには、JUSTノイズのサンプルを確認する必要があります。

そのため、2パスではなく2番目の入力が意味をなします。しかし、それにより、ほとんどのffmpegフィルターよりもはるかに使いやすくなります。ストリーム分割/時間範囲抽出を備えたブードゥー教が必要です。もちろん、複数の入力ファイルに適した別のファイルにノイズサンプルがない限り、手動での介入が必要です。(同じマイク/セットアップからの1つのノイズサンプルは、そのセットアップからのすべてのクリップで問題ないはずです。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.