Comment enregistrer des appels vidéo Skype sous Linux?

28

Je voudrais mener des interviews vidéo enregistrées avec Skype et je suis à la recherche d'un outil fiable pour y parvenir.

Y a-t-il quelque chose qui n'est pas lent ou buggé?

Je lance (K) Ubuntu.

curiousguy
la source
avez-vous essayé gtk-recordmydesktop? je peux enregistrer presque tout avec. ffmpeg -i x11grab fonctionne aussi. si vous rencontrez des problèmes pour que la boucle audio alsa fonctionne.
RobotHumans
Essayez de demander à askubuntu.com .
Adam Byrtek

Réponses:

11

Il existe un logiciel recordMyDesktop http://recordmydesktop.sourceforge.net/about.php que vous pouvez enregistrer n'importe quelle partie de l'écran que vous souhaitez. Je l'utilise pour enregistrer mes sessions skype.

sudo apt-get install recordmydesktop

pour l'installer à partir des canaux principaux.

Chris-Top
la source
Je l'ai utilisé tout en portant un casque et il enregistrerait l'audio de l'autre partie. Je suppose qu'il enregistrait de l'audio à partir du microphone par défaut (il capturait donc ma propre voix mais pas celle de l'autre partie). Une idée de comment résoudre ce problème?
Marcus Junius Brutus
11

Cette commande capturera votre bureau complet: utilisez donc cette commande chaque fois que vous voulez enregistrer une conversation skype (ou autre chose)

ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg   
SHW
la source
1
Merci! Comment enregistrer uniquement des fenêtres spécifiques, par exemple la fenêtre de ma webcam et celle de l'autre personne? Peut-être même comment les enregistrer séparément pour en faciliter l'édition.
curiousguy
1
@curiousguy, pour enregistrer une fenêtre spécifique avec recordmydesktop, utilisez "xwininfo" pour obtenir l'identifiant de la fenêtre, puis avec recordmydesktop utilisez le paramètre "--windowid". Si vous souhaitez mettre votre fenêtre à l'échelle à une taille spécifique (en pixels), il existe différentes façons de le faire - je crois que Compiz a cela en option, Openbox vous indiquera également les dimensions de la fenêtre. (J'utilise Fedora.) Je pense également qu'Openbox vous permettra de "décorer" une fenêtre, ce qui est utile si recordmydesktop enregistre la bordure de votre fenêtre. Cependant, je ne sais pas si cela est possible avec ffmpeg?
PJ Brunet
Comment compiler avec x11grab activé sous Ubuntu? De quel paquet a-t-il besoin?
v010dya
8

Contexte

L'enregistrement vidéo et audio en direct pendant un appel (ou pendant toute activité de bureau X11) n'est pas très difficile grâce à ffmpeg et à la quantité d'articles d'aide disponibles (y compris ce site). Cependant, si vous visez une qualité supérieure, vous atteindrez rapidement les limites de l'approche simple de capture et de compression simultanées de supports. D'où la nécessité d'un outil (ou d'un ensemble d'outils) qui permettrait:

  1. Enregistrez les appels sans compression dans un fichier pour un traitement ultérieur, en reconnaissant que lorsque vous appelez un téléphone, nous nous intéressons uniquement à l'audio.
  2. Compressez les appels enregistrés en haute qualité ultérieurement.

Les scripts Bash suivants ( myrec, myrec-novideoet myproc) sont ma tentative pour cette tâche. Je suis sûr qu'il existe des façons plus nettes d'écrire ces scripts, mais j'apprenais le script Bash sur le pouce (avec une immense satisfaction une fois que je l'ai fait fonctionner, je pourrais ajouter).

Conditions préalables

  1. ffmpeg
  2. pulseaudio
  3. skype

