¿Cómo grabar videollamadas de Skype en Linux?

28

Me gustaría realizar entrevistas de video grabadas con Skype y estoy buscando una herramienta confiable para lograrlo.

¿Hay algo por ahí que no sea lento o con errores?

Estoy ejecutando (K) Ubuntu.

curioso
fuente
¿Has probado gtk-recordmydesktop? Puedo grabar casi cualquier cosa con él. ffmpeg -i x11grab también funciona. si tiene problemas para que el audio alsa-loop funcione.
RobotHumans
Intenta preguntar en askubuntu.com .
Adam Byrtek

Respuestas:

11

Existe el software recordMyDesktop http://recordmydesktop.sourceforge.net/about.php que puede grabar cualquier parte de la pantalla que desee. Lo uso para grabar mis sesiones de skype.

sudo apt-get install recordmydesktop

para instalarlo desde los canales principales.

Chris-Top
fuente
Lo usé mientras usaba auriculares y grabaría el audio de la otra parte. Supongo que estaba grabando audio del micrófono predeterminado (por lo que capturaba mi propia voz pero no la de la otra parte). Alguna idea de como arreglarlo ?
Marcus Junius Brutus
11

Este comando capturará su escritorio completo: así que use este comando cuando quiera grabar skype-conversación (o cualquier otra cosa)

ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg   
SHW
fuente
1
¡Gracias! ¿Cómo puedo grabar solo ventanas específicas, por ejemplo, la ventana de mi cámara web y la ventana de la otra persona? Quizás incluso cómo grabarlos por separado para que sea más fácil editarlos.
curioso
1
@curiousguy, para grabar una ventana específica con recordmydesktop, use "xwininfo" para obtener la identificación de la ventana, luego con recordmydesktop use el parámetro "--windowid". Si desea escalar su ventana a un tamaño específico (en píxeles), hay diferentes maneras de hacerlo: creo que Compiz tiene esto como una opción, también Openbox le dirá las dimensiones de la ventana. (Estoy usando Fedora). También creo que Openbox le permitirá "decorar" una ventana, lo cual es útil si recordmydesktop está grabando el borde de su ventana. Sin embargo, no estoy seguro de si esto es posible con ffmpeg?
PJ Brunet
¿Cómo se compilaría con x11grab habilitado en ubuntu? ¿Qué paquete necesita?
v010dya
8

Fondo

Grabar video y audio en vivo durante una llamada (o durante cualquier actividad de escritorio X11) no es muy difícil gracias a ffmpeg y la cantidad de artículos de ayuda disponibles (incluido este sitio). Sin embargo, si apunta a una mayor calidad, alcanzará rápidamente los límites del enfoque simple de captura y compresión simultánea de medios. De ahí la necesidad de una herramienta (o un conjunto de herramientas) que permita:

  1. Grabe llamadas sin compresión en un archivo para su posterior procesamiento, reconociendo que cuando llama a un teléfono solo nos interesa el audio.
  2. Comprima las llamadas grabadas en alta calidad en un momento posterior.

Los siguientes scripts de Bash ( myrec, myrec-novideoy myproc) son mi intento en esta tarea. Estoy seguro de que hay formas más ordenadas de escribir estos scripts, pero estaba aprendiendo scripts de Bash sobre la marcha (con enorme satisfacción una vez que lo puse a trabajar, podría agregar).

Prerrequisitos

  1. ffmpeg
  2. pulseaudio
  3. skype

Si está 1o 2no está presente en su sistema, instálelos con su administrador de paquetes preferido (uso synaptic). Para skypevisitar www.skype.com .


Grabe video sin pérdida y audio sin pérdida: myrec

  1. Crea un archivo de texto
  2. Guárdalo como myrec(o como quieras)
  3. Haga myrecejecutable emitiendo el comando:chmod +x myrec
  4. Pegue el siguiente código y modifique la User settingssección para adaptarla a su configuración:

#!/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 grabación de audio solo se maneja mediante un script separado en la siguiente sección.


Grabe solo audio sin pérdida - myrec-novideo

  1. Crea un archivo de texto
  2. Guárdalo como myrec-novideo(o como quieras)
  3. Haga myrec-novideoejecutable emitiendo el comando:chmod +x myrec-novideo
  4. Pegue el siguiente código y modifique la User settingssección para adaptarla a su configuración:

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


