Ahm*_*mad 14 linux command-line audio-recording
我想将音频输出录制到 mp3 文件中。我可以在 Ubuntu Linux 终端中使用哪些工具和命令?
Pou*_*ash 14
其他答案建议使用以下工具:sox、arecord和parec。此外,PipeWire用户可以使用pw-cat,尽管其他工具也可与 PipeWire 配合使用。它们都可以简单地调用:
arecordarecord --format=cd file.wav
Run Code Online (Sandbox Code Playgroud)
.wav它默认保存。如果您没有指定合适的格式,则默认音频质量很差。我喜欢这个程序的一个功能是它漂亮的 vumometer 图形输出。它还支持动态输出文件命名(通过小时、分钟、天...)。不幸的是,它不能输出到 ogg 或 mp3。
soxrec file.ext
Run Code Online (Sandbox Code Playgroud)
该程序当前不支持 zsh 补全。它在图形输出中显示一个仪表,但也显示其他信息。它支持mp3和ogg。
pacatparecord file.ext
Run Code Online (Sandbox Code Playgroud)
它支持mp3和ogg。但它无法在图形输出中显示仪表。
pw-catpw-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)
首先,您需要提取输出设备的名称:
为此,您可以安装以下数据包:
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 手册页。
您可以用于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 文件转换为您选择的格式: