Come creare immagini GIF animate di uno screencast?

430

Ho visto immagini GIF animate di schermate (come quella qui sotto) promosse alcune volte su questo sito come un modo per migliorare le risposte.

Quale toolchain viene utilizzato per creare questi? Esiste un programma che esegue questa operazione in modo automatico o le persone che utilizzano screencast, le convertono in una serie di frame statici e quindi creano le immagini GIF?

    
posta andrewsomething 25.02.2012 - 20:19
fonte

15 risposte

195

Peek è una nuova applicazione che ti consente di registrare facilmente le GIF dallo schermo.

Inognicaso,tienipresentecheleGIFhannounatavolozzadicolorimoltolimitata,quindinonèunabuonaideausarle.

PuoiinstallareleultimeversionidiPeeksuUbuntudalsuo PPA .

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

Trova ulteriori informazioni nel repository GitHub: link

    
risposta data Jop V. 06.10.2016 - 23:36
fonte
259

Il miglior software che abbia mai trovato per registrare screencast GIF è Byzanz.

Byzanz è fantastico perché registra direttamente in GIF, la qualità e l'FPS sono impressionanti, mantenendo al minimo la dimensione dei file.

Installazione

Byzanz è ora disponibile dal repository universe:

sudo apt-get install byzanz

Uso

Una volta installato, puoi eseguirlo su un terminale.

Questo è un piccolo esempio che ho appena fatto con

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

    
risposta data Bruno Pereira 19.04.2012 - 21:47
fonte
234

Prima installa questo:

sudo apt-get install imagemagick mplayer gtk-recordmydesktop

quelle sono le cose richieste, ImageMagick, MPlayer e Desktop Recorder. Quindi utilizza Desktop Recorder per acquisire una parte dello schermo / dell'applicazione da utilizzare come screencast. Dopo che il Desktop Recorder ha salvato la registrazione in un video OGV , MPlayer verrà utilizzato per acquisire screenshot JPEG, salvandoli nella directory 'output'.

Su un terminale:

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

Utilizza ImageMagick per convertire gli screenshot in gif animate.

