Saya mengekstrak klip audio dari file video untuk pengenalan suara. Video-video ini berasal dari ponsel / perangkat buatan tangan lainnya dan karenanya mengandung banyak suara. Saya ingin mengurangi kebisingan latar belakang audio sehingga ucapan yang saya sampaikan ke mesin pengenalan suara saya jelas. Saya menggunakan ffmpeg untuk melakukan semua hal ini, tetapi saya terjebak pada fase pengurangan kebisingan.
Sampai sekarang saya telah mencoba filter berikut:
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
Tetapi hasilnya sangat mengecewakan. Alasan saya adalah bahwa sejak pidato berada di bawah kisaran 300-3000 hz saya dapat menyaring semua frekuensi lain untuk menekan kebisingan latar belakang. Apa yang saya lewatkan?
Saya juga membaca tentang filter weiner yang dapat digunakan untuk peningkatan kemampuan berbicara dan menemukan ini tetapi saya tidak yakin bagaimana menggunakannya.
-af "highpass=f=200, lowpass=f=1000"
ffplay <input file> -af lowpass=3000,highpass=200
FFmpeg sekarang memiliki 2 filter asli untuk menangani latar belakang noise:
afftdn
anlmdn
Juga, sejak beberapa waktu, seseorang dapat menggunakan
ladspa
(mencari penekan-kebisingan) dan / ataulv2
(mencari penyebut ucapan) dengan FFmpeg.sumber
ffmpeg tidak memiliki filter audio yang layak untuk pengurangan noise bawaan. Audacity memiliki filter NR yang cukup efektif, tetapi ia dirancang untuk digunakan dengan operasi 2-pass dengan sampel hanya noise, dan kemudian input.
Komentar di bagian atas https://github.com/audacity/audacity/blob/master/src/effects/NoiseReduction.cpp menjelaskan cara kerjanya. (pada dasarnya: tekan setiap nampan FFT yang di bawah ambang batas. Jadi hanya memungkinkan sinyal masuk ketika mereka lebih keras daripada lantai kebisingan dalam pita frekuensi. Dapat melakukan hal-hal luar biasa tanpa menyebabkan masalah. Ini seperti filter band-pass yang menyesuaikan ke sinyal. Karena energi kebisingan tersebar di seluruh spektrum, hanya membiarkan melalui beberapa pita sempit itu akan mengurangi total energi kebisingan banyak.
Lihat juga Pengurangan kebisingan audio: bagaimana audacity dibandingkan dengan opsi lain? untuk perincian lebih lanjut tentang cara kerjanya, dan bahwa pengalokasian tempat sampah FFT dalam satu atau lain cara adalah dasar dari filter pengurangan kebisingan komersial juga.
Porting filter itu ke ffmpeg akan sedikit canggung. Mungkin menerapkannya sebagai filter dengan 2 input, bukannya filter 2-pass, akan bekerja lebih baik. Karena hanya perlu beberapa detik untuk mendapatkan profil noise, itu tidak seperti harus membaca seluruh file. Dan Anda TIDAK HARUS memberi makan seluruh aliran audio sebagai sampel suara. Perlu melihat sampel JUST noise untuk mengatur ambang batas untuk setiap nampan FFT.
Jadi ya, input ke-2, daripada 2pass, masuk akal. Tapi itu membuatnya jauh lebih mudah digunakan daripada kebanyakan filter ffmpeg. Anda memerlukan banyak voodoo dengan ekstrak stream split / rentang waktu. Dan tentu saja Anda memerlukan intervensi manual, kecuali jika Anda memiliki sampel derau dalam file terpisah yang akan sesuai untuk beberapa file input. (satu sampel derau dari mic / setup yang sama harus baik untuk semua klip dari setup itu.)
sumber