如何在 Linux 中录制命令行输出的音频?

Ahm*_*mad 14 linux command-line audio-recording

我想将音频输出录制到 mp3 文件中。我可以在 Ubuntu Linux 终端中使用哪些工具和命令?

Pou*_*ash 14

其他答案建议使用以下工具:soxarecordparec。此外,PipeWire用户可以使用pw-cat,尽管其他工具也可与 PipeWire 配合使用。它们都可以简单地调用:

arecord

arecord --format=cd file.wav
Run Code Online (Sandbox Code Playgroud)

.wav它默认保存。如果您没有指定合适的格式,则默认音频质量很差。我喜欢这个程序的一个功能是它漂亮的 vumometer 图形输出。它还支持动态输出文件命名(通过小时、分钟、天...)。不幸的是,它不能输出到 ogg 或 mp3。


sox

rec file.ext
Run Code Online (Sandbox Code Playgroud)

该程序当前不支持 zsh 补全。它在图形输出中显示一个仪表,但也显示其他信息。它支持mp3和ogg。


pacat

parecord file.ext
Run Code Online (Sandbox Code Playgroud)

它支持mp3和ogg。但它无法在图形输出中显示仪表。


pw-cat

pw-record file.ext
Run Code Online (Sandbox Code Playgroud)

这是pacat用于管道线的。它支持 ogg 和 mp3 的自定义质量设置,但pacat不支持。它也没有计量图形输出。

要从不同的音频设备(例如耳机)进行录音,您可以使用此处列出的方法之一首先获取录音设备的名称。例如:

pw-cli list-objects | grep node.name
Run Code Online (Sandbox Code Playgroud)

假设这已经产生了“alsa_input.usb-Logitech_Wireless_Headset.mono”,然后我们使用该名称和选项--target

pw-record --target alsa_input.usb-Logitech_Wireless_Headset.mono file.wav
Run Code Online (Sandbox Code Playgroud)


Ahm*_*mad 5

首先,您需要提取输出设备的名称:

为此,您可以安装以下数据包:

sudo apt-get install pulseaudio-utils lame mpg123
Run Code Online (Sandbox Code Playgroud)

并运行:

pacmd list-sinks | grep -e 'name:' -e 'index' -e 'Speakers'
Run Code Online (Sandbox Code Playgroud)

输出可能是这样的:

index: 1
    name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
        analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: unknown)
index: 23
    name: <alsa_output.pci-0000_00_03.0.hdmi-surround71>
Run Code Online (Sandbox Code Playgroud)

找到名称后,您可以运行以下命令将输出记录到 mp3 文件:

parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | lame -r -V0 - out.mp3
Run Code Online (Sandbox Code Playgroud)

或者使用sox您可以执行以下操作,但是我发现第一个解决方案更强大:

sox -t pulseaudio alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -t mp3 test.mp3 
Run Code Online (Sandbox Code Playgroud)

但是,如果您想自动开始和停止录制,您可以运行:

parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -t raw -b 16 -e signed -c 2 -r 44100 - test.ogg silence 1 0.1 3% 1 3.0 3%
Run Code Online (Sandbox Code Playgroud)

当声音发送到扬声器时,它开始录音,如果 3 秒后没有收到任何声音,它就会停止。有关更多信息sox,请参阅其Linux 手册页


Mat*_*aun 5

您可以用于arecord此用途。

获取您可用的设备arecord -l。这将产生类似这样的结果:

card 0: PCH [HDA Intel PCH], device 0: CX20590 Analog [CX20590 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
Run Code Online (Sandbox Code Playgroud)

然后,要使用 USB 麦克风(卡 1,子设备 0)进行录音,例如:

arecord --device="hw:1,0" --format=s16_le --rate=48 rec_$(date "+%F_%H-%M-%S").wav
Run Code Online (Sandbox Code Playgroud)

还有-f cdwhich 是 的快捷方式--format=s16_le --rate=44100

设置默认音频源

当您不提供 时--device,将从默认arecord音频源录制。要显示当前默认源,请运行

pactl info | grep "Default Source"
Run Code Online (Sandbox Code Playgroud)

要使用最小文本菜单更改默认源,您可以使用fzf

pactl set-default-source $(pactl list short sources | cut -f2 | fzf)
Run Code Online (Sandbox Code Playgroud)

我发现这比查找卡和子设备索引更舒服。

一边录音一边听

同时收听音频设备并从中录音通常很有用。我们可以通过arecord写入标准输出-,然后通过管道将音频数据tee写入文件并将其传递到aplay

arecord -f cd - | tee rec.wav | aplay -
Run Code Online (Sandbox Code Playgroud)

文件转换

将 WAVE 文件转换为您选择的格式:

  • 转至MP3ffmpeg -i rec.wav rec.mp3
  • 奥格ffmpeg -i rec.wav rec.ogg
  • FLACflac rec.wav -o rec.flac