पल्सएडियो के साथ एक प्रोग्राम का आउटपुट रिकॉर्ड करें


49

मैं कमांड लाइन / बैश स्क्रिप्ट का उपयोग करके पल्सएडियो के साथ एक प्रोग्राम का आउटपुट रिकॉर्ड करना चाहूंगा । यह महत्वपूर्ण है कि सभी आउटपुट रिकॉर्ड न करें, लेकिन केवल एक विशिष्ट प्रोग्राम से आउटपुट।

मैंने सोचा कि मुझे एक नया नल-सिंक बनाना होगा और प्रोग्राम के आउटपुट को इस नए सिंक में ले जाना होगा। बताएं कि इस विशिष्ट मॉनिटर को रिकॉर्ड करने के लिए parec का उपयोग करें।

पहला कदम कुछ इस तरह होगा:

pactl load-module module-null-sink sink_name=steam

लेकिन अब प्रोग्राम के आउटपुट को इस सिंक में कैसे स्थानांतरित किया जाए?
और बैश स्क्रिप्ट के साथ विशिष्ट सिंक कैसे रिकॉर्ड करें?

जवाबों:


52

कुछ इस तरह की कोशिश करो:

एक टर्मिनल में दर्ज करें

pacmd

(यह पल्सएडियो-सर्वर का सीएलआई है) फिर उपयोग करें

list-sink-inputs

(जहां आपको चल रहे इनपुट के संकेत मिलते हैं) अब अपने इनपुट के सूचकांक को ढूंढें। अब $ INDEX के रूप में संदर्भित किया जाता है

स्क्रिप्ट योग्य हिस्सा है:

pactl load-module module-null-sink sink_name=steam
pactl move-sink-input $INDEX steam
parec -d steam.monitor | oggenc -b 192 -o steam.ogg --raw -

स्पष्टीकरण:

  • पहला आदेश एक नल-सिंक को जोड़ देगा जैसा कि आप पहले से जानते थे।
  • दूसरी कमांड सिंक-इनपुट को आपके मानक-ऑडियो-सिंक से स्टीम तक ले जाती है
  • तीसरा कमांड डिवाइस स्टीम (-d) के मॉनिटर को रिकॉर्ड करता है और आउटपुट (रॉ-वेव-स्ट्रीम) को ओगेंक में डालता है, जो इस तरंग-धारा को एक ओगा-फाइल में एन्कोड करता है। (एमपी 3 उपयोग लंगड़ा के लिए)

शानदार, इस महान जवाब के लिए बहुत बहुत धन्यवाद! :)
फोर्स

2
क्या आप बता सकते हैं कि इस ऑपरेशन को पूर्ववत् कैसे करें? मेरे नल सिंक अभी भी विभिन्न अनुप्रयोगों के लिए मैप किए गए हैं, और अब मेरे पास कोई आवाज़ नहीं है!
ixtmixilix

@ixtmixilix: डिफ़ॉल्ट रूप से सभी सेटिंग्स को पुनर्स्थापित करने का सबसे आसान तरीका सिर्फ पल्सएडियो सर्वर को मारना और पुनः आरंभ करना है। यदि आप ऑटोस्पेस में सेट है (यह डिफ़ॉल्ट है) तो आप बस pulseaudio -kएक टर्मिनल में जारी करते हैं।
ताकत

1
@ixtmixilix जब आप चलाते list-sink-inputsहैं तो sinkमूल्य पर ध्यान दें । बस वापस चलने के लिए स्वैप करें pactl move-sink-input $INDEX $SINK। कुछ इस तरह सेpactl move-sink-input 4719 1
सियारन

27

इस थ्रेड के वास्कट उत्तर को बेहतर बनाना ताकि आप एप्लिकेशन को ध्वनि और रिकॉर्ड कर सकें।

सबसे पहले, हम अपने डिफ़ॉल्ट आउटपुट की तलाश करते हैं और उसका सिंक नाम इसमें डालते हैं $DEFAULT_OUTPUT:

$ pacmd list-sinks | grep -A1 "* index"
  * index: 1
    name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
$ DEFAULT_OUTPUT=$(pacmd list-sinks | grep -A1 "* index" | grep -oP "<\K[^ >]+")
$ echo $DEFAULT_OUTPUT
alsa_output.pci-0000_00_1b.0.analog-stereo

फिर, हम एक संयुक्त सिंक बनाते हैं जिसमें केवल एक दास होता है: $ DEFAULT_OUTPUT । एप्लिकेशन (स्रोत) द्वारा उत्पन्न ध्वनि को दास सिंक (यानी वास्तविक आउटपुट) के लिए भेजा जाएगा, और हम इसे रिकॉर्ड भी करेंगे। यह एक नल सिंक से अलग है जहां स्रोत ध्वनि को अग्रेषित नहीं किया जाता है।

$ pactl load-module module-combine-sink \
  sink_name=record-n-play slaves=$DEFAULT_OUTPUT \
  sink_properties=device.description="Record-and-Play"

sink_properties यदि आप वर्णन नाम में रिक्त स्थान का उपयोग करते हैं तो वैकल्पिक और बग हो सकता है।

