web-dev-qa-db-fra.com

Comment créer des images GIF animées d'un screencast?

J'ai vu des images GIF animées d'images animées (comme celle ci-dessous) promues plusieurs fois sur ce site comme moyen d'améliorer les réponses.

Animated GIF image

Quelle chaîne d'outils est utilisée pour les créer? Existe-t-il un programme qui effectue cela automatiquement, ou les gens prennent-ils des screencasts, les convertissant en une série de cadres statiques, puis créant les images GIF?

461
andrewsomething

Peek

Est une nouvelle application qui vous permet d’enregistrer facilement des GIF à partir de votre écran.

peek screencast demo

Quoi qu'il en soit, gardez à l'esprit que les couleurs GIF ont une palette de couleurs très limitée, ce n'est donc pas une très bonne idée de les utiliser.

Depuis Ubuntu 18.10, vous pouvez installer Peek directement.

Sudo apt install peek

Pour les anciennes versions d'Ubuntu, vous pouvez installer les dernières versions de Peek à partir de son PPA .

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

Trouvez plus d’informations dans le GitHub repo .

249
stommestack

Byzanz

Le meilleur logiciel que j'ai jamais trouvé pour enregistrer des screencasts GIF est Byzanz.

Byzanz est formidable car il enregistre directement au format GIF, sa qualité et ses FPS sont impressionnants, tout en maintenant la taille des fichiers à un minimum.

Installation

Byzanz est maintenant disponible dans le référentiel de l'univers:

Sudo apt-get install byzanz

Usage

Une fois installé, vous pouvez l'exécuter dans un terminal.

C’est un petit exemple que je viens de faire avec

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

enter image description here

268
Bruno Pereira

Installez d'abord ceci:

Sudo apt-get install imagemagick mplayer gtk-recordmydesktop

ce sont les éléments requis, ImageMagick, MPlayer et Desktop Recorder. Ensuite, utilisez Desktop Recorder pour capturer une partie de l'écran/de l'application à utiliser comme screencast. Une fois que Desktop Recorder a sauvegardé l'enregistrement dans un vidéo OGV, MPlayer sera utilisé pour capturer des captures d'écran JPEG, en les enregistrant dans le répertoire 'sortie'.

Sur un terminal:

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

Utilisez ImageMagick pour convertir les captures d'écran en gifs animés.

