Linux のコマンド ラインからオーディオ出力を録音するにはどうすればよいですか?

Linux のコマンド ラインからオーディオ出力を録音するにはどうすればよいですか?

オーディオの出力を MP3 ファイルに録音したいのですが、Ubuntu Linux ターミナルではどのようなツールとコマンドを使用できますか?

答え1

sox他の回答では、、、arecordおよび以下のツールが提案されていますparec。さらに、パイプワイヤーユーザーは を使用できます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

PipeWire 用です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秒後に何も受信されない場合は録音が停止します。 の詳細についてはsoxLinux のマニュアルページ

答え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

デフォルトのオーディオソースを設定する

を提供しない場合は--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 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"

関連情報