我想将音频输出录制到 mp3 文件。我可以在 Ubuntu Linux 终端中使用哪些工具和命令?
答案1
其他答案建议使用以下工具:sox
、arecord
和parec
。此外,PipeWire用户可以使用pw-cat
,尽管其他工具也可以与 PipeWire 配合使用。它们都可以通过以下方式调用:
arecord
arecord --format=cd file.wav
它默认保存.wav
。如果您没有指定合适的格式,默认音频质量很差。我喜欢这个程序的一个功能是它的 vumeter 图形输出很好。它还支持动态输出文件命名(通过小时、分钟、天...)。不幸的是,它不能输出为 ogg 或 mp3。
sox
rec file.ext
此程序目前不支持 zsh 补全。它在图形输出中显示一个仪表,但也显示其他信息。它支持 mp3 和 ogg。
pacat
parecord file.ext
它支持 mp3 和 ogg。但它无法在图形输出中显示仪表。
pw-cat
pw-record file.ext
它pacat
适用于 PipeWire。它支持 ogg 和 mp3 的自定义质量设置,而不pacat
支持。它也没有计量图形输出。
要从其他音频设备(例如耳机)录音,您可以使用列出的方法之一这里首先获取录音设备的名称。例如:
pw-cli list-objects | grep node.name
假设这产生了“alsa_input.usb-Logitech_Wireless_Headset.mono”,然后我们使用该名称和选项--target
:
pw-record --target alsa_input.usb-Logitech_Wireless_Headset.mono file.wav
答案2
首先,您需要提取输出设备的名称:
为此,您可以安装以下数据包:
sudo apt-get install pulseaudio-utils lame mpg123
然后运行:
pacmd list-sinks | grep -e 'name:' -e 'index' -e 'Speakers'
输出可能是这样的:
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>
找到名称后,您可以运行以下命令将输出录制到 mp3 文件:
parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | lame -r -V0 - out.mp3
或者sox
您可以执行以下操作,但我发现第一个解决方案更为强大:
sox -t pulseaudio alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -t mp3 test.mp3
但是,如果您想自动开始和停止录制,您可以运行:
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%
当声音发送到扬声器时,它会开始录音,如果 3 秒后没有收到任何内容,它会停止录音。有关 的更多信息sox
,请参阅其Linux 手册页。
答案3
您可以使用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
然后,要使用 USB 麦克风(卡 1、子设备 0)录音,例如:
arecord --device="hw:1,0" --format=s16_le --rate=48 rec_$(date "+%F_%H-%M-%S").wav
还有 ,-f cd
这是 的快捷方式--format=s16_le --rate=44100
。
设置默认音频源
当你不提供时--device
,arecord
将从默认音频源。要显示当前默认源,请运行
pactl info | grep "Default Source"
要使用最小文本菜单更改默认源,您可以使用fzf
:
pactl set-default-source $(pactl list short sources | cut -f2 | fzf)
我发现这比查找卡和子设备索引更舒服。
边录音边听
收听音频设备并同时录制音频通常很有用。我们可以通过使用arecord
标准输出写入来实现这-
一点,然后将音频数据传输到tee
将音频写入文件并将其传递给aplay
:
arecord -f cd - | tee rec.wav | aplay -
文件转换
将 WAVE 文件转换为您选择的格式:
答案4
感谢@Ahmad。这对我有用:
sox -e signed-integer -L -b16 -c2 -r44100 -t raw "|parec -d alsa_output.pci-0000_0c_00.4.iec958-stereo.monitor" -t mp3 -c2 -C 320.01 stream.mp3 silence 1 0.1 3% 1 3.0 3%
其中输入流参数可以通过以下方式查看pacmd list-sinks
:
name: <alsa_output.pci-0000_0c_00.4.iec958-stereo>
sample spec: s16le 2ch 44100Hz
properties:
alsa.resolution_bits = "16"