我正在尝试使用 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"