¿Cómo crear imágenes animadas GIF de un screencast?

419

He visto imágenes GIF animadas de pantallas (como la que se muestra a continuación) promocionadas varias veces en este sitio como una forma de mejorar las respuestas.

¿Qué cadena de herramientas se está utilizando para crear estos? ¿Hay algún programa que lo haga automágicamente, o las personas que toman capturas de pantalla, las convierten en una serie de cuadros estáticos y luego crean las imágenes GIF?

    
pregunta andrewsomething 25.02.2012 - 20:19

15 respuestas

173

Peek es una nueva aplicación que te permite grabar GIF fácilmente desde tu pantalla.

De todos modos, tenga en cuenta que los GIF tienen una paleta de colores muy limitada, por lo que no es una buena idea usarlos.

Puede instalar las últimas versiones de Peek en Ubuntu desde su PPA .

sudo add-apt-repository ppa:peek-developers/stable
sudo apt update
sudo apt install peek

Encuentra más información en el repositorio de GitHub: enlace

    
respondido por el Jop V. 06.10.2016 - 23:36
258

El mejor software que he encontrado para grabar capturas de pantalla GIF es Byzanz.

Byzanz es excelente porque graba directamente en GIF, la calidad y el FPS son impresionantes, manteniendo el tamaño de los archivos al mínimo.

Instalación

Byzanz ahora está disponible en el repositorio del universo:

sudo apt-get install byzanz

Uso

Cuando está instalado, puede ejecutarlo en una terminal.

Este es un pequeño ejemplo que hice ahora con

byzanz-record --duration=15 --x=200 --y=300 --width=700 --height=400 out.gif

    
respondido por el Bruno Pereira 19.04.2012 - 21:47
233

Primero instala esto:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop

esas son las cosas necesarias, ImageMagick, MPlayer y Desktop Recorder. Luego, use Grabadora de escritorio para capturar una porción de la pantalla / aplicación para usar como screencast. Después de que la grabadora de escritorio haya guardado la grabación en un video OGV , se usará MPlayer para capturar capturas de pantalla JPEG, guardándolas en el directorio de 'salida'.

En una terminal:

mplayer -ao null <video file name> -vo jpeg:outdir=output

Utilice ImageMagick para convertir las capturas de pantalla en un gif animado.

