如何从应用程序录制音频

如何从应用程序录制音频

我正在尝试使用 ffmpeg 录制我的屏幕和扬声器的音频。这在我的装有 Ubuntu 18.04 的塔式电脑上运行良好,但在我的 ThinkPad 上却不起作用。

在塔式电脑上,使用https://trac.ffmpeg.org/wiki/Capture/Desktop(来自https://trac.ffmpeg.org/wiki/Capture/Desktop)。但如果我使用笔记本电脑,同样的命令会记录我麦克风的声音,这会导致音质严重下降。

arecord -l返回

arecord -l
**** Liste der Hardware-Geräte (CAPTURE) ****
Karte 3: PCH [HDA Intel PCH], Gerät 0: ALC3232 Analog [ALC3232 Analog]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0

aplay -l返回:

aplay -l
**** Liste der Hardware-Geräte (PLAYBACK) ****
Karte 2: HDMI [HDA Intel HDMI], Gerät 3: HDMI 0 [HDMI 0]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 2: HDMI [HDA Intel HDMI], Gerät 7: HDMI 1 [HDMI 1]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 2: HDMI [HDA Intel HDMI], Gerät 8: HDMI 2 [HDMI 2]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 2: HDMI [HDA Intel HDMI], Gerät 9: HDMI 3 [HDMI 3]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 2: HDMI [HDA Intel HDMI], Gerät 10: HDMI 4 [HDMI 4]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 3: PCH [HDA Intel PCH], Gerät 0: ALC3232 Analog [ALC3232 Analog]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0

尝试设置类似的输入ffmpeg -video_size 1368x768 -framerate 25 -f x11grab -i :0.0+0,0 -f alsa -i hw:0,0 -ac 2 output.mkv(所以hw:0,0在我看来应该是默认设备)会导致错误:

ALSA lib pcm_hw.c:1713:(_snd_pcm_hw_open) Invalid value for card
[alsa @ 0x55931414d3e0] cannot open audio device hw:0,0 (No such file or directory)

如果我使用https://trac.ffmpeg.org/wiki/Capture/ALSA#Recordaudiofromanapplication,所以叫sudo modprobe snd-aloop pcm_substreams=1,添加

# .asoundrc
pcm.!default { type plug slave.pcm "hw:Loopback,0,0" }

,将我的输出设备更改为/etc/asound.conf,以便通过设置 GUI 进行回送并运行,ffmpeg -f alsa -ac 2 -ar 44100 -i hw:Loopback,1,0 out.wav它可以完美地记录音频。但如果我运行ffmpeg -video_size 1368x768 -framerate 25 -f x11grab -i :0.0+0,0 -f alsa -ac 2 -ar 44100 -i hw:Loopback,1,0 output.mkv,它只会记录屏幕和一些非常罕见的小噪音。

有没有解决这个问题的方法,或者有没有其他方法来录制我的屏幕和音频?

答案1

我发现的一个解决方案是接受的答案使用 ffmpeg 仅捕获桌面音频:安装pavucontrol,使用 开始录制ffmpeg -video_size 1280x1024 -framerate 25 -f x11grab -i :0.0 -f pulse -vcodec mpeg2video -thread_queue_size 512 -ac 2 -t 02:00:00 -i default(或其他),转到pavucontrol,选择 录制 并将Lavf56.15.102(或其他)更改为Monitor of Internal Audio Analog Stereo。对我有用。

我会接受一个能够做到这一点而无需pavucontrol每次重启时更改记录的答案。

答案2

您可以在这里找到一个非常有用的答案:https://unix.stackexchange.com/a/489522

根据您的情况,翻译可能如下:

A="$(pacmd list-sources | grep -PB 1 "analog.*monitor>" | head -n 1 | perl -pe 's/.* //g')"
ffmpeg -video_size 1280x1024 -framerate 25 -f x11grab -i :0.0 -f pulse -vcodec mpeg2video -thread_queue_size 512 -ac 2 -t 02:00:00 -i "$A"

相关内容