पृष्ठभूमि शोर को कम करें और ffmpeg का उपयोग करके ऑडियो क्लिप से भाषण का अनुकूलन करें


23

मैं भाषण मान्यता के लिए एक वीडियो फ़ाइल से ऑडियो क्लिप निकालता हूं। ये वीडियो मोबाइल / अन्य हस्तनिर्मित उपकरणों से आते हैं और इसलिए इनमें बहुत अधिक शोर होता है। मैं ऑडियो के बैकग्राउंड शोर को कम करना चाहता हूं ताकि जो भाषण मैं अपने भाषण पहचान इंजन से संबंधित हूं वह स्पष्ट हो। मैं यह सब करने के लिए 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

लेकिन परिणाम बहुत निराशाजनक हैं। मेरा तर्क यह था कि चूंकि भाषण ३००-३००० हर्ट्ज रेंज के अंतर्गत आता है इसलिए मैं किसी भी पृष्ठभूमि शोर को दबाने के लिए अन्य सभी आवृत्तियों को फ़िल्टर कर सकता हूं। मैं क्या खो रहा हूँ?

इसके अलावा, मैंने वेनर फिल्टर के बारे में पढ़ा जो भाषण संवर्द्धन के लिए इस्तेमाल किया जा सकता है और यह पाया गया लेकिन यह सुनिश्चित नहीं है कि इसका उपयोग कैसे किया जाए।

जवाबों:


28

यदि आप श्रव्य भाषण को अलग-थलग करना चाह रहे हैं तो एक हाई पास फिल्टर के साथ एक लोपास फ़िल्टर का संयोजन करने का प्रयास करें। प्रयोग करने योग्य ऑडियो के लिए मैंने देखा है कि 200 हर्ट्ज को फ़िल्टर करना और उसके बाद नीचे की ओर 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 से चेतावनी के साथ कुछ त्रुटि प्राप्त करता हूं: [पार्सड_हिगपास_0 @ 0x1524780] 52 बार क्लिपिंग। कृपया लाभ कम करें।
शेवी

4
आप के साथ अपने फिल्टर पूर्वावलोकन कर सकते हैंffplay <input file> -af lowpass=3000,highpass=200
ब्योर्न

7

Ffmpeg में शोर कम करने के लिए कोई भी सभ्य ऑडियो फिल्टर नहीं है। ऑडेसिटी में काफी प्रभावी NR फिल्टर है, लेकिन इसे केवल शोर के नमूने के साथ 2-पास के ऑपरेशन के साथ उपयोग करने के लिए डिज़ाइन किया गया है, और फिर इनपुट।

Https://github.com/audacity/audacity/blob/master/src/effects/NoiseReduction.cpp के शीर्ष पर टिप्पणियां बताती हैं कि यह कैसे काम करता है। (मूल रूप से: प्रत्येक FFT बिन को दबाएं जो कि दहलीज के नीचे है। इसलिए यह केवल संकेतों के माध्यम से देता है जब वे उस आवृत्ति बैंड में शोर मंजिल की तुलना में जोर से हो। यह समस्या पैदा किए बिना आश्चर्यजनक चीजें कर सकता है। यह एक बैंड-पास फिल्टर की तरह है जो एडाप्ट करता है। सिग्नल के लिए। चूंकि शोर की ऊर्जा पूरे स्पेक्ट्रम में फैली हुई है, केवल इसके कुछ संकीर्ण बैंड के माध्यम से जाने से कुल शोर ऊर्जा एक बहुत कम हो जाएगी।

ऑडियो शोर में कमी भी देखें : दुस्साहस अन्य विकल्पों की तुलना कैसे करता है? यह कैसे काम करता है, इसके अधिक विवरण के लिए, और यह कि एक या दूसरे तरीके से FFT डिब्बे को थ्रेसहोल्ड करना, विशिष्ट वाणिज्यिक शोर-कम करने वाले फिल्टर का आधार है।

उस फिल्टर को ffmpeg पर पोर्ट करना थोड़ा अजीब होगा। शायद इसे 2 इनपुट के साथ फ़िल्टर के रूप में कार्यान्वित किया जा रहा है, 2-पास फ़िल्टर के बजाय, सबसे अच्छा काम करेगा। चूँकि इसे शोर प्रोफ़ाइल प्राप्त करने के लिए केवल कुछ सेकंड की आवश्यकता होती है, ऐसा नहीं है कि इसे पूरी फ़ाइल के माध्यम से पढ़ना है। और आप इसे वैसे भी एक शोर नमूने के रूप में पूरे ऑडियो स्ट्रीम को खिलाएं। इसे प्रत्येक FFT बिन के लिए थ्रेसहोल्ड सेट करने के लिए JUST शोर का एक नमूना देखना होगा।

तो, हाँ, एक 2 इनपुट, बजाय 2pass, समझ में आता है। लेकिन यह सबसे ffmpeg फिल्टर की तुलना में उपयोग करने के लिए बहुत आसान बनाता है। आपको स्ट्रीम स्प्लिट / टाइम-रेंज एक्सट्रैक्ट के साथ वूडू के एक गुच्छा की आवश्यकता होगी। और निश्चित रूप से आपको मैन्युअल हस्तक्षेप की आवश्यकता है, जब तक कि आपके पास एक अलग फ़ाइल में शोर का नमूना न हो जो कि एकाधिक इनपुट फ़ाइलों के लिए उपयुक्त होगा। (एक ही mic से एक शोर नमूना / सेटअप उस सेटअप से सभी क्लिप के लिए ठीक होना चाहिए।)


3

FFmpeg में अब शोर पृष्ठभूमि से निपटने के लिए 2 देशी फिल्टर हैं: afftdn और anlmdn। इसके अलावा, कुछ समय के बाद कोई भी Fspmpeg के साथ लद्दा (शोर-सुप्रेसर के लिए देखो) और / या lv2 (स्पीच डीनोइज़र के लिए देखो) का उपयोग कर सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.