オーディオの出力を 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秒後に何も受信されない場合は録音が停止します。 の詳細については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"