我想將音訊輸出錄製到 mp3 檔案中。我可以在 Ubuntu Linux 終端機中使用哪些工具和命令?
答案1
其他答案建議使用以下工具:sox
、arecord
和parec
。此外,管材線材使用者可以使用pw-cat
,儘管其他工具也可以與 PipeWire 搭配使用。它們都可以簡單地調用:
arecord
arecord --format=cd file.wav
.wav
它預設保存。如果您沒有指定合適的格式,則預設音訊品質很差。我喜歡這個程式的一個功能是它漂亮的 vumometer 圖形輸出。它還支援動態輸出檔案命名(透過小時、分鐘、天...)。不幸的是,它不能輸出到 ogg 或 mp3。
sox
rec file.ext
該程式目前不支援 zsh 補全。它在圖形輸出中顯示一個儀表,但也顯示其他資訊。它支援mp3和ogg。
pacat
parecord file.ext
它支援mp3和ogg。但它無法在圖形輸出中顯示儀表。
pw-cat
pw-record file.ext
這是pacat
用於管道線的。它支援 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
which 是 的快捷方式--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"