Arka plandaki gürültüyü azaltın ve ffmpeg kullanarak bir ses klibinden konuşmayı optimize edin


30

Konuşma tanıma için bir video dosyasından ses klipleri ayıklarım. Bu videolar mobil / diğer el yapımı cihazlardan geliyor ve bu nedenle çok fazla gürültü içeriyor. Sesin arka plan gürültüsünü azaltmak istiyorum, böylece konuşma tanıma motoruma ilettiğim konuşmanın netleşmesini istiyorum. Bunların hepsini yapmak için ffmpeg kullanıyorum, ancak gürültü azaltma aşamasında sıkışıp kaldım.

Şimdiye kadar filtreleri izlemeyi denedim:

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

Ancak sonuçlar çok hayal kırıklığı yaratıyor. Akıl yürütmem, konuşma 300-3000 hz aralığının altına geldiğinden, herhangi bir arka plan gürültüsünü bastırmak için diğer tüm frekansları filtreleyebilirim. Neyi kaçırıyorum?

Ayrıca, konuşma geliştirmeleri için kullanılan ve bulunamadı Weiner filtreleri hakkında okumak bu ama emin nasıl kullanılacağını duyuyorum.

Yanıtlar:


35

Sesli konuşmayı izole etmek istiyorsanız, düşük geçişli bir filtreyi yüksek geçişli bir filtreyle birleştirmeyi deneyin. Kullanılabilir ses için 200hz ve altı filtrelemenin ardından 3000hz ve üstü filtrelemenin kullanılabilir sesi sağlamak için oldukça iyi bir iş çıkardığını fark ettim.

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

Bu örnekte, önce düşük frekansları kesmek için yüksek geçiş filtresini ekleyin, ardından daha yüksek frekansları kesmek için düşük geçiş filtresini kullanın. Gerekirse, kesme sıklığı aralıkları içindeki daha yüksek db frekanslarını temizlemek için dosyanızı bir kereden fazla çalıştırabilirsiniz.


Üzgünüm, ama bu benim için farkedilir bir gürültü azaltma gibi görünüyor.
Angad

Bu, düşük düzeydeki arka plan gürültüsünü (fanlar, vızıldama vb.) Azaltmak için çok iyi çalışır, ancak daha sonra diğer filtreleri uygulayarak biraz azaltılabilse de, ses kalitesini biraz tehlikeye atabilir.
Iain Collins,

3
Benim durumum için orjinal ses o kadar kötüydü ki arka planda bir miktar su düşmesi nedeniyle sesi duymak neredeyse imkansızdı. Aşağıdakileri kullandım. Mükemmel bir kalite değil, orijinalinden 1000 kat daha iyi. -af "highpass=f=200, lowpass=f=1000"
Eric

Yukarıdakilerle ilgili bazı hatalar alıyorum veya daha doğrusu ffmpeg uyarısı aldım: [Parsed_highpass_0 @ 0x1524780] 52 kez kırpma. Lütfen kazancı azaltın.
shevy

6
Filtrenizi önizleyebilirsinizffplay <input file> -af lowpass=3000,highpass=200
Björn

11

FFmpeg artık gürültü geçmişiyle ilgilenmek için 2 yerel filtreye sahip:

Ayrıca, bir süredir FFmpeg ile ( ladspagürültü bastırıcıyı arayın) ve / veya lv2(konuşma denatörü arayın) filtreleri kullanabilirsiniz.


9

ffmpeg, dahili gürültü azaltma için iyi bir ses filtresine sahip değildir. Audacity'nin oldukça etkili bir NR filtresi vardır, ancak yalnızca gürültünün ve ardından girişin bir örneği ile 2 geçişli işlemle kullanılmak üzere tasarlanmıştır.

Üstündeki yorumlar https://github.com/audacity/audacity/blob/master/src/effects/NoiseReduction.cpp nasıl çalıştığını açıklar. (temel olarak: eşiğin altındaki her FFT bölmesini bastırın. Bu nedenle, yalnızca bu frekans bandındaki gürültü tabanından daha yüksek olduklarında sinyalleri iletir. Soruna neden olmadan şaşırtıcı şeyler yapabilir. Bu, adapte olan bir bant geçiren filtre gibi. Gürültünün enerjisi tüm spektruma yayıldığından, yalnızca birkaç dar banttan geçerek toplam gürültü enerjisini LOT azaltacaktır.

Ayrıca bakınız Ses gürültüsü azaltma: Audacity diğer seçeneklerle nasıl karşılaştırılır? Nasıl çalıştığı ve FFT kutularını bir şekilde veya başka bir şekilde eşleştirmenin daha fazla detayı için de, tipik ticari gürültü azaltma filtrelerinin temelidir.

Bu filtrenin ffmpeg'e taşınması biraz garip olurdu. Belki de 2 geçişli bir filtre yerine 2 girişli bir filtre olarak uygulamak en iyisidir. Gürültü profili elde etmek için sadece birkaç saniyeye ihtiyaç duyduğundan, tüm dosyayı okumak zorunda olduğu gibi değildir. Ve yine de bütün ses akışını gürültü örneği olarak beslememelisin. Her FFT kutusu için eşikleri ayarlamak için bir SADECE gürültü örneği görmesi gerekir.

Yani evet, 2 geçiş yerine 2. bir giriş anlamlı olur. Ancak bu, ffmpeg filtrelerin çoğundan daha kolay kullanılmasını sağlar. Dereceli bölünmüş / zaman aralığı ekstresi içeren bir sürü vudu gerekir. Elbette, ayrı bir dosyada birden fazla giriş dosyası için uygun bir gürültü örneğiniz yoksa, el ile müdahaleye ihtiyacınız var. (Aynı mikrofondan / kurulumdan bir gürültü örneği, bu kurulumdaki tüm klipler için iyi olmalıdır.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.