Ubuntuで再生している音声を録音する方法

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」を指定します。

シェアする