फिर, हम वाशट्ल आंसर कीpactl move-sink-input ... कमांड का उपयोग कर सकते हैं ( स्टीम के बजाय रिकॉर्ड-एन-प्ले के साथ ) लेकिन जीयूआई अधिक सरल है (और जाँच / समस्या निवारण के लिए महान है):pavucontrol

$ sudo apt-get install pavucontrol
$ pavucontrol &

फिर, हम उस ऐप में कुछ ध्वनि खेलते हैं जिसे हम रिकॉर्ड करना चाहते हैं। में pavucontrol Playbackटैब, हम एप्लिकेशन ड्रॉपडाउन सूची में चयन करें: "रिकार्ड और प्ले"

अंत में, हम एक ही समय में रिकॉर्ड करने और सुनने के लिए अच्छे हैं! ( लंगड़ा एमपी उदाहरण, अग्रभूमि में चला)

$ parec --format=s16le -d record-n-play.monitor | \
  lame -r --quiet -q 3 --lowpass 17 --abr 192 - "temp.mp3"

या हम पृष्ठभूमि में रिकॉर्ड कर सकते हैं और किसी भी समय बंद कर सकते हैं:

$ parec --format=s16le -d record-n-play.monitor | \
  lame -r --quiet -q 3 --lowpass 17 --abr 192 - "temp.mp3" \
   > /dev/null &1>/dev/null
$ killall -q parec lame

ध्यान दें:

  • सब कुछ अनसुना करने या प्रक्रिया को पुन: प्रयास करने के लिए: इस उत्तर का उपयोग करके सिंक हटाएं या रीसेट करें । pulseaudio -kसत्र की चूक के लिए सब कुछ रीसेट करने के लिए महान काम करता है।
  • यदि हम सिस्टम साउंड सेटिंग्स में डिफ़ॉल्ट आउटपुट को बदलते हैं, तो कस्टम ऐप प्लेबैक सेटिंग ओवरराइट हो जाएगी और हमें संयुक्त इंटरफ़ेस पर वापस सेट करने के लिए pavucontrol में वापस जाना होगा।
  • कई "वास्तविक" इंटरफेस (जैसे हेडफ़ोन, एचडीएमआई आउटपुट, आदि ...) से ध्वनि को सुनने में सक्षम होने के लिए, हमें सभी "वास्तविक" आउटपुट शामिल करने चाहिए जो हम सुनने के लिए उपयोग कर सकते हैं, रिकॉर्ड-एन-प्ले स्लेक दास के रूप में , जैसे pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2:।

संपादित करें: उबंटू 18 (शायद 17 भी) के बाद से, संयुक्त सिंक वास्तविक आउटपुट डिवाइस के बजाय डिफ़ॉल्ट सिस्टम आउटपुट डिवाइस बन जाता है। इसलिए जब आप सिस्टम ट्रे में ध्वनि आइकन का उपयोग करके वॉल्यूम बदलते हैं तो यह आपके रिकॉर्ड ध्वनि को प्रभावित करता है। समाधान: संयुक्त सिंक बनाने के बाद, pavucontrolआउटपुट टैब में खोलें । "दृश्य: वर्चुअल आउटपुट डिवाइस" चुनें और संयुक्त सिंक की ध्वनि मात्रा को 100% पर रीसेट करें। फिर असली आउटपुट डिवाइस पर "व्यू: हार्डवेयर आउटपुट डिवाइसेस" चुनें और हरे रंग के आइकन "वैकल्पिक रूप में परिभाषित करें" को दबाएं।


9

@ वाशटेल का जवाब शानदार है। @ixtmixilix ने रिकॉर्डिंग समाप्त होने के बाद नियमित ऑडियो को पुनर्स्थापित करने के बारे में पूछा। यहाँ मैं सबसे आसान तरीका जानता हूँ:

pavucontrolGUI स्थापित करें और चलाएं । आपको अपना ऑडियो-आउटपुट एप्लिकेशन देखना चाहिए और इसमें Playbackटैब के नीचे वॉल्यूम मीटर है । इसके आगे एक बटन होगा जिसमें दिखाया जाएगा कि यह नल आउटपुट पर चल रहा है । उस पर क्लिक करें और इसे अपने साधारण ऑडियो आउटपुट में बदलें, बिल्ट-इन ऑडियो एनालॉग स्टीरियो मेरे मामले में।

यहाँ एक स्क्रीनशॉट है जो आप देख रहे हैं:

स्क्रीनशॉट

load-moduleसिंक बनाने के लिए @ Waschtl के उत्तर में कमांड चलाने के बाद, आप भविष्य में अपनी रिकॉर्डिंग सेट करने के लिए भी इस दृष्टिकोण का उपयोग कर सकते हैं ।


यदि आप कर सकते हैं, Imgur में एक स्क्रीन-शॉट अपलोड करें और इसे अपने उत्तर में लिंक करें।
लुसियो

