11

What is a good piece of software for recording calls? I am not just talking about Skype but Facebook calls, Google Hangouts, Meet, everything.

I have been using Simple Screen Recorder but that only records their side of the conversation. Kazaam does the same, it only records their side. I can never get Audacity to do it either, there are too many channel combination settings [upwards of 60 on my machine].

Is there a simple software package which records both sides of the conversation?

Raffa
  • 34,963
C26
  • 151

2 Answers2

12

Record directly

From command-line with ffmpeg

  • You can record and merge both desktop and microphone audio with ffmpeg like so:

    ffmpeg -f pulse -i alsa_output.pci-0000_00_1f.3.analog-stereo.monitor -i <(arecord -f CD) -filter_complex amix -acodec libmp3lame "$(date +%d_%m_%y__%H_%M_%S)".mp3
    

    Change alsa_output.pci-0000_00_1f.3.analog-stereo.monitor to your .monitor device as it appears after running this command:

    pacmd list-sources | grep ".monitor"
    

    Which will output something like this:

    name: <alsa_output.pci-0000_00_1f.3.analog-stereo.monitor>
    monitor_of: 0
        device.class = "monitor"
    

    Your device is the one after name: without < and >.

    Alternatively, you can have your .monitor device automatically detected like so:

    ffmpeg -f pulse -i "$(awk '$2~/.monitor$/ {print $2; exit;}' <(pactl list short sources))" -i <(arecord -f CD) -filter_complex amix -acodec libmp3lame "$(date +%d_%m_%y__%H_%M_%S)".mp3
    

    Your recording will be saved in the same directory you run the command from and will look like 20_02_21__21_27_21.mp3 with start date and time in the file name like Day_Month_Year__Hour_Minute_Second.mp3.

From GUI with OBS Studio

OBS Studio is a free and open source software that allows for capturing multiple streams at once and provides:

High performance real time video/audio capturing and mixing. Create scenes made up of multiple sources including window captures, images, text, browser windows, webcams, capture cards and more.

OBS Studio supports installation on Ubuntu and has extensive help and documentation. Guides and tutorials are also abundantly available on YouTube.

OBS Studio is also available for install from snap like so:

sudo snap install obs-studio

From GUI with vokoscreenNG

vokoscreenNG is an easy to use screencast creator to record educational videos, live recordings of browser, installation, videoconferences, etc.

vokoscreenNG is available for install from snap like so:

sudo snap install vokoscreen-ng

Route and mix

With simplicity

  1. Play your microphone through your speakers like so:

    aplay <(arecord -f cd)
    
  2. Record your speakers or desktop audio with your favorite audio or screen recorder or with command-line from a second terminal like so:

    parec -d alsa_output.pci-0000_00_1f.3.analog-stereo.monitor --file-format=wav "$(date +%d_%m_%y__%H_%M_%S)".wav
    

    Or to reduce file size, use it with an encoder that is installed on your system ... lame for example, like so:

    lame -r -V0 <(parec -d alsa_output.pci-0000_00_1f.3.analog-stereo.monitor) "$(date +%d_%m_%y__%H_%M_%S)".mp3
    

    Change alsa_output.pci-0000_00_1f.3.analog-stereo.monitor to your .monitor device as it appears after running this command:

    pacmd list-sources | grep ".monitor"
    

    Which will output something like this:

    name: <alsa_output.pci-0000_00_1f.3.analog-stereo.monitor>
    monitor_of: 0
        device.class = "monitor"
    

    Your device is the one after name: without < and >.

    Alternatively, you can have your .monitor device automatically detected like so:

    parec -d "$(awk '$2~/.monitor$/ {print $2; exit;}' <(pactl list short sources))" --file-format=wav "$(date +%d_%m_%y__%H_%M_%S)".wav
    

    and so:

    lame -r -V0 <(parec -d "$(awk '$2~/.monitor$/ {print $2; exit;}' <(pactl list short sources))") "$(date +%d_%m_%y__%H_%M_%S)".mp3
    

    Your recording will be saved in the same directory you run the command from and will look like 20_02_21__21_27_21.wav with start date and time in the file name like Day_Month_Year__Hour_Minute_Second.wav.

