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

414

J'ai vu des images GIF animées de projections d’écrans (comme celle ci-dessous) présentées à plusieurs reprises sur ce site pour améliorer les réponses.

Quelle chaîne d’outils est utilisée pour les créer? Existe-t-il un programme qui le fait automatiquement ou est-ce que les utilisateurs prennent des screencasts, les convertissent en une série d'images statiques, puis créent les images GIF?

    
posée andrewsomething 25.02.2012 - 20:19
la source

15 réponses

165

Peek est une nouvelle application qui vous permet d'enregistrer facilement les fichiers GIF depuis votre écran.

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

Vous pouvez installer les dernières versions de Peek sur Ubuntu à 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 dépôt GitHub: lien

    
réponse donnée Jop V. 06.10.2016 - 23:36
la source
257

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

Byzanz est génial car il enregistre directement dans GIF, la qualité et les FPS sont impressionnants tout en maintenant la taille des fichiers à un minimum.

Installation

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

sudo apt-get install byzanz

Utilisation

Lorsqu'il est 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

    
réponse donnée Bruno Pereira 19.04.2012 - 21:47
la source
232

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 / application à utiliser comme screencast. Une fois que l’enregistreur de bureau a enregistré l’enregistrement dans une vidéo OGV , MPlayer sera utilisé pour capturer les captures d'écran JPEG, en les enregistrant dans le répertoire "output".

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
    
réponse donnée maniat1k 25.02.2012 - 20:40
la source
136

Aperçu

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ésenter à byzanz ! C'est très utile pour créer des animations GIF. Les couleurs peuvent être désactivées dans certains cas, mais la taille du fichier le remplace. Exemple: 40 secondes, 3.7Mb .

Utilisation

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

  1. Exécuter byzanz-record-window 30 -c output.gif
  2. Allez dans la fenêtre (tab-alt) que vous souhaitez capturer. Cliquez dessus.
  3. Attendez 10 secondes (codé en dur dans $DELAY ), dans lequel vous vous préparez à enregistrer.
  4. Après le bip (défini dans la fonction beep ), byzanz démarrera.
  5. Après 30 secondes (c'est-à-dire la signification de 30 à l'étape 1), byzanz se termine. Un bip sera à nouveau diffusé.

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. Le drapeau -c indique à byzanz d'inclure également le curseur dans le screencast.
Consultez 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 }' <<< "$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

Dépendance: xrectsel de xrectsel . Clonez le référentiel et exécutez make pour obtenir l'exécutable. (S'il n'y a pas de makefile, exécutez ./bootstrap et ./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 par MHC ): j'ai pris la liberté 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 }' <<< "$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"
    
réponse donnée Rob W 14.10.2012 - 17:44
la source
48

ffmpeg

L'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 le convertir dans un autre format.

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

Kazam peut afficher les formats vidéo mp4 ou webm . En général, vous obtenez de meilleurs résultats en affichant le format mp4 .

exemple de syntaxe de création de 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 fichiers GIF convertis, en particulier ceux qui ont une taille standard de 25/29 images par seconde, peuvent être très volumineux. Par exemple, une vidéo Webm de 15 secondes à 25 images par seconde peut produire 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 435 Mo à 19 Mo

limite de taille de 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 de fichier de sortie approximative, de sorte que la taille peut être légèrement supérieure à celle spécifiée.

taille de la vidéo de sortie

Utilisez l'option -s [widthxheight]

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

Cela a réduit l’exemple de taille de vidéo 1366x768 à 26 Mo

boucle pour toujours

Parfois, vous voudrez peut-être que le GIF se boucle pour toujours.

Utilisez l’option -loop_output 0

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

optimiser et réduire encore

si vous utilisez imagemagick convert 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 de

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

exemple

     

    
réponse donnée fossfreedom 05.03.2012 - 22:46
la source
33

Silentcast

Silentcast est un autre outil génial de création d’images animées .gif. Ses fonctionnalités incluent:

  • 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é

Installation

