ArchLinux下OBS捕获单应用音频的解决方案

起因

起因十分简单,我在几个月前转用ArchLinux作为主力系统使用,逐渐适应并喜爱上了Linux生态。然而Linux常常处于不被消费级软件重视的地位,这使得很多时候我们需要自己解决问题。比如我试图在Linux下直播我的游戏,但是同时我又要和朋友语音通话,为了不录入我自己和朋友的声音到直播中 社恐.gif 我开始按照Windows的思路试图捕获单个应用音频,此时我发现这项功能仅仅在Windows版本的OBS中进行测试,而Linux下是没有这个功能的,经过一番探索和交流,获得了两个比较泛用的方案。

环境

下面来介绍一下我的ArchLinux环境
N卡、最新系统、AMD的CPU等等,这些不需要提,也不相关的内容。桌面环境KDE,渲染用的X11,这些有一点关系,但不大。
音频系统Pipewire,这个很重要,因为本文仅针对Pipewire生效

方案

一共有两种方案,下面我来分别介绍一下。

我个人是比较推荐方案一的,两种方案各有优缺点,下面将详细说明。

方案一 OBS插件

使用Github开源的OBS插件obs-pipewire-audio-capture

这种方案的优点是配置简单,缺点则是可能随着某次音频驱动的更新,该方案失效,当然可能性微乎其微,同时插件肯定也会跟进更新,因此基本没有什么缺点。

环境需求

1. WirePlumber

ArchLinux下安装WirePlumber的命令

1
sudo pacman -S wireplumber

前提:安装了pipewire才建议使用此方案
ArchLinux安装pipewire的指令如下(可能不全)

1
pacman -S pipewire pipewire-pulse

2. OBS 28.0或更高版本

你可以直接使用pacman安装OBS

1
sudo pacman -S obs-studio

当然,如果是打算使用哔哩哔哩进行直播,又希望显示弹幕的话,多半会去安装弹幕工具,而弹幕工具一般需要添加浏览器来源。

推荐:安装使用浏览器插件进行编译的官方包。

1
yay -S obs-studio-git

不推荐:打包的支持浏览器插件集成的OBS
安装这个版本的话,编译可能要很久(大约10分钟)
这个版本将ffmpeg替换为了ffmpeg-obs,这可能导致很多问题,维护需要大量精力。

1
yay -S obs-studio-browser 

安装、使用插件

obs-pipewire-audio-capture仓库的发行版下载linux-pipewire-audio-[版本号].tar.gz文件
解压到OBS的插件目录,一般为 ~/.config/obs-studio/plugins/
解压后重启OBS或重启电脑,即可在OBS添加来源处看到可以添加的三个来源

这三个来源我们只需要使用第一个 应用音频捕获(PipeWire) 即可。

添加来源后,第一个选项 Match Priority 不需要修改,修改下方 Application 处,将需要捕获的应用加入。

如果发现找不到需要的那个应用,再尝试修改 Match Priority 的选项,这会改变获取应用的方式。

下面的可勾选项的效果为,录制除选中应用音频之外的全部音频(反选音频)。

至此,插件的安装和使用就介绍完毕了。

常见问题

最常见的问题就是程序并没有成功的录制应用音频了,此时请检查环境需求中的WirePlumber是否被成功安装?以及你的音频驱动是否是PipeWire。
如果发现没有存在这些问题,检查安装后是否重启过电脑?若没有则重启再尝试。

如果还是不行,请参考方案二。

方案二 音频跳线

这是一个比较麻烦的方法,这里不会详细介绍。
但我会对简单的使用方法进行说明。

首先,在OBS来源中添加 JACK 输入客户端 并勾选 启动 JACK 服务器
然后,安装类似 Helvum 的音频跳线软件,或通过其他方式进行音频跳线。

Helvum界面预览,一团糟 当然,这是因为我有独立声卡,外加配置了后期音频处理的结果。

将需要捕获的应用与 JACK输入 相连,此时OBS中 JACK 输入客户端 将捕获到被连接的应用音频。

缺点:每次需要手动配置,但可以通过开机执行一些指令,或添加一些配置文件来固化这个操作。
优点:没有其他解决方案时的万能解,紧急情况没有安装插件的救济措施,以及也许可能更低的音频延迟

总结

我个人还是推荐方案一,简单好用,也能够满足大部分情况了。
至于方案二,留作一个备用的应急解决方案好了,当然如果你有强烈的强迫症或者奇怪的精神洁癖,你可以考虑深入研究一下…