Si 1ou 2ne sont pas présents dans votre système, installez-les avec votre gestionnaire de paquets préféré (j'utilise synaptic). Pour skypevisiter www.skype.com .


Enregistrez de la vidéo sans perte et du son sans perte - myrec

  1. Créer un fichier texte
  2. Enregistrez-le sous myrec(ou quel que soit le nom qui vous convient)
  3. Rendez myrecexécutable en exécutant la commande:chmod +x myrec
  4. Collez-y le code suivant et modifiez la User settingssection en fonction de votre configuration:

#!/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

L'enregistrement audio uniquement est géré par un script distinct dans la section suivante.


Enregistrez uniquement de l'audio sans perte - myrec-novideo

  1. Créer un fichier texte
  2. Enregistrez-le sous myrec-novideo(ou quel que soit le nom qui vous convient)
  3. Rendez myrec-novideoexécutable en exécutant la commande:chmod +x myrec-novideo
  4. Collez-y le code suivant et modifiez la User settingssection en fonction de votre configuration:

#!/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


Traitez les fichiers enregistrés - myproc

  1. Créer un fichier texte
  2. Enregistrez-le sous myproc(ou quel que soit le nom qui vous convient)
  3. Rendez myprocexécutable en exécutant la commande:chmod +x myproc
  4. Collez-y le code suivant et modifiez la User settingssection en fonction de votre configuration:


#!/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


Grâce à ffmpegla flexibilité de, myprocpeut traiter des fichiers qui peuvent ou non contenir le flux vidéo.


Comment utiliser les scripts

  1. Décidez où la fenêtre d'appel vidéo de Skype va être sur votre écran et définissez la taille de la fenêtre à la dimension souhaitée. Skype se souviendra de ce paramètre de fenêtre, vous ne devez donc le faire qu'une seule fois. À chaque appel ultérieur, la fenêtre apparaîtra au même endroit dans la même taille. N'oubliez pas de parler myrecde vos paramètres. En général, essayez d'avoir la fenêtre d'appel vidéo quelque part près de votre webcam, afin que la personne de l'autre côté ait une chance de penser que vous la regardez dans les yeux.
  2. Ouvrez une fenêtre de terminal. Chaque fois que vous souhaitez commencer l'enregistrement, utilisez la commande:

    • pour enregistrer de l'audio et de la vidéo: . myrec some description
    • pour enregistrer uniquement du son: . myrec-novideo some description

    some descriptionest facultatif dans les deux scripts. Vous pouvez utiliser la Tabtouche pour développer les noms de script pour enregistrer une saisie. ffmpegva commencer l'enregistrement dans un fichier nommé temp_YYYYMMDD_HHMMSS_some_description.mkv, où YYYYMMDD_HHMMSSest la date et l'heure de l'enregistrement.

  3. Appuyez sur qdans la fenêtre du terminal où ffmpegest enregistré une fois que vous êtes prêt à arrêter.
  4. Exécutez . myprocpour traiter (compresser) les fichiers. Vous pouvez soit le faire manuellement, soit configurer un crontravail pour le faire pendant votre absence.
  5. Une fois que vous avez vérifié que la compression s'est déroulée comme prévu, supprimez le temp_fichier.


Problèmes

  1. Impossible de spécifier le microphone par son nom, ne peut utiliser que la valeur spéciale default. J'avais auparavant le nom du micro, mais ce paramètre a cessé de fonctionner après une mise à jour du système. Cela pourrait être quelque chose de limité à ma configuration uniquement, ou à pulseaudio.
  2. Le son du micro contient ma voix et le son des haut-parleurs. Le son des haut-parleurs est légèrement derrière le flux audio enregistré directement sur la carte son. PulseLe module d'annulation d'écho est chargé, mais je pense qu'il est uniquement destiné à annuler mon propre écho vocal. Le fait est que lorsque l'audio du micro est mélangé avec l'audio de la carte son, le léger retard rend le flux résultant difficile à écouter. Quelqu'un at-il une idée de comment empêcher le micro d'enregistrer les sons des haut-parleurs?


Notes finales

J'espère que vous trouverez ces outils utiles. J'ai hâte d'entendre vos réflexions d'amélioration et vos commentaires.

Xavras Wyzryn
la source
2
Sensationnel. Vous voudrez peut-être créer un compte git si vous n'en avez pas et conserver ces scripts là-bas.
RobertL
Cher Xavras, j'ai corrigé tous les paramètres utilisateur et j'ai changé le préfixe de fichier temporaire et exclu les secondes du format de fichier. Lors de l'exécution du script, j'obtiens l'erreur "... ~ / Desktop / sky_20160506_12-10h.mkv: Aucun fichier ou répertoire de ce type" La création du fichier à l'avance ou l'exécution en tant que root n'aide pas. Pourquoi est-ce possible?
superAnnoyingUser
Bonjour @Student, vous l'avez peut-être déjà réglé, mais je n'ai reçu une notification concernant votre commentaire qu'aujourd'hui. En regardant l'erreur que vous avez citée, je pense que le tilde (~) n'a pas été résolu dans son chemin approprié. Essayez de fournir le chemin dans sa forme complète, comme / home / student /. Avez-vous rencontré le problème dans le script d'enregistrement ou de traitement?
Xavras Wyzryn
4

Open Broadcaster Software (OBS) Studio relie toutes ces exigences en une interface facile à utiliser.

C'est open source et multiplateforme:

Pour Ubuntu 15.04 et versions ultérieures:

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

Pour d'autres distributions / versions antérieures d'Ubuntu, consultez le wiki git

clair
la source
0

xvidcap vous permet de sélectionner une zone sur votre bureau et de l'enregistrer. Démarrez-le avec la commande

xvidcap

recherchez votre vidéo sur ./test-0000.mpeg par défaut.

Thorsten Staerk
la source