Come registrare le videochiamate Skype su Linux?


28

Mi piacerebbe condurre interviste video registrate con Skype e sto cercando uno strumento affidabile per farlo.

C'è qualcosa là fuori che non è lento o difettoso?

Sto eseguendo (K) Ubuntu.


hai provato gtk-recordmydesktop? posso registrare quasi tutto con esso. ffmpeg -i funziona anche x11grab. se hai problemi a far funzionare l'audio alsa-loop.
RobotHumans,

Prova a chiedere a askubuntu.com .
Adam Byrtek,

Risposte:


11

Esiste il software recordMyDesktop http://recordmydesktop.sourceforge.net/about.php che puoi registrare qualsiasi parte dello schermo che desideri. Lo uso per registrare le mie sessioni di skype.

sudo apt-get install recordmydesktop

per installarlo dai canali principali.


L'ho usato mentre indossavo un auricolare e registrava l'audio dell'altra parte. Immagino che stesse registrando l'audio dal microfono predefinito (quindi stava catturando la mia voce ma non quella dell'interlocutore). Qualche idea su come risolverlo?
Marco Junius Bruto

11

Questo comando acquisirà il tuo desktop completo: usa questo comando ogni volta che vuoi registrare la conversazione su skype (o qualsiasi altra cosa)

ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg   

1
Grazie! Come posso registrare solo finestre specifiche, ad esempio la finestra della mia webcam e la finestra dell'altra persona? Forse anche come registrarli separatamente per rendere più semplice la modifica.
curioso

1
@curiousguy, per registrare una finestra specifica con recordmydesktop, utilizzare "xwininfo" per ottenere l'id della finestra, quindi con recordmydesktop utilizzare il parametro "--windowid". Se vuoi ridimensionare la tua finestra ad una dimensione specifica (in pixel) ci sono diversi modi per farlo - credo che Compiz abbia questa opzione, anche Openbox ti dirà le dimensioni della finestra. (Sto usando Fedora.) Inoltre credo che Openbox ti permetta di "non decorare" una finestra, il che è utile se recordmydesktop sta registrando il bordo della finestra. Tuttavia, non sono sicuro che questo sia possibile con ffmpeg?
PJ Brunet,

Come si compila con x11grab abilitato sotto Ubuntu? Di quale pacchetto ha bisogno?
v010dya,

8

sfondo

Registrare video e audio dal vivo durante una chiamata (o durante qualsiasi attività del desktop X11) non è molto difficile grazie a ffmpeg e alla quantità di articoli di aiuto disponibili (incluso questo sito). Tuttavia, se miri a una qualità superiore, raggiungerai rapidamente i limiti del semplice approccio di acquisizione e compressione simultanea dei media. Da qui la necessità di uno strumento (o una serie di strumenti) che consentirebbe di:

  1. Registra le chiamate senza compressione in un file per ulteriori elaborazioni, riconoscendo che quando si chiama un telefono ci interessa solo l'audio.
  2. Comprimere le chiamate registrate in alta qualità in un secondo momento.

I seguenti script Bash ( myrec, myrec-novideoe myproc) sono il mio tentativo di questo compito. Sono sicuro che ci sono modi più nitidi per scrivere questi script, ma stavo imparando lo scripting Bash in viaggio (con enorme soddisfazione una volta che l'ho fatto funzionare, potrei aggiungere).

Prerequisiti

  1. ffmpeg
  2. pulseaudio
  3. skype

Se 1o 2non sono presenti nel tuo sistema, installali con il tuo gestore pacchetti preferito (io uso synaptic). Per skypevisitare www.skype.com .


Registra video senza perdita e audio senza perdita - myrec

  1. Crea un file di testo
  2. Salvalo come myrec(o come si chiama per te)
  3. Rendi myreceseguibile eseguendo il comando:chmod +x myrec
  4. Incolla il seguente codice e modifica la User settingssezione in base alla tua configurazione:

#!/bin/bash

echo "Record lossless audio and lossless video for further processing."
echo "Created file name always starts with temp_YYYYMMDD_HHMMSS."
echo "Syntax:"
echo "myrec [optional file description]"
echo "Optional file description is appended to the file name, with spaces replaced by underscores."
echo
echo

### User settings - adjust values to suit your system and needs

# I used to have the name of my webcam mic here, but that stopped working after a system update. "default" was the only fix I found. If you have more than one microphone connected, you may need to tell Pulseaudio which mic you want to be the default, I think pavucontrol is the utility for it.
# If you want to try supplying a name here, run pacmd, then within it the command list-sources will give you a list of possible microphones. Use the name field value without angle brackets.
microphone_audio_device="default"

# Run pacmd, within it the command list-sinks will give you a list of devices to choose from. Use the name field value without angle brackets.
speakers_audio_device="alsa_output.pci-0000_00_1b.0.analog-stereo.monitor"

# Select frame size.
# Some standard frame sizes for reference:
# wvga 852x480
# wxga 1366x768
# wsxga 1600x1024
# wuxga 1920x1200
# woxga 2560x1600
# wqsxga 3200x2048
# wquxga 3840x2400
# whsxga 6400x4096
# whuxga 7680x4800
frame_size="wsxga"

# Framerate in frames per second
framerate="30"

# Indicate which screen the video should be recorded from and an optional offset.
# For example:
# :0.0+10,20
# where 0.0 is display.screen number of your X11 server, same as the DISPLAY environment variable. 10 is the x-offset and 20 the y-offset of the frame, measured from the top left corner of the screen to the top left corner of the frame.
frame_position=":0.0"

# Include the trailing slash after target directory name.
# Expect a very large file!
target_directory="/target/directory/name/"

### End of user settings



record_command="ffmpeg -f pulse -thread_queue_size 512k -i $speakers_audio_device -f pulse -thread_queue_size 512k -i $microphone_audio_device -f x11grab -s $frame_size -r $framerate -thread_queue_size 512k -i $frame_position -map 0 -map 1 -map 2 -codec:a copy -codec:v libx264 -qp 0 -preset ultrafast"
temporary_file_prefix="temp_"

# The IFS (Internal Field Separator) system variable stores the character that separates command line arguments.
# We can use it to replace spaces with underscores.
temp=$IFS
IFS='_'
description="$*"
IFS=$temp

if [ $# -eq 0 ]; then
  $record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`.mkv
else
  $record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`_$description.mkv
fi

La registrazione solo dell'audio è gestita da uno script separato nella sezione seguente.


Registra solo audio senza perdita - myrec-novideo

  1. Crea un file di testo
  2. Salvalo come myrec-novideo(o come si chiama per te)
  3. Rendi myrec-novideoeseguibile eseguendo il comando:chmod +x myrec-novideo
  4. Incolla il seguente codice e modifica la User settingssezione in base alla tua configurazione:

#!/bin/bash

echo "Record lossless audio for further processing."
echo "Created file name always starts with temp_YYYYMMDD_HHMMSS."
echo "Syntax:"
echo "myrec-novideo [optional file description]"
echo "Optional file description is appended to the file name, with spaces replaced by underscores."
echo
echo


### User settings - adjust values to suit your system

# I used to have the name of my webcam mic here, but that stopped working after a system update. "default" was the only fix I found. If you have more than one microphone connected, you may need to tell Pulseaudio which mic you want to be the default, I think pavucontrol is the utility for it.
# If you want to try supplying a name here, run pacmd, then within it the command list-sources will give you a list of possible microphones. Use the name field value without angle brackets.
microphone_audio_device="default"

# Run pacmd, within it the command list-sinks will give you a list of devices to choose from. Use the name field value without angle brackets.
speakers_audio_device="alsa_output.pci-0000_00_1b.0.analog-stereo.monitor"

# Include the trailing slash after target directory name.
# Expect a large file!
target_directory="/target/directory/name/"

### End of user settings



record_command="ffmpeg -f pulse -thread_queue_size 512k -i $speakers_audio_device -f pulse -thread_queue_size 512k -i $microphone_audio_device -map 0 -map 1 -codec:a copy -codec:a copy"
temporary_file_prefix="temp_"

# The IFS (Internal Field Separator) system variable stores the character that separates command line arguments.
# We can use it to replace spaces with underscores.
temp=$IFS
IFS='_'
description="$*"
IFS=$temp

if [ $# -eq 0 ]; then
  $record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`.mkv
else
  $record_command $target_directory$temporary_file_prefix`date +%Y%m%d_%H%M%S`_$description.mkv
fi


Elabora i file registrati - myproc

  1. Crea un file di testo
  2. Salvalo come myproc(o come si chiama per te)
  3. Rendi myproceseguibile eseguendo il comando:chmod +x myproc
  4. Incolla il seguente codice e modifica la User settingssezione in base alla tua configurazione:


#!/bin/bash

echo "Compress files recorded with myrec or myrec-novideo."
echo "For files to be processed they need to reside in the storage directory and start with temp_"
echo "The two audio tracks (mic and speakers) are mixed together into one new stream, but they are also available as separate tracks in the final file."

# Mixing is because players I know cannot play two audio tracks from the same file simultaneously.
# The mic also captures sounds produced by the speakers. It has two effects:
# 1. You can use this single track to hear both yourself (the mic) and whatever came out of your speakers. Personally I did not like the degraded quality of recorded speaker sounds, hence the direct recording off the sound card and mixing that with the mic track.
# 2. Speaker sounds recorded by the mic are slightly delayed when compared to the direct recording off the sound card. The mixed track is thus hard to listen to.
# I do have echo cancellation module loaded in Pulseaudio, perhaps there is something wrong with my configuration?

### User settings

# Indicate storage directory without the trailing slash
storage_directory="/storage/directory/name"

### End of user settings

# Any temp_ file may contain 3 streams (audio, audio, video) indexed as (0, 1, 2), or just 2 streams (audio, audio) indexed as (0, 1).
# A file temp2_ contains just one stream: both audio streams from temp_ mixed.
# The step with temp2_ is necessary as the mixing option (-filter_complex) is a global option (i.e. not stream-specific). Attempts at doing it all in one go prevent the separate tracks from being copied into the final file.

for f in $storage_directory/temp_*
do
  if [ -e ${f/temp_/} ]
  then
    # Do not overwrite an existing final file. Prevents unnecessary work when the script is run regularly as a cron job.
    echo "$f: A final file (without temp_) already exists. Skipping. If you want to reencode, please delete the final file manually."
  else
    # Variable g will contain the name of the second temporary file with both audio streams mixed into one.
    g=${f/temp_/temp2_}

    # Mixing mic and sound card tracks into one stream
    ffmpeg -i "$f" -map 0:0 -map 0:1 -filter_complex amix=inputs=2:duration=longest:dropout_transition=2 -codec:a libvorbis -n "$g"

    # Create the final file: copy the mixed audio stream from temp2_, add and compress both separate audio streams from temp_, compress at high quality the video stream from temp_.
    # The question mark in -map 0:2? tells ffmpeg to ignore the error if this stream (video) is missing. Allows this same script to be used for audio-only recordings.
    ffmpeg -i "$f" -i "$g" -map 1:0 -map 0:0 -map 0:1 -map 0:2? -codec:a:0 copy -codec:a:1 libvorbis -codec:a:2 libvorbis -codec:v libx264 -qp 18 -preset slow -threads 0 -n "${g/temp2_/}"

    # Delete temp2_
    rm "$g"
  fi
done


Grazie alla ffmpegflessibilità, è in myprocgrado di elaborare file che possono contenere o meno il flusso video.


Come usare gli script

  1. Decidi dove verrà visualizzata la finestra della videochiamata di Skype sullo schermo e imposta le dimensioni della finestra sulla dimensione desiderata. Skype ricorderà questa impostazione della finestra, quindi devi farlo una sola volta. Ad ogni chiamata successiva la finestra apparirà nella stessa posizione nella stessa dimensione. Ricorda di dire myrecdelle tue impostazioni. In generale, prova ad avere la finestra della videochiamata da qualche parte vicino alla tua webcam, in modo che la persona dall'altra parte abbia la possibilità di pensare che le stai guardando negli occhi.
  2. Tieni aperta una finestra del terminale. Ogni volta che si desidera avviare la registrazione, utilizzare il comando:

    • per registrare audio e video: . myrec some description
    • per registrare solo l'audio: . myrec-novideo some description

    some descriptionè facoltativo in entrambi gli script. È possibile utilizzare la Tabchiave per espandere i nomi degli script per salvare un po 'di battitura. ffmpeginizierà la registrazione su un file denominato temp_YYYYMMDD_HHMMSS_some_description.mkv, dove YYYYMMDD_HHMMSSsono la data e l'ora della registrazione.

  3. Premere qnella finestra del terminale in cui ffmpegè in corso la registrazione quando si è pronti per interrompere.
  4. Esegui . myprocper elaborare (comprimere) i file. Puoi farlo manualmente o impostare un cronlavoro per farlo mentre sei via.
  5. Dopo aver verificato che la compressione è andata come previsto, eliminare il temp_file.


Problemi

  1. Impossibile specificare il microfono per nome, è possibile utilizzare solo il valore speciale default. Avevo il nome del microfono lì, ma questa impostazione ha smesso di funzionare dopo un aggiornamento del sistema. Potrebbe essere qualcosa limitato alla mia configurazione o a pulseaudio.
  2. L'audio del microfono contiene la mia voce e il suono degli altoparlanti. Il suono dagli altoparlanti è leggermente dietro il flusso audio registrato direttamente dalla scheda audio. PulseIl modulo di cancellazione dell'eco è caricato, ma penso che abbia lo scopo di cancellare solo la mia eco vocale. Il fatto è che quando l'audio del microfono viene miscelato con l'audio della scheda audio, il leggero ritardo rende difficile ascoltare il flusso risultante. Qualcuno ha idea di come impedire al microfono di registrare i suoni dagli altoparlanti?


Note finali

Spero che questi strumenti ti siano utili. Non vedo l'ora di sentire i tuoi pensieri per miglioramenti e commenti.


2
Wow. Potresti voler avviare un account Git se non ne hai uno e mantenere anche questi script lì.
RobertL,

Caro Xavras, ho corretto tutte le impostazioni dell'utente e ho cambiato il prefisso del file temporaneo e gli esclusi i secondi dal formato del file. Quando eseguo lo script viene visualizzato l'errore "... ~ / Desktop / sky_20160506_12-10h.mkv: nessun file o directory del genere" La creazione anticipata del file o l'esecuzione come root non aiuta. Perché potrebbe essere?
superAnnoyingUser

Ciao @Student, potresti averlo risolto ormai, ma ho ricevuto una notifica sul tuo commento solo oggi. Guardando l'errore che hai citato, penso che la tilde (~) non sia stata risolta nel suo percorso appropriato. Prova a fornire il percorso nella sua forma completa, come / home / studente /. Hai riscontrato un problema nello script di registrazione o elaborazione?
Xavras Wyzryn il

4

Open Broadcaster Software (OBS) Studio lega tutti questi requisiti in un frontend facile da usare.

È open source e multipiattaforma:

Per Ubuntu 15.04 e versioni successive:

sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt-get update && sudo apt-get install obs-studio ffmpeg

Per altre distro / versioni precedenti di Ubuntu, controlla il wiki di git


0

xvidcap ti consente di selezionare un'area dal desktop e registrarla. Inizia con il comando

xvidcap

trova il tuo video su ./test-0000.mpeg per impostazione predefinita.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.