convert output/* output.gif

vous pouvez optimiser les captures d'écran de cette façon:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
236
maniat1k

Vue d'ensemble

Cette réponse contient trois scripts Shell:

  1. byzanz-record-window - Pour sélectionner une fenêtre pour l'enregistrement.
  2. byzanz-record-region - Pour sélectionner une partie de l'écran pour l'enregistrement.
  3. Une interface graphique simple pour 1, par MHC .

Introduction

Merci Bruno Pereira pour me présentant byzanz ! C'est très utile pour créer des animations GIF. Les couleurs peuvent être éteintes dans certains cas, mais la taille du fichier le compense. Exemple: 40 secondes, 3,7 Mo .

Usage

Enregistrez un ou tous les deux scripts suivants dans un dossier de votre $PATH. Voici un exemple d'utilisation du premier script pour créer une capture d'écran d'une fenêtre spécifique.

  1. Exécutez byzanz-record-window 30 -c output.gif
  2. Accédez à la fenêtre (alt-tab) que vous souhaitez capturer. Clique dessus.
  3. Attendez 10 secondes (codées en dur dans $DELAY), pendant lesquelles vous préparez l'enregistrement.
  4. Après le bip (défini dans la fonction beep), byzanz démarre.
  5. Après 30 secondes (c'est le sens de 30 à l'étape 1), byzanz se termine. Un bip sera diffusé à nouveau.

J'ai inclus l'indicateur -c dans byzanz-record-window pour illustrer que tous les arguments de mon script Shell sont ajoutés à byzanz-record lui-même. L'indicateur -c indique à byzanz d'inclure également le curseur dans la capture d'écran.
Voir man byzanz-record ou byzanz-record --help pour plus de détails.

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="--duration=$@"
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 $2}' <<< "$XWININFO")
read Y <<< $(awk -F: '/Absolute upper-left Y/{print $2}' <<< "$XWININFO")
read W <<< $(awk -F: '/Width/{print $2}' <<< "$XWININFO")
read H <<< $(awk -F: '/Height/{print $2}' <<< "$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

Dépendances: xrectsel from xrectsel . Clonez le référentiel et exécutez make pour obtenir le fichier exécutable. (Si elle ne possède pas de fichier Make, lancez ./bootstrap et le ./configure avant de lancer `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="--duration=$@"
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

Version graphique de byzanz-record-window

(commentaire de MHC ): je me suis permis de modifier le script avec un simple dialogue graphique

#!/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 $2}' <<< "$XWININFO")
read Y < <(awk -F: '/Absolute upper-left Y/{print $2}' <<< "$XWININFO")
read W < <(awk -F: '/Width/{print $2}' <<< "$XWININFO")
read H < <(awk -F: '/Height/{print $2}' <<< "$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"
136
Rob W

ffmpeg Install ffmpeg

Un des meilleurs outils que j'utilise est ffmpeg. Il peut prendre la plupart des vidéos d'un outil de capture vidéo tel que kazam et les convertir en un autre format.

Installez-le depuis software-center - il s’installera automatiquement si vous installez l’excellent paquet ubuntu-restricted-extras.

Kazam peut générer les formats vidéo mp4 ou webm. Généralement, vous obtenez de meilleurs résultats avec le format mp4.

exemple de syntaxe de fabrication GIF

La syntaxe de base pour convertir une vidéo en gif est la suivante:

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

Les GIF convertis - en particulier ceux avec une résolution standard de 25/29 images par seconde peuvent être très grands. Par exemple, une vidéo de 800 Ko webm en 15 secondes à 25 ips peut générer une sortie de 435 Mo!

Vous pouvez réduire cela par un certain nombre de méthodes:

framerate

Utilisez l'option -r [frame-per-second]

par exemple ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif

Taille réduite de 435Mo à 19Mo

taille limite du fichier

Utilisez l'option -fs [filesize]

par exemple ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif

Remarque - Il s’agit d’une taille approximative du fichier de sortie, qui peut donc être légèrement supérieure à celle spécifiée.

taille de la sortie vidéo

Utilisez l'option -s [widthxheight]

par exemple ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif

Cela a réduit la taille de la vidéo par exemple 1366x768 à 26 Mo.

boucle pour toujours

Parfois, vous voudrez peut-être que le GIF soit bouclé pour toujours.

Utilisez l'option -loop_output 0

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

optimiser davantage et réduire

si vous utilisez imagemagickconvert avec un facteur de fuzz compris entre 3% et 10%, vous pouvez réduire considérablement la taille de l'image.

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

enfin

combinez certaines de ces options pour réduire à quelque chose de gérable pour Ask Ubuntu.

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

suivi par

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

exemple

enter image description here

51
fossfreedom

Silentcast

Silentcast est un autre excellent outil graphique permettant de créer des images animées .gif. Ses caractéristiques comprennent:

  • 4 modes d'enregistrement:

    1. Écran entier

    2. Fenêtre intérieure

    3. Fenêtre avec décoration

    4. Sélection personnalisée

  • 3 formats de sortie:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (frames)

    5. .mkv

  • Aucune installation nécessaire (portable)

  • Répertoire de travail personnalisé

  • Fps personnalisés

Installation

Si vous souhaitez une installation régulière et exécutez une version prise en charge d'Ubuntu, vous pouvez installer Silentcast by PPA:

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

Si vous n’exécutez pas de version prise en charge d’Ubuntu (vous devez vraiment mettre à niveau!), Vous devrez télécharger la dernière version depuis la page GitHub et satisfaire manuellement les dépendances (vous pouvez vous procurer yad et ffmpeg à partir de ici et ici respectivement) ou, si vous utilisez une version légèrement plus récente telle que 13.10, vous pouvez essayer télécharger le fichier .deb directement .

Si vous utilisez Gnome, vous voudrez peut-être installer extension Topicons pour faciliter l’arrêt de Silentcast.

Usage

Démarrez Silentcast à partir de l'interface graphique de votre environnement de bureau ou exécutez la commande silentcast dans un terminal. Choisissez vos paramètres et suivez les instructions à l'écran. Une fois l’enregistrement terminé, une boîte de dialogue vous permettant d’optimiser la sortie finale en supprimant un certain nombre d’images vous sera présentée.

Pour des instructions d'utilisation plus détaillées, consultez le fichier README, soit la version version en ligne de GitHub , soit la version locale stockée dans /usr/share/doc/silentcast avec zless ou votre éditeur favori.

Example

Remarques:

Silentcast est encore en phase de développement et bien que très stable, vous pourriez rencontrer des bugs. Si vous le faites, veuillez les signaler sur le suivi des problèmes GitHub du projet . Si vous rencontrez des problèmes pour installer à partir du PPA et que vous utilisez une version prise en charge d’Ubuntu, laissez un commentaire ci-dessous ou contactez le responsable (moi) sur le tableau de bord.

33
Seth

Il y a toutes sortes de façons compliquées et efficaces (probablement) de faire cela énumérées ici. Cependant, je n'ai jamais voulu suivre ce processus avant ni depuis. Donc, j'utilise simplement un convertisseur en ligne qui convient à mes besoins les quelques fois où je dois le faire. J'ai utilisé ce site:

http://ezgif.com/video-to-gif

Ce n'est pas mon site et je ne suis en aucun cas affilié à eux. Ils ne sont que ceux de mes favoris et il y en a beaucoup plus.

8
KGIII

J'ai créé record-gif.sh , une version améliorée de Rob W's byzanz-record-region :

Une interface graphique boiteuse pour byzanz , a amélioré l'expérience utilisateur ( la zone sélectionnable par la souris , la barre de progression de l'enregistrement, enregistrement pouvant être rejoué ).

record desktop with Shell

  • définir l'enregistrement duration;
  • set save_as destination;
  • sélectionnez - avec la souris - la zone à enregistrer;
  • crée un script pour rejouer l'enregistrement (cf. $HOME/record.again).

Installer

J'ai aussi créé un script d'installation

curl --location https://git.io/record-gif.sh | bash -
8
Édouard Lopez
  1. Installez ces 3 packages: imagemagickmplayergtk-recordmydesktop
  2. Exécutez Desktop Recorder pour capturer une partie de l'écran/de l'application à utiliser comme screencast.
  3. Téléchargez ogv2gif.sh depuis https://github.com/nicolas-raoul/ogv2gif
  4. Exécuter: ./ogv2gif.sh yourscreencast.ogv
  5. Le fichier GIF sera placé dans le même répertoire

100% inspiré de réponse de maniat1k .

4
Nicolas Raoul

Si vous voulez devenir encore plus sophistiqué, vous pouvez utiliser une méthode plus sophistiquée que les gifs animés en utilisant la capture d’écran sur toile HTMl5. Le projet x11-canvas-screencast créera une capture d’écran animée sur une toile html5.

Vous avez peut-être déjà vu quelques exemples célèbres de cette technologie sur le site Web de Sublime Text. x11-canvas-screencast va encore plus loin dans cette méthode en incorporant le suivi du curseur de la souris. Voici une démo de ce que x11-canvas-screencast produit

Le résultat est meilleur qu'un gif animé car il ne se limite pas au nombre de couleurs dont il dispose et nécessite moins de bande passante.

3
gene_wood

Ok, donc pour capturer aussi les clics de souris, la seule chose que j’ai trouvée est key-mon (via le README de screenkey ):

Alors je:

  • Démarrer key-mon
  • Utilisez xrectsel pour obtenir les coordonnées de l'écran dans une commande byzanz
  • Exécutez la commande byzanz

... et ça ressemble un peu à ça:

out.gif

Notez que key-mon --visible_click dessine un cercle autour du pointeur de la souris lorsque vous cliquez dessus - ce que je préférerais, mais dans Ubuntu 14.04.5 LTS, il est quelque peu cassé, car ce cercle n’apparaît pas et ne disparaît pas assez rapidement pour illustrer correctement les clics ( c.-à-d. souris appuie et libère).

3
sdaau

Si vous souhaitez également des enregistrements visibles de clics de souris ou de touches, alors screenkey est votre meilleur choix: https://github.com/wavexx/screenkey

2
nachtigall

J'ai récemment créé une version combinée de scripts déjà publiée ici.
En gros, cela vous permet d’enregistrer une région d’écran, mais avec une interface graphique simple.

Merci pour Rob W pour avoir fourni ces scripts sympas

Voici le code (ou Gist si vous aimez):

#!/bin/bash

#Records selected screen region, with GUI

#This is combined version of GIF recording scripts, that can be found here: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast
#Thanks to Rob W, and the other author (unmentioned), for creating this lovely scripts

#I do not own any rights to code I didn't write
#                                     ~Jacajack

DELAY=5 #Delay before starting
DEFDUR=10 #Default recording duration
TIME=$(date +"%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"
2
Jacajack

Utilisez gtk-recordmydesktop and ffmpeg:

apt-get install gtk-recordmydesktop ffmpeg

Exécutez RecordMyDesktop pour capturer une partie de l’écran/de l’application à utiliser comme screencast:

gtk-recordmydesktop

Créez ogv2gif.sh avec le contenu suivant:

INPUT_FILE=$1
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

Utilise le :

./ogv2gif.sh yourscreencast.ogv

Références :

1
Fedir RYKHTIK

Je teste toutes les méthodes ci-dessus, la plus simple étant:

  1. utilisez gtk-recordmydesktop et key-mon pour obtenir un ogv
  2. ffmpeg -i xx.ogv xx.gif <- sans paramètre.

le fps est original et la taille gif est inférieure au fichier ogv.

1
utopic eexpress