convert output/* output.gif

puoi ottimizzare gli screenshot in questo modo:

convert output.gif -fuzz 10% -layers Optimize optimised.gif
    
risposta data maniat1k 25.02.2012 - 20:40
fonte
136

Panoramica

Questa risposta contiene tre script di shell:

  1. byzanz-record-window - Per selezionare una finestra per la registrazione.
  2. byzanz-record-region - Per selezionare una parte dello schermo per la registrazione.
  3. Un semplice front-end GUI per 1, di MHC .

Introduzione

Ringrazia Bruno Pereira per mi ha fatto conoscere byzanz ! È abbastanza utile per creare animazioni GIF. In alcuni casi i colori potrebbero essere spenti, ma le dimensioni del file lo compensano. Esempio: 40 secondi, 3,7Mb .

Uso

Salva uno / tutti i seguenti script in una cartella all'interno di $PATH . Ecco un esempio sull'utilizzo del primo script per creare uno screencast di una finestra specifica.

  1. Esegui byzanz-record-window 30 -c output.gif
  2. Vai alla finestra (alt-tab) che desideri acquisire. Fare clic su di esso.
  3. Attendi 10 secondi (hard-coded in $DELAY ), in cui ti prepari per la registrazione.
  4. Dopo il segnale acustico (definito nella funzione beep ), verrà avviato byzanz .
  5. Dopo 30 secondi (questo è il significato di 30 nel passaggio 1), byzanz termina. Un bip verrà trasmesso di nuovo.

Ho incluso il flag -c in byzanz-record-window per illustrare che eventuali argomenti al mio script di shell sono aggiunti a byzanz-record stesso. Il flag -c indica byzanz per includere anche il cursore nello screencast.
Vedi man byzanz-record o byzanz-record --help per ulteriori dettagli.

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

Dipendenza: xrectsel da xrectsel . Clona il repository ed esegui make per ottenere l'eseguibile. (Se protesta non c'è makefile, esegui ./bootstrap e ./configure prima di eseguire '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

Versione Gui di byzanz-record-window

(commento di MHC ): mi sono permesso di modificare lo script con un semplice dialogo con la 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 $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"
    
risposta data Rob W 14.10.2012 - 17:44
fonte
49

ffmpeg

Uno degli strumenti migliori che utilizzo è ffmpeg . Può richiedere la maggior parte del video da uno strumento screencast come kazam e convertirlo in un altro formato.

Installa questo da centro-software : viene installato automaticamente se installi l'eccellente pacchetto ubuntu-restricted-extras .

Kazam può produrre nei formati video mp4 o webm . Generalmente ottieni risultati migliori in formato mp4 .

esempio GIF che fa la sintassi

La sintassi di base per convertire video in gif è:

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

I GIF convertiti, in particolare quelli con un frame-per-secondo standard 25/29 possono essere molto grandi. Ad esempio: un webm da 15 kb a 800 kb a 25 fps può essere emesso a 435 Mb!

Puoi ridurre questo problema con un numero di metodi:

framerate

Utilizza l'opzione -r [frame-per-second]

ad esempio ffmpeg -i Untitled_Screencast.webm -r 1 -pix_fmt rgb24 out.gif

Dimensioni ridotte da 435 Mb a 19 Mb

limite dimensione file

Utilizza l'opzione -fs [filesize]

ad esempio ffmpeg -i Untitled_Screencast.webm -fs 5000k -pix_fmt rgb24 out.gif

Nota: si tratta di una dimensione approssimativa del file di output, quindi la dimensione può essere leggermente maggiore di quella specificata.

dimensione del video di output

Utilizza l'opzione -s [widthxheight]

ad esempio ffmpeg -i Untitled_Screencast.webm -s 320x200 -pix_fmt rgb24 out.gif

Questo ha ridotto la dimensione del video di 1366x768 di esempio a 26 Mb

loop forever

A volte potresti volere che il GIF si interrompa per sempre.

Utilizza l'opzione -loop_output 0

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

ulteriormente ottimizzato e ridotto

se utilizzi imagemagick convert con un fattore di fuzz tra il 3% e il 10%, puoi ridurre drasticamente la dimensione dell'immagine

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

, infine

combina alcune di queste opzioni per ridurle a qualcosa di gestibile per Ask Ubuntu.

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

seguito da

convert output.gif -fuzz 8% -layers Optimize finalgif.gif
% Bl0ck_qu0te%     
risposta data fossfreedom 05.03.2012 - 22:46
fonte
33

Silentcast

Silentcast è un altro ottimo strumento basato sulla grafica per creare immagini gif animate. Le sue caratteristiche includono:

  • 4 modalità di registrazione:

    1. Schermo intero

    2. Finestra interna

    3. Finestra con decorazione

    4. Selezione personalizzata

  • 3 formati di output:

    1. .gif

    2. .mp4

    3. .webm

    4. .png (frame)

    5. .mkv

  • Nessuna installazione necessaria (portatile)

  • Directory di lavoro personalizzata

  • Fps personalizzati

Installazione

Se si desidera un'installazione regolare e si esegue una versione supportata di Ubuntu, è possibile installare Silentcast tramite PPA:

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

Se non stai utilizzando una versione supportata di Ubuntu (dovresti davvero aggiornare!) dovrai scaricare l'ultima versione da la pagina GitHub e soddisfa manualmente le dipendenze (puoi procurarti yad e ffmpeg da qui e qui rispettivamente) o, se stai eseguendo una versione leggermente più recente come 13.10 potresti provare scaricando direttamente il .deb .

Se usi Gnome potresti installare l'estensione Topicons per rendere più semplice l'interruzione di Silentcast.

Uso

Avvia Silentcast dal gui dell'ambiente desktop o esegui il comando silentcast in un terminale. Scegli le tue impostazioni e segui le istruzioni sullo schermo. Quando hai finito di registrare ti verrà presentata una finestra di dialogo per ottimizzare l'output finale rimuovendo un certo numero di frame.

Per linee guida sull'utilizzo più approfondite dai un'occhiata al README, o alla versione online di GitHub o la versione locale memorizzata in /usr/share/doc/silentcast con zless o il tuo editor preferito.

Note:

Silentcastèancorainfasedisviluppoe,sebbenesiaabbastanzastabile,potrestiincontrarealcunibug.Selofai,segnalali sul tracker dei problemi di GitHub del progetto . Se hai problemi nell'installare dal PPA e stai utilizzando una versione supportata di Ubuntu lascia un commento qui sotto o contatta il maintainer (me) su Launchpad.

    
risposta data Seth 29.10.2014 - 02:27
fonte
7

Ci sono tutti i tipi di modi complicati e ben funzionanti (presumibilmente) per farlo elencato qui. Tuttavia, non ho mai voluto passare attraverso quel processo prima né dopo. Quindi, uso semplicemente un convertitore online che si adatta alle mie esigenze le poche volte che ho bisogno di farlo. Ho usato questo sito:

link

Non è il mio sito e non sono affiliato con loro in alcun modo. Sono solo uno dei miei segnalibri e ce ne sono molti altri.

    
risposta data KGIII 17.10.2015 - 19:45
fonte
7

Ho creato record-gif.sh , una versione migliorata di % Co_de% di Rob W :

% Bl0ck_qu0te%

  • imposta la registrazione byzanz-record-region ;
  • imposta duration destinazione;
  • seleziona - con il mouse - l'area da registrare;
  • crea uno script per riprodurre la registrazione (cfr save_as ).

install

Ho anche creato uno script di installazione

curl --location https://git.io/record-gif.sh | bash -
    
risposta data Édouard Lopez 06.10.2016 - 22:27
fonte
3
  1. Installa questi 3 pacchetti: imagemagick mplayer gtk-recordmydesktop
  2. Avvia Desktop Recorder per acquisire una parte dello schermo / dell'applicazione da utilizzare come screencast
  3. Scarica ogv2gif.sh dal link
  4. Esegui: ./ogv2gif.sh yourscreencast.ogv
  5. Il file GIF verrà inserito nella stessa directory

100% ispirato dalla risposta di maniat1k .

    
risposta data Nicolas Raoul 30.06.2016 - 09:25
fonte
2

Se vuoi essere ancora più elaborato, puoi utilizzare un metodo più sofisticato rispetto alle gif animate utilizzando lo screencasting su tela HTMl5. Il progetto x11-canvas-screencast creerà un'acquisizione animata di tela html5.

Potresti aver visto alcuni esempi famosi di questa tecnologia sul sito web di Sublime Text. x11-canvas-screencast utilizza questo metodo un ulteriore passo avanti incorporando il rilevamento del cursore del mouse. Ecco una demo di cosa x11- canvas-screencast produce

Il risultato è migliore di una gif animata poiché non è limitata al numero di colori che ha e richiede meno larghezza di banda.

    
risposta data gene_wood 22.09.2015 - 19:37
fonte
2

Ok, quindi per catturare anche i clic del mouse, l'unica cosa che ho trovato è stata key-mon (tramite il README di screenkey ):

Quindi io:

  • Inizia key-mon
  • Utilizza xrectsel per ottenere le coordinate dello schermo inserite in un comando byzanz
  • Esegui il comando byzanz

... e sembra un po 'come questo:

Si noti che key-mon --visible_click disegnerebbe un cerchio attorno al puntatore del mouse al clic del mouse - che preferirei, ma in Ubuntu 14.04.5 LTS questo è un po 'rotto, dato che questo cerchio non appare e scompare abbastanza velocemente per illustra correttamente i clic (ad es. presse e rilasci del mouse).

    
risposta data sdaau 24.08.2016 - 06:34
fonte
1

Ho recentemente creato una versione combinata di script già pubblicati qui.
Fondamentalmente, ti permette di registrare la regione dello schermo, ma con una semplice interfaccia grafica.

Grazie per Rob W per aver fornito questi fantastici script

Ecco il codice (o gist se lo desideri):

#!/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"
    
risposta data Jacajack 26.05.2016 - 22:17
fonte
1

Se vuoi anche registrazioni visibili dei clic del mouse o dei tasti, allora lo screenkey è la soluzione migliore: link

    
risposta data nachtigall 12.06.2016 - 08:25
fonte
0

Utilizza gtk-recordmydesktop e ffmpeg :

apt-get install gtk-recordmydesktop ffmpeg

Esegui RecordMyDesktop acquisisce una parte dello schermo / dell'applicazione da utilizzare come screencast:

gtk-recordmydesktop

Crea ogv2gif.sh con il seguente contenuto:

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

Usalo:

./ogv2gif.sh yourscreencast.ogv

Riferimenti:

risposta data Fedir RYKHTIK 14.02.2017 - 10:15
fonte
0

Ho provato tutto sopra il metodo, ho trovato che il più semplice è:

  1. usa gtk-recordmydesktop e key-mon per ottenere un ogv
  2. ffmpeg -i xx.ogv xx.gif & lt; - senza alcun parametro .

il fps è originale e la dimensione gif è inferiore al file ogv.

    
risposta data utopic eexpress 10.03.2017 - 11:11
fonte

Leggi altre domande sui tag