With PulseAudio

  1. Load pulseaudio's module-loopback like so:

    pactl load-module module-loopback
    
  2. Run pavucontrol like so:

    pavucontrol
    
  3. Start recording with your favorite application like audacity for example.

  4. In pavucontrol's UI and under recording tab select Capture from [ Monitor ... ] next to your recording application like so:

    screenshot

With JACK Audio Connection Kit

  1. Install JACK and required additions like so:

    sudo apt install qjackctl pulseaudio-module-jack
    
  2. Choose NO when you see this:

    enter image description here

  3. Run JACK UI qjackctl from applications or from terminal like so:

    qjackctl
    
  4. Start JACK by clicking on the start button like so:

    enter image description here

  5. Reload pulseaudio like so:

    pulseaudio -k
    
  6. In JACK UI, click the Connect button and have your devices connected like so:

    enter image description here

  7. Run Audacity and select Edit -> Preferences -> Devices and configure it like this:

    enter image description here

  8. Start recording with Audacity.


Notice

  • You can install ffmpeg like so:

    sudo apt install ffmpeg
    
  • You can install lame MP3 encoding library like so:

    sudo apt install lame
    
  • You can unload module-loopback like so:

    pactl unload-module module-loopback
    
  • You can install pavucontrol like so:

    sudo apt install pavucontrol
    
  • After starting or stopping JACK reload pulseaudio like so:

    pulseaudio -k
    
  • For usability ease, you can save a command that works for you, for example this:

    ffmpeg -f pulse -i "$(awk '$2~/.monitor$/ {print $2; exit;}' <(pactl list short sources))" -i <(arecord -f CD) -filter_complex amix -acodec libmp3lame "$(date +%d_%m_%y__%H_%M_%S)".mp3
    

    in a file in your home directory, name the file record.sh and make it executable like so:

    chmod +x ~/record.sh
    

    then, you can add an alias like this:

    alias record='bash ~/record.sh'
    

    to your ~/.bashrc file so you can afterwords run the short command: `

    record
    

    from any directory and get the same result. You first need to close and reopen the terminal again to pick up changes to ~/.bashrc for this to work.

  • Here is extra information about arecord and aplay, parec, pacmd, lame, ffmpeg, module-loopback, pavucontrol, pactl and What is JACK.

Raffa
  • 34,963
3

It is quiet easy and quick with one command using a multimedia pipeline like GStream or FFmpeg/LibAV. Also it minimizes layers of complexity compared to other solutions.

Here is an example using FFmpeg.

  1. Check first for available Pulse sources

    $ pactl list short sources
    0    alsa_output.pci-0000_00_05.0.analog-stereo.monitor  module-alsa-card.c  s16le 2ch 48000Hz   SUSPENDED
    1    alsa_input.pci-0000_00_05.0.analog-stereo   module-alsa-card.c  s16le 2ch 44100Hz   SUSPENDED
    
  2. Use both as input for FFmpeg and pass them through a mix filter

    ffmpeg \
    -f pulse -i alsa_output.pci-0000_00_05.0.analog-stereo.monitor \
    -f pulse -i alsa_input.pci-0000_00_05.0.analog-stereo \
    -filter_complex amix=inputs=2 recordedfile.mp3
    

    I used shell line break \ for a clear code. otherwise it is a one-liner command. You may control volumes from Pulse control GUI.

Here reference with diagrams about FFmpeg mixer if you are not using stereo mic, flip to mono to minimize the file size.

Jack and Pulse pipelines are best when it comes to Live mixer, Not just recording as in Raffa's answer or my answer for another use-case.

user.dz
  • 49,176