Ubuntuで再生している音声を録音する方法
Ubuntuで再生している音声を録音したくて色々と調べたものを忘れないようまとめました。
今回は下記の方法で録音を行っています。
- ALSAループバックデイバイスを使用
- ffmpegを使用して録音録音形式はwav
- wavからmp3へ変換
この方法では音声をループバックデバイスに出力しているので、音声を聞きながら録音することができません。
録音環境
録音を行ったOS情報です。
今回はノートPCにインストールしたUbuntu Desktopを使用して録音を行いました。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 21.10 Release: 21.10 Codename: impish
snd_aloopカーネルモジュールを読み込む
ALSAループバックモジュールを使用するためには、snd_aloopモジュールをカーネルに読み込む必要があります。
snd_aloopモジュールを読み込む前に、現在認識されているサウンドモジュールを確認しても、Loopbackモジュールは存在していません。
$ cat /proc/asound/modules 0 snd_hda_intel 1 snd_usb_audio
UbuntuのGUIデスクトップから、「設定」-「サウンド」で出力デバイスを確認してもLoopbackデバイスは確認できません。
snd_aloopモジュール読込
ループバックデバイスを使用できるようにするため、カーネルモジュール「snd_aloop」を「modprobe」コマンドで読み込ませます。
この方法で読み込ませたカーネルモジュールは、OSを再起動すると読み込み前の状態にもどるため、使用するたびに読み込ませる必要があります。
$ sudo modprobe snd-aloop
「/proc/asound/modules」を確認するとsnd_aloopが存在しました。
$ cat /proc/asound/modules 0 snd_hda_intel 1 snd_usb_audio 2 snd_aloop
Ubuntuの「設定」-「サウンド」で出力デバイスを確認すると、Loopbackデバイス(Analog Output -内部オーディオ)が存在していることが確認できました。
Loopbackデバイスに音声を出力させて録音を行うので、出力先デバイスを「Analog Output -内部オーディオ」に設定してください。
録音に使用できるカードの確認
「arecord -l」コマンドで録音に使用できるサウンドカードとオーディオデバイスの一覧を表示することができます。
「snd-aloop」モジュールを読み込んだ後に、「arecord -l」コマンドを実行するとLoopbackが追加されていることが確認できます。
私の環境ではカード2としてLoopbackデバイスが認識されていました。
$ arecord -l **** ハードウェアデバイス CAPTURE のリスト **** カード 0: PCH [HDA Intel PCH], デバイス 0: CX20590 Analog [CX20590 Analog] サブデバイス: 1/1 サブデバイス #0: subdevice #0 カード 2: Loopback [Loopback], デバイス 0: Loopback PCM [Loopback PCM] サブデバイス: 7/8 サブデバイス #0: subdevice #0 サブデバイス #1: subdevice #1 サブデバイス #2: subdevice #2 サブデバイス #3: subdevice #3 サブデバイス #4: subdevice #4 サブデバイス #5: subdevice #5 サブデバイス #6: subdevice #6 サブデバイス #7: subdevice #7 カード 2: Loopback [Loopback], デバイス 1: Loopback PCM [Loopback PCM] サブデバイス: 8/8 サブデバイス #0: subdevice #0 サブデバイス #1: subdevice #1 サブデバイス #2: subdevice #2 サブデバイス #3: subdevice #3 サブデバイス #4: subdevice #4 サブデバイス #5: subdevice #5 サブデバイス #6: subdevice #6 サブデバイス #7: subdevice #7
Loopbackのカードにはデバイス0とデバイス1がありますが、それぞれデバイス毎に使用用途が異なります。
- デバイス0: 再生用
- デバイス1: 録音用
ffmpegで録音
Ubuntuで音声を再生しLoopbackデバイスに出力したものを、ffmepgを使用してwav形式で録音を下記コマンドで行います。
このコマンドは、Loopbackデバイスに出力されている音声を30秒間録音とするというコマンドになります。
$ ffmpeg -f alsa -ac 2 -ar 44100 -i hw:Loopback,1,0 -t 30 out.wav
オプションの説明
使用しているオプションの説明です。
- -f 出力するフォーマット alsaはALSA audio output
- -ac 音声のチャンネル数 1:モノラル 2:ステレオ
- -ar サンプリングレート
- -i 入力ファイル
- -t 変換する秒数
-i オプションについて
-i オプションで設定する入力ファイルには、音声の出力先として設定したLoopbackデバイスを下記の書式で指定します。
hw:カード番号(名前),x,y
- カード番号(名前):録音に使用するデバイスのカード番号か名前を指定
- x: デバイスID 録音用デバイスである1を指定
- y: サブデバイスID 0を指定
カード番号の部分はカード名でも指定できるので、指定しているカードがわかりやすいのでLoopbackとしてます。
wav形式からmp3形式へ変換
wav形式のままだとファイルサイズが大きいので、ffmpegを使用してwav形式からmp3形式に変換する方法です。
$ ffmpeg -i "out.wav" -vn -ac 2 -ar 44100 -ab 256k -acodec libmp3lame -f mp3 "out.mp3"
指定しているオプションの説明です
- -vn 映像なし出力
- -ab ビットレート
- -acodec 音声コーデック
mp3の音声コーデックには「libmp3lame」を指定します。
コメント