Si vous souhaitez une installation standard 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 une version prise en charge d'Ubuntu (vous devriez vraiment mettre à jour!), 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 de télécharger directement le fichier .deb .

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

Utilisation

Lancez 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 permet d'optimiser la sortie finale en supprimant un certain nombre d'images.

Pour plus d’informations détaillées sur l’utilisation, consultez le README, soit la version de GitHub en ligne ou la version locale stockée dans /usr/share/doc/silentcast avec zless ou votre éditeur préféré.

Notes:

Silentcast est encore en phase de développement et, bien qu’il soit assez stable, vous risquez de rencontrer des bogues. Si vous le souhaitez, merci de nous les signaler sur le suivi des problèmes GitHub du projet . Si vous ne parvenez pas à installer depuis le PPA et que vous exécutez une version prise en charge d'Ubuntu, laissez un commentaire ci-dessous ou contactez le responsable (moi) le Launchpad.

    
réponse donnée Seth 29.10.2014 - 02:27
la source
7

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

lien

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

    
réponse donnée KGIII 17.10.2015 - 19:45
la source
7

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

  

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

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

Installer

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

curl --location https://git.io/record-gif.sh | bash -
    
réponse donnée Édouard Lopez 06.10.2016 - 22:27
la source
3
  1. Installez ces 3 packages: imagemagick mplayer gtk-recordmydesktop
  2. Exécutez Desktop Recorder pour capturer une partie de l'écran / application à utiliser comme screencast
  3. Téléchargez ogv2gif.sh depuis lien
  4. Exécuter: ./ogv2gif.sh yourscreencast.ogv
  5. Le fichier GIF sera placé dans le même répertoire

100% inspiré de la réponse de maniat1k .

    
réponse donnée Nicolas Raoul 30.06.2016 - 09:25
la source
2

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

Vous avez peut-être vu des exemples célèbres de cette technologie sur le site Web de Sublime Text. x11-canvas-screencast va encore plus loin 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 qu’il possède et qu’il prend moins de bande passante.

    
réponse donnée gene_wood 22.09.2015 - 19:37
la source
2

Ok, donc pour capturer aussi les clics de souris, la seule chose que j'ai trouvée était 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 à ceci:

Notez que key-mon --visible_click trace un cercle autour du pointeur de la souris lorsque vous cliquez avec la souris - ce que je préférerais, mais dans Ubuntu 14.04.5 LTS, ce cercle est un peu cassé. illustrer correctement les clics (c.-à-d. pressions et relâchements de la souris).

    
réponse donnée sdaau 24.08.2016 - 06:34
la source
1

J'ai récemment créé une version combinée de scripts déjà affichés ici.
Fondamentalement, il vous permet d'enregistrer la région de l'écran, mais avec une interface graphique simple.

Merci pour Rob W d'avoir fourni ces scripts géniaux

Voici le code (ou l'essentiel si vous préférez):

#!/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"
    
réponse donnée Jacajack 26.05.2016 - 22:17
la source
1

Si vous souhaitez également des enregistrements visibles de clics de souris ou de raccourcis clavier, la clé d'écran est votre meilleur choix: lien

    
réponse donnée nachtigall 12.06.2016 - 08:25
la source
0

Utilisez gtk-recordmydesktop et ffmpeg :

apt-get install gtk-recordmydesktop ffmpeg

Exécuter RecordMyDesktop capture une partie de l'écran / application à utiliser comme screencast:

gtk-recordmydesktop

Créez ogv2gif.sh avec le contenu suivant:

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

Utilisez-le:

./ogv2gif.sh yourscreencast.ogv

Références:

réponse donnée Fedir RYKHTIK 14.02.2017 - 10:15
la source
0

Je teste toute la méthode ci-dessus, et la plus simple est:

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

le fps est original et la taille du gif est inférieure à celle du fichier ogv.

    
réponse donnée utopic eexpress 10.03.2017 - 11:11
la source

Lire d'autres questions sur les étiquettes