मुझे नहीं पता कि यह संभव है, लेकिन मुझे लगता है कि सबसे अच्छा तरीका शून्य आउटपुट मॉड्यूल को अनलोड करना है, ताकि नए प्लेबैक डिफ़ॉल्ट रूप से इसे न
जैक

6

KrisWebDev के उत्तर में और सुधार करते हुए, यदि आप चाहते हैं कि रिकॉर्ड-एन-प्ले हमेशा उपलब्ध रहे, तो सबसे पहले डिफ़ॉल्ट सेटिंग का पता लगाएं:

pacmd list-sinks | grep -A1 "* index" | grep -oP "<\K[^ >]+"

जो कुछ इस तरह का उत्पादन करेगा:

alsa_output.pci-0000_00_1b.0.analog-stereo

अगला, एक फ़ाइल बनाएँ ~/.config/pulse/default.pa:

.include /etc/pulse/default.pa

load-module module-combine-sink sink_name=record-n-play slaves=alsa_output.pci-0000_00_1b.0.analog-stereo sink_properties=device.description="Record-and-Play"

कमांड alsa_output.pci-0000_00_1b.0.analog-stereoसे आपको जो भी आउटपुट मिला है, उसे बदल दें pacmd। पल्स डिफ़ॉल्ट कॉन्फिग फाइल को नहीं पढ़ता है जब एक कस्टम कॉन्फिग फाइल मौजूद है - इसीलिए ऊपर की पहली लाइन में डिफॉल्ट कॉन्फिग फाइल शामिल है। इस तरह pulseaudio अभी भी डिफ़ॉल्ट कॉन्फिगरेशन को पहले लोड करता है।

pulseaudio -kवर्तमान pulseaudio उदाहरण को मारने के लिए चलाएं ताकि नए कॉन्फ़िगरेशन के साथ एक नया शुरू हो।

यदि किसी भी समय आप यहां परिवर्तनों को पूर्ववत करना चाहते हैं, तो बस ~/.config/pulse/default.paफ़ाइल को निकालें और चलाएं pulseaudio -k

यदि आप चाहते हैं कि रिकॉर्ड-एन-प्ले सभी आउटपुट के लिए डिफ़ॉल्ट सिंक हो, तो आप ऐसा कर सकते हैं ~/.config/pulse/default.pa:

set-default-sink record-n-play

उन प्रोग्रामों के लिए जो पल्सीडियो पहले से ही जानकारी संग्रहीत करता है, यह याद रखता है कि जो भी आउटपुट डिवाइस उन्होंने पिछले उपयोग किया था, इसलिए आपको क्रिस्बडेव के उत्तर में वर्णित तरीकों में से एक का उपयोग करके मैन्युअल रूप से पुन: कॉन्फ़िगर करना होगा।


2

मैंने इस बाश स्क्रिप्ट को @Waschtl द्वारा उपलब्ध कराए गए उत्तरों और @KrisWebDev उत्तरों के आधार पर बनाया है।

यहां उपलब्ध: https://gist.github.com/ramast/4be3314bc73f28f55e36044971881800007

कैसे इस्तेमाल करे?

$ ./pulse-recorder.bash 
    index: 225
                application.name = "ALSA plug-in [mplayer]"
                module-stream-restore.id = "sink-input-by-application-name:ALSA plug-in [mplayer]"
Choose recording index: 225
temp.mp3 file already exist, replace (y/n)? y

नया संस्करण

मैंने एक पायथन स्क्रिप्ट बनाई है जो पुराने पर कुछ सुधार प्रदान करती है। https://gist.github.com/ramast/c47bd5e57586e9c2deb74975e27089f0

कैसे इस्तेमाल करे?

$ ./pulse-recorder.py 

1 - ALSA plug-in [mplayer]
2 - AudioIPC Server

Please enter a number: 1

Your selection was: ALSA plug-in [mplayer]
Please press enter when you are ready to start

जब आप एंटर करेंगे तो रिकॉर्डिंग तुरंत शुरू हो जाएगी। यदि तब तक जब आप प्रवेश करते हैं, तो एप्लिकेशन पहले से ही बंद था (यानी आपने उदाहरण के लिए mplayer को बंद कर दिया था) स्क्रिप्ट तब तक इंतजार करेगी जब तक ऐप फिर से दिखाई न दे और रिकॉर्डिंग शुरू न कर दे।

केवल उस स्क्रिप्ट पर वापस जाना (मूल एक बनाम) यह है कि यदि सूची में एक ही नाम वाली दो प्रविष्टियाँ हैं, तो स्क्रिप्ट सही तरीके से व्यवहार नहीं करेगी। उदाहरण के लिए

$ ./pulse-recorder.py                                                                                                      

1 - ALSA plug-in [mplayer]
2 - ALSA plug-in [mplayer]

इस मामले में कि आपके पास कई आउटपुट हैं (उदाहरण के लिए स्पीकर, कई हेडसेट, मॉनिटर ऑडियो), आप लाइन 21 को उदाहरण के साथ बदल सकते हैं: default_output = alsa_output.pci-0000_00_1b.0.analog-स्टीरियो जहां यह pacmd सूची के आउटपुट से है -संकट
smaudet
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.