如何在 Linux 中錄製命令列輸出的音訊?

如何在 Linux 中錄製命令列輸出的音訊?

我想將音訊輸出錄製到 mp3 檔案中。我可以在 Ubuntu Linux 終端機中使用哪些工具和命令?

答案1

其他答案建議使用以下工具:soxarecordparec。此外,管材線材使用者可以使用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 cdwhich 是 的快捷方式--format=s16_le --rate=44100

設定預設音訊來源

當您不提供時--devicearecord將從預設音訊源。若要顯示目前預設來源,請執行

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 檔案轉換為您選擇的格式:

  • MP3:ffmpeg -i rec.wav rec.mp3
  • 奧格:ffmpeg -i rec.wav rec.ogg
  • FLAC:flac rec.wav -o rec.flac

答案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"

相關內容