Procesar los archivos grabados myproc

  1. Crea un archivo de texto
  2. Guárdalo como myproc(o como quieras)
  3. Haga myprocejecutable emitiendo el comando:chmod +x myproc
  4. Pegue el siguiente código y modifique la User settingssección para adaptarla a su configuración:


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


Gracias a ffmpegsu flexibilidad, myprocpuede procesar archivos que pueden contener o no la transmisión de video.


Cómo usar los guiones

  1. Decide dónde estará la ventana de videollamadas de Skype en tu pantalla y establece el tamaño de la ventana en la dimensión deseada. Skype recordará esta configuración de ventana, por lo que solo debe hacerlo una vez. En cada llamada posterior, la ventana aparecerá en el mismo lugar del mismo tamaño. Recuerde informarle myrecde su configuración. En general, intente tener la ventana de videollamada en algún lugar cerca de su cámara web, para que la persona del otro lado tenga la oportunidad de pensar que la está mirando a los ojos.
  2. Tener una ventana de terminal abierta. Siempre que desee comenzar a grabar, use el comando:

    • para grabar audio y video: . myrec some description
    • para grabar solo audio: . myrec-novideo some description

    some descriptiones opcional en ambos scripts. Puede usar la Tabtecla para expandir los nombres de los guiones y guardar algunos tipos de escritura. ffmpegcomenzará a grabar en un archivo llamado temp_YYYYMMDD_HHMMSS_some_description.mkv, donde YYYYMMDD_HHMMSSestá la fecha y la hora de la grabación.

  3. Presione qen la ventana de terminal donde ffmpegestá grabando una vez que esté listo para detenerse.
  4. Ejecute . myprocpara procesar (comprimir) los archivos. Puede hacerlo manualmente o configurar un crontrabajo para hacerlo mientras está fuera.
  5. Una vez que verifique que la compresión salió como se esperaba, elimine el temp_archivo.


Cuestiones

  1. Incapaz de especificar el micrófono por nombre, solo puede usar el valor especial default. Solía ​​tener el nombre del micrófono allí, pero esta configuración dejó de funcionar después de una actualización del sistema. Podría ser algo restringido solo a mi configuración, o a pulseaudio.
  2. El audio del micrófono contiene mi voz y el sonido de los altavoces. El sonido de los altavoces está ligeramente detrás del flujo de audio grabado directamente desde la tarjeta de sonido. PulseEl módulo de cancelación de eco está cargado, pero creo que solo está destinado a cancelar mi propio eco de voz. La cuestión es que cuando el audio del micrófono se mezcla con el audio de la tarjeta de sonido, el ligero retraso hace que la transmisión resultante sea difícil de escuchar. ¿Alguien tiene una idea de cómo evitar que el micrófono grabe los sonidos de los altavoces?


Notas finales

Espero que encuentres estas herramientas útiles. Espero escuchar sus pensamientos para mejorar y comentar.

Xavras Wyzryn
fuente
2
Guau. Es posible que desee iniciar una cuenta git si no tiene una y también mantener estos scripts allí.
RobertL
Estimado Xavras, arreglé todas las configuraciones del usuario y cambié el prefijo del archivo temporal y excluí los segundos del formato del archivo. Al ejecutar el script aparece el error "... ~ / Desktop / sky_20160506_12-10h.mkv: No existe tal archivo o directorio" Crear el archivo por adelantado o ejecutarlo como root no ayuda. ¿Por qué puede ser esto?
superAnnoyingUser
Hola @ Estudiante, es posible que ya lo hayas resuelto, pero recibí una notificación sobre tu comentario solo hoy. Mirando el error que citó, creo que la tilde (~) no se resolvió en su ruta adecuada. Intente proporcionar la ruta en su forma completa, como / home / student /. ¿Te encontraste con el problema en el script de grabación o procesamiento?
Xavras Wyzryn
4

Open Broadcaster Software (OBS) Studio vincula todos estos requisitos en una interfaz fácil de usar.

Es de código abierto y multiplataforma:

Para Ubuntu 15.04 y posterior:

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

Para otras distribuciones / versiones anteriores de Ubuntu, consulte el wiki de git

claro
fuente
0

xvidcap le permite seleccionar un área de su escritorio y grabarla. Comience con el comando

xvidcap

encuentra tu video en ./test-0000.mpeg por defecto.

Thorsten Staerk
fuente