convert output/* output.gif

puede optimizar las capturas de pantalla de esta manera:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
    
respondido por el maniat1k 25.02.2012 - 20:40
136

Descripción general

Esta respuesta contiene tres scripts de shell:

  1. byzanz-record-window - Para seleccionar una ventana para grabar.
  2. byzanz-record-region - Para seleccionar una parte de la pantalla para grabar.
  3. Una interfaz gráfica de usuario simple para 1, por MHC .

Introducción

Gracias a Bruno Pereira por presentarme a byzanz ! Es bastante útil para crear animaciones GIF. Los colores pueden estar apagados en algunos casos, pero el tamaño del archivo lo compensa. Ejemplo: 40 segundos, 3.7Mb .

Uso

Guarde uno / todos los siguientes dos scripts en una carpeta dentro de su $PATH . Aquí hay un ejemplo sobre el uso del primer script para hacer un screencast de una ventana específica.

  1. Ejecutar byzanz-record-window 30 -c output.gif
  2. Vaya a la ventana (alt-tab) que desea capturar. Haga clic en él.
  3. Espere 10 segundos (codificado en $DELAY ), en el que se prepara para la grabación.
  4. Después del pitido (definido en la función beep ), byzanz comenzará.
  5. Después de 30 segundos (ese es el significado de 30 en el paso 1), byzanz finaliza. Se emitirá un pitido nuevamente.

Incluí el indicador -c en byzanz-record-window para ilustrar que los argumentos a mi script de shell se añaden a byzanz-record . El indicador -c le dice a byzanz que también incluya el cursor en el screencast.
Consulte man byzanz-record o byzanz-record --help para obtener más información.

byzanz-record-window

#!/bin/bash

# Delay before starting
DELAY=10

# Sound notification to let one know when recording is about to start (and ends)
beep() {
    paplay /usr/share/sounds/KDE-Im-Irc-Event.ogg &
}

# Duration and output file
if [ $# -gt 0 ]; then
    D="[email protected]"
else
    echo Default recording duration 10s to /tmp/recorded.gif
    D="--duration=10 /tmp/recorded.gif"
fi
XWININFO=$(xwininfo)
read X <<< $(awk -F: '/Absolute upper-left X/{print }' <<< "$XWININFO")
read Y <<< $(awk -F: '/Absolute upper-left Y/{print }' <<< "$XWININFO")
read W <<< $(awk -F: '/Width/{print }' <<< "$XWININFO")
read H <<< $(awk -F: '/Height/{print }' <<< "$XWININFO")

echo Delaying $DELAY seconds. After that, byzanz will start
for (( i=$DELAY; i>0; --i )) ; do
    echo $i
    sleep 1
done

beep
byzanz-record --verbose --delay=0 --x=$X --y=$Y --width=$W --height=$H $D
beep

byzanz-record-region

Dependencia: xrectsel de xrectsel . Clona el repositorio y ejecuta make para obtener el ejecutable. (Si protesta no hay un archivo MAKE, ejecuta ./bootstrap y el ./configure antes de ejecutar 'make').

#!/bin/bash

# Delay before starting
DELAY=10

# Sound notification to let one know when recording is about to start (and ends)
beep() {
    paplay /usr/share/sounds/KDE-Im-Irc-Event.ogg &
}

# Duration and output file
if [ $# -gt 0 ]; then
    D="[email protected]"
else
    echo Default recording duration 10s to /tmp/recorded.gif
    D="--duration=10 /tmp/recorded.gif"
fi

# xrectsel from https://github.com/lolilolicon/xrectsel
ARGUMENTS=$(xrectsel "--x=%x --y=%y --width=%w --height=%h") || exit -1

echo Delaying $DELAY seconds. After that, byzanz will start
for (( i=$DELAY; i>0; --i )) ; do
    echo $i
    sleep 1
done
beep
byzanz-record --verbose --delay=0 ${ARGUMENTS} $D
beep

Versión de Gui de byzanz-record-window

(comentario de MHC ): me he tomado la libertad de modificar el guión con un simple diálogo GUI

#!/bin/bash

# AUTHOR:   (c) Rob W 2012, modified by MHC (https://askubuntu.com/users/81372/mhc)
# NAME:     GIFRecord 0.1
# DESCRIPTION:  A script to record GIF screencasts.
# LICENSE:  GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# DEPENDENCIES:   byzanz,gdialog,notify-send (install via sudo add-apt-repository ppa:fossfreedom/byzanz; sudo apt-get update && sudo apt-get install byzanz gdialog notify-osd)

# Time and date
TIME=$(date +"%Y-%m-%d_%H%M%S")

# Delay before starting
DELAY=10

# Standard screencast folder
FOLDER="$HOME/Pictures"

# Default recording duration
DEFDUR=10

# Sound notification to let one know when recording is about to start (and ends)
beep() {
    paplay /usr/share/sounds/freedesktop/stereo/message-new-instant.oga &
}

# Custom recording duration as set by user
USERDUR=$(gdialog --title "Duration?" --inputbox "Please enter the screencast duration in seconds" 200 100 2>&1)

# Duration and output file
if [ $USERDUR -gt 0 ]; then
    D=$USERDUR
else
    D=$DEFDUR
fi

# Window geometry
XWININFO=$(xwininfo)
read X < <(awk -F: '/Absolute upper-left X/{print }' <<< "$XWININFO")
read Y < <(awk -F: '/Absolute upper-left Y/{print }' <<< "$XWININFO")
read W < <(awk -F: '/Width/{print }' <<< "$XWININFO")
read H < <(awk -F: '/Height/{print }' <<< "$XWININFO")

# Notify the user of recording time and delay
notify-send "GIFRecorder" "Recording duration set to $D seconds. Recording will start in $DELAY seconds."

#Actual recording
sleep $DELAY
beep
byzanz-record -c --verbose --delay=0 --duration=$D --x=$X --y=$Y --width=$W --height=$H "$FOLDER/GIFrecord_$TIME.gif"
beep

# Notify the user of end of recording.
notify-send "GIFRecorder" "Screencast saved to $FOLDER/GIFrecord_$TIME.gif"
    
respondido por el Rob W 14.10.2012 - 17:44
49

ffmpeg

Una de las mejores herramientas que uso es ffmpeg . Puede tomar la mayoría del video desde una herramienta de screencast como kazam y convertirlo a otro formato.

Instalar esto desde software-center : se instala automáticamente si instala el excelente paquete ubuntu-restricted-extras .

Kazam puede mostrar en los formatos de video mp4 o webm . En general, obtienes mejores resultados en formato mp4 .

ejemplo GIF haciendo sintaxis

La sintaxis básica para convertir video a gif es:

ffmpeg -i [inputvideo_filename] -pix_fmt rgb24 [output.gif]

Los GIF convertidos, especialmente aquellos con un marco por segundo estándar de 25/29 pueden ser muy grandes. Por ejemplo, un video web de 800Kb de 15 segundos a 25 fps puede generar hasta 435Mb.

Puede reducir esto mediante una serie de métodos:

framerate

Use la opción -r [frame-per-second]

por ejemplo ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif

Tamaño reducido de 435Mb a 19Mb

límite de tamaño de archivo

Use la opción -fs [filesize]

por ejemplo ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif

Nota: este es un tamaño de archivo de salida aproximado, por lo que el tamaño puede ser ligeramente mayor que el especificado.

tamaño del video de salida

Use la opción -s [widthxheight]

por ejemplo ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif

Esto redujo el tamaño de video del ejemplo 1366x768 a 26Mb

loop forever

A veces es posible que desee que el GIF gire para siempre.

Use la opción -loop_output 0

ffmpeg -i Untitled_Screencast.webm -loop_output 0 -pix_fmt rgb24 out.gif

optimice y reduzca aún más

si usa imagemagick convert con un factor de fuzz entre 3% y 10%, entonces puede reducir drásticamente el tamaño de la imagen

convert output.gif -fuzz 3% -layers Optimize finalgif.gif

finalmente

combine algunas de estas opciones para reducirlas a algo manejable para Ask Ubuntu.

ffmpeg -i Untitled_Screencast.webm -loop_output 0 -r 5 -s 320x200 -pix_fmt rgb24 out.gif

seguido de

convert output.gif -fuzz 8% -layers Optimize finalgif.gif
  

ejemplo

     

    
respondido por el fossfreedom 05.03.2012 - 22:46
33

Silentcast

Silentcast es otra gran herramienta basada en la interfaz gráfica de usuario para crear imágenes .gif animadas. Sus características incluyen:

  • 4 modos de grabación:

    1. Toda la pantalla

    2. Ventana interior

    3. Ventana con decoración

    4. Selección personalizada

  • 3 formatos de salida:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (marcos)

    5. .mkv

  • No es necesaria ninguna instalación (portátil)

  • Directorio de trabajo personalizado

  • Fps personalizados

Instalación

Si desea una instalación normal y está ejecutando una versión compatible de Ubuntu, puede instalar Silentcast por PPA:

sudo add-apt-repository ppa:sethj/silentcast  
sudo apt-get update  
sudo apt-get install silentcast  

Si no está ejecutando una versión compatible de Ubuntu (¡debería actualizarse realmente!), necesitará descargar la última versión de la página de GitHub y satisfaga manualmente las dependencias (puede obtener yad y ffmpeg desde aquí y aquí respectivamente) o, si está ejecutando una versión ligeramente más reciente como 13.10 podría intentar descargar el archivo .deb directamente .

Si está utilizando Gnome, es posible que desee instalar la extensión de Topicons para detener el Silentcast.

Uso

Inicie Silentcast desde la interfaz de usuario de su entorno de escritorio o ejecute el comando silentcast en una terminal. Elija su configuración y siga las indicaciones en pantalla. Cuando termine de grabar, se le presentará un cuadro de diálogo para optimizar el resultado final eliminando un cierto número de cuadros.

Para obtener más información en profundidad, consulte el archivo README, ya sea la versión en línea de GitHub o la versión local almacenada en /usr/share/doc/silentcast con zless o su editor favorito.

Notas:

Silentcast aún se encuentra en la etapa de desarrollo y, aunque es bastante estable, puede encontrar algunos errores. Si lo hace, infórmenos sobre el rastreador de problemas GitHub del proyecto . Si tiene problemas para instalar desde el PPA y está ejecutando una versión compatible de Ubuntu, deje un comentario a continuación o póngase en contacto con el desarrollador (me) en Launchpad.

    
respondido por el Seth 29.10.2014 - 02:27
7

Hay todo tipo de formas complicadas y que funcionan (presumiblemente) para hacer esto enumeradas aquí. Sin embargo, nunca he querido pasar por ese proceso ni antes ni después. Entonces, simplemente uso un convertidor en línea que se adapta a mis necesidades las pocas veces que necesito hacerlo. He usado este sitio:

enlace

No es mi sitio y no estoy afiliado a ellos de ninguna manera. Son solo uno de mis marcadores y hay muchos más.

    
respondido por el KGIII 17.10.2015 - 19:45
7

Creé record-gif.sh , una versión mejorada de Rob W's byzanz-record-region :

  

Una interfaz gráfica de usuario coja para byzanz , mejoró la experiencia del usuario ( área seleccionable por el mouse , barra de progreso de grabación, grabación con capacidad de reproducción repetitiva ).

  • estableció la grabación duration ;
  • establecer save_as destination;
  • seleccione -con el mouse- el área para grabar;
  • crea un script para reproducir la grabación (cf. $HOME/record.again ).

Instalar

También creé un script de instalación

curl --location https://git.io/record-gif.sh | bash -
    
respondido por el Édouard Lopez 06.10.2016 - 22:27
3
  1. Instala estos 3 paquetes: imagemagick mplayer gtk-recordmydesktop
  2. Ejecute Grabador de escritorio para capturar una parte de la pantalla / aplicación para usar como screencast
  3. Descargar ogv2gif.sh de enlace
  4. Ejecutar: ./ogv2gif.sh yourscreencast.ogv
  5. El archivo GIF se colocará en el mismo directorio

100% inspirado en la respuesta de maniat1k .

    
respondido por el Nicolas Raoul 30.06.2016 - 09:25
2

Si quieres ser aún más elegante, puedes utilizar un método más sofisticado que los gifs animados utilizando el screencasting de lienzo HTMl5. El proyecto x11-canvas-screencast creará una captura de pantalla animada de lienzo html5.

Es posible que haya visto algunos ejemplos famosos de esta tecnología en el sitio web de Sublime Text. x11-canvas-screencast lleva este método un paso más allá al incorporar el seguimiento del cursor del mouse. Aquí hay una demostración de lo que x11- canvas-screencast produce

El resultado es mejor que un archivo .gif animado, ya que no está limitado a la cantidad de colores que tiene y requiere menos ancho de banda.

    
respondido por el gene_wood 22.09.2015 - 19:37
2

De acuerdo, para capturar también los clics del mouse, lo único que encontré fue key-mon (a través del archivo README de screenkey ):

Entonces yo:

  • Comenzar key-mon
  • Utilice xrectsel para obtener las coordenadas de la pantalla puestas en un comando byzanz
  • Ejecuta el comando byzanz

... y se ve así:

Tenga en cuenta que key-mon --visible_click dibujaría un círculo alrededor del puntero del mouse al hacer clic con el mouse, lo cual preferiría, pero en Ubuntu 14.04.5 LTS esto está algo roto, ya que este círculo no aparece y desaparece lo suficientemente rápido como para ilustra correctamente los clics (es decir, presiona y suelta el mouse).

    
respondido por el sdaau 24.08.2016 - 06:34
1

Recientemente creé una versión combinada de scripts ya publicados aquí.
Básicamente, le permite grabar la región de la pantalla, pero con una simple GUI.

Gracias por Rob W por proporcionar esos geniales scripts

Aquí está el código (o gist si lo desea):

#!/bin/bash

#Records selected screen region, with GUI

#This is combined version of GIF recording scripts, that can be found here: https://ubuntusp.info/questions/67/como-crear-imagenes-animadas-gif-de-un-screencast"%Y-%m-%d_%H%M%S") #Timestamp
FOLDER="$HOME/Pictures/Byzanz" #Default output directory

#Sound notification to let one know when recording is about to start (and ends)
beep() {
    paplay /usr/share/sounds/freedesktop/stereo/message-new-instant.oga &
}

#Custom recording duration as set by user
USERDUR=$(gdialog --title "Duration?" --inputbox "Please enter the screencast duration in seconds" 200 100 2>&1)

#Duration and output file
if [ $USERDUR -gt 0 ]; then
    D=$USERDUR
else
    D=$DEFDUR
fi

#Get coordinates using xrectsel from https://github.com/lolilolicon/xrectsel
REGION=$(xrectsel "--x=%x --y=%y --width=%w --height=%h") || exit -1

notify-send "GIFRecorder" "Recording duration set to $D seconds. Recording will start in $DELAY seconds."

for (( i=$DELAY; i>0; --i )) ; do
    sleep 1
done

#Record
beep
byzanz-record --cursor --verbose --delay=0 ${REGION} --duration=$D "$FOLDER/byzanz-record-region-$TIME.gif"
beep

notify-send "GIFRecorder" "Screencast saved to $FOLDER/byzanz-record-region-$TIME.gif"
    
respondido por el Jacajack 26.05.2016 - 22:17
1

Si también desea grabaciones visibles de clics del mouse o de teclas, la tecla de pantalla es su mejor opción: enlace

    
respondido por el nachtigall 12.06.2016 - 08:25
0

Usar gtk-recordmydesktop y ffmpeg :

apt-get install gtk-recordmydesktop ffmpeg

Ejecutar RecordMyDesktop captura una parte de la pantalla / aplicación para usar como screencast:

gtk-recordmydesktop

Crear ogv2gif.sh con el siguiente contenido:

INPUT_FILE=
FPS=15
WIDTH=320
TEMP_FILE_PATH="~/tmp.png"
ffmpeg -i $INPUT_FILE -vf fps=$FPS,scale=$WIDTH:-1:flags=lanczos,palettegen $TEMP_FILE_PATH
ffmpeg -i $INPUT_FILE -i $TEMP_FILE_PATH -loop 0 -filter_complex "fps=$FPS,scale=$WIDTH:-1:flags=lanczos[x];[x][1:v]paletteuse" $INPUT_FILE.gif
rm $TEMP_FILE_PATH

Úselo:

./ogv2gif.sh yourscreencast.ogv

Referencias:

respondido por el Fedir RYKHTIK 14.02.2017 - 10:15
0

Probé todo el método anterior, encontré que el más simple es:

  1. usa gtk-recordmydesktop y key-mon para obtener un ogv
  2. ffmpeg -i xx.ogv xx.gif & lt; - sin ningún parámetro .

el fps es original y el tamaño del archivo gif es menor que el archivo ogv.

    
respondido por el utopic eexpress 10.03.2017 - 11:11

Lea otras preguntas en las etiquetas