Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I extract audio clips from a video file for speech recognition. These videos come from mobile/other handmade devices and hence contain a lot of noise. I want to reduce background noise of the audio so that the speech is clear which I can then relay to my speech recognition engine. I am using ffmpeg to doall this stuff, but am stuck at noise reduction phase. Till now I have tried following filters:

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

But all the results are very disappointing. MY reasoning was that since speech comes under 300-3000 hz range I can filter out all other frequencies to suppress any background noise. What am I missing?

Also, I read about weiner filters that could be used for speech enhancements and found this https://www.ffmpeg.org/doxygen/0.6/wmavoice_8c-source.html but am not sure how to use this

share|improve this question

2 Answers 2

Ffmpeg has an -absf option that accepts a bitstream_filter. One of the available bitstream filters is "noise". Try the following:

ffmpeg -i <input_file> <your_options> -absf noise <output_file>
share|improve this answer
what do i put in your_options?? –  Sudh Mar 25 at 17:07
what do i put in your_options??..I think noise option is used to add noise to the audio –  Sudh Mar 25 at 17:19

If you are looking to isolate audible speech try combining a lowpass filter with a high pass filter. For usable audio I have noticed that filtering out 200hz and below then filter out 3000hz and above does a pretty good job of keeping usable voice audio.

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

In this example add the high pass filter first to cut the lower frequencies then use the low pass filter to cut the higher frequencies. If needed you could run your file through this more than once to clean up higher db frequencies within the cut frequency ranges.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.