当前位置: 首页>>技术教程>>正文


使用PulseAudio录制节目的输出

, , ,

问题描述

我想使用命令行/bash脚本使用PulseAudio记录程序的输出。重要的是不记录所有输出,而只记录一个特定程序的输出。

我想我必须创建一个新的null-sink,然后将程序的输出移动到这个新的接收器。告诉parec使用这个特定的监视器来记录。

第一步是这样的:

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

但是现在如何将程序的输出移动到这个接收器?以及如何使用bash脚本记录特定的接收器?

最佳解决方案

尝试这样的事情:

在终端输入

pacmd

(这是PulseAudio-Server的CLI)然后使用

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 -

说明:

  • 第一个命令将添加一个你已经知道的null-sink。

  • 第二个命令将sink-input从standard-audio-sink移动到steam

  • 第三个命令记录设备steam的监视器(-d)并将输出(raw-wave-stream)放入oggenc,后者将此wave-stream编码为oga-file。 (对于mp3使用跛脚)

次佳解决方案

改进此线程的Waschtl answer,以便您可以同时听到并记录应用声音:

首先,我们查找默认输出并将其接收器名称放在$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

然后,我们创建一个只有一个slave的combined sink:$ DEFAULT_OUTPUT。应用程序(源)生成的声音将被转发到从属接收器(即实际输出),我们也会记录它。它与不转发源声音的null sink不同。

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

sink_properties是可选的,如果在描述名称中使用空格,则可能会出错。

然后,我们可以使用Waschtl answerpactl move-sink-input ...命令(用record-n-play代替蒸汽),但GUI pavucontrol更简单(非常适合检查/故障排除):

$ sudo apt-get install pavucontrol
$ pavucontrol &

然后,我们在想要录制的应用程序中播放一些声音。在pavucontrol Playback选项卡中,我们在应用程序下拉列表中选择:”Record-and-Play”。

最后,我们很高兴同时录制和收听! (lame mp3示例,在前台运行)

$ 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

注意:

  • 要取消所有操作或重试该过程:使用this answer删除或重置接收器。 pulseaudio -k非常适合将所有内容重置为会话的默认值。

  • 如果我们更改系统声音设置中的默认输出,将覆盖自定义应用程序播放设置,我们将不得不返回pavucontrol将其设置回组合界面。

  • 为了能够收听来自多个”real”接口(例如耳机,HDMI输出等)的声音,我们应该包括我们可能用来收听的所有”real”输出,如record-n-play slink slaves,如:pactl load-module module-combine-sink sink_name=record-n-play slaves=real-output-1,real-output-2

编辑:小心,因为Ubuntu 18(也许17个),组合接收器往往成为默认的系统输出设备,而不是真正的输出设备。因此,当您使用系统托盘中的声音图标更改音量时,它会影响您的录音。解决方法:创建组合接收器后,在“输出”选项卡中打开pavucontrol。选择“查看:虚拟输出设备”并将组合接收器的音量重置为100%。然后选择“查看:硬件输出设备”并在实际输出设备上按绿色图标“定义为替代”。

第三种解决方案

@ Waschtl的回答太棒了。 @ixtmixilix询问有关在录制结束后恢复常规音频的问题。这是我所知道的最简单的方法:

安装并运行pavucontrol GUI。您应该在那里的Playback标签下看到您的audio-outputting应用程序及其体积计。它旁边会有一个按钮,显示它正在Null Output上播放。点击它并将其更改为您的普通音频输出,Built-in音频模拟立体声。

这是您正在寻找的截图:

scripts,pulseaudio,audio-recording,ubuntu

在@ Waschtl创建接收器的答案中运行load-module命令之后,您还可以使用此方法来设置录制。

第四种方案

进一步改进KrisWebDev的答案,如果你想让record-n-play始终可用,首先找出默认输出:

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命令获得的任何输出。当自定义配置文件存在时,Pulse不会读取默认配置文件 – 这就是上面第一行包含默认配置文件的原因。这样,pulseaudio仍然首先加载默认配置。

运行pulseaudio -k以终止当前的pulseaudio实例,以便使用新配置启动新的实例。

如果您想在此处撤消更改,只需删除~/.config/pulse/default.pa文件并运行pulseaudio -k

如果您希望record-n-play成为所有输出的默认接收器,您可以通过在~/.config/pulse/default.pa的末尾添加另一行来实现:

set-default-sink record-n-play

对于pulseaudio已存储信息的程序,它会记住他们最后使用的输出设备,因此您必须使用KrisWebDev的答案中描述的方法之一手动重新配置它们。

第五种方案

我根据@Waschtl和@KrisWebDev答案提供的答案创建了这个bash脚本。

可在此处获取:https://gist.github.com/ramast/4be3314bc73f28f55e3604497188b007

如何使用?

$ ./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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1850.html,未经允许,请勿转载。