Registrazione di uno screencast GIF di Emacs


35

Vedo molte persone che pubblicano GIF animate che mostrano le funzionalità di Emacs, ma non ho visto una bella passeggiata nel crearne una. Esiste un codice che tenta di collegare i fotogrammi chiave di GIF ai tasti premuti in Emacs? Esistono pacchetti o funzioni elisp per automatizzare il processo? Mi piacerebbe essere in grado di premere un tasto per avviare la registrazione, premerlo di nuovo per interrompere e richiedere un nome file per salvare il GIF.

Domanda correlata, esiste un pacchetto per la registrazione di screencast più lunghi all'interno di Emacs?


Il 90% della domanda è fuori tema: chiedere strumenti per realizzare GIF animate (di Emacs o altro). L'unica parte sull'argomento è richiedere il codice Elisp per automatizzare tale processo. Valuta la possibilità di modificare il titolo e il corpo della domanda per porre solo quest'ultimo: codice Elisp per facilitare la creazione di GIF animate.
Disegnò l'

Se stai cercando un'alternativa a Windows, ScreenToGif (vedi screentogif.codeplex.com) potrebbe essere tuo amico. È un eseguibile che ti consente di inquadrare una parte dello schermo, registrarlo, modificarlo con il testo o eliminare i fotogrammi o accelerarlo o rallentarlo se lo desideri. Lo uso per i miei screencast.
ReneFroger,

Risposte:


24

Sì, c'è un pacchetto per la registrazione di screencast in Emacs, si chiama

camcorder.el

Non posso ancora promettere nulla, dato che l'ho testato solo sul mio computer, ma posso dirti che funziona per me. :-)

  • Per usarlo, basta chiamare M-x camcorder-record.
  • Verrà visualizzato un nuovo fotogramma più piccolo e verrà avviata la registrazione.
  • Al termine, premi F12e attendi che la conversione finisca.

Screencasts possono essere generati in qualsiasi formato riconosciuto dalla imagemagick's convertcomando. Puoi anche mettere in pausa la registrazione con F11!

Se si desidera registrare senza una cornice popup, utilizzare M-x camcorder-mode.

dipendenze

Per la registrazione, camcorder.elutilizza le seguenti utility linux. Se hai questi, dovrebbe funzionare immediatamente. Se usi qualcos'altro, dovresti comunque riuscire a farlo funzionare configurando la camcorder-recording-commandvariabile.

  • recordMyDesktop
  • mplayer
  • ImageMagick

Risoluzione dei problemi

Sul mio computer, ho notato che Emacs con ID finestra ha segnalato

(format "%x" 
 (string-to-number
  (frame-parameter (selected-frame) 'window-id)))

differiva dall'ID riportato da WM con l' wminfoutilità.

Ho aggiunto la variabile camcorder-window-id-offsetper correggerla. Il valore predefinito è -4, ma potrebbe essere necessario aumentarlo o diminuirlo per far corrispondere quei due numeri.


Solo perché tutte le altre risposte hanno usato o menzionato Byzanz, sono curioso di sapere perché hai rifiutato? (a favore di recordmydesktop, a quanto pare).
phils,

@phils Non sono riuscito a far funzionare Byzanz a durata variabile, ho dovuto dargli una durata predeterminata. recordmydesktop funziona con segnali di interruzione.
Malabarba,

Ho usato xwininfoper determinare l'ID giusto da usare (non ho un wminfosul mio sistema).
YoungFrog,

Ho anche notato che le nuove versioni dell'uso della videocamera outer-window-id(invece di window-id) e non è più necessario un offset, ma questo cambiamento non è ancora arrivato su melpa-stable.
YoungFrog,

1
@YoungFrog grazie per il promemoria. Ho spinto un rilascio stabile ora.
Malabarba,

20

Ho pubblicato una domanda simile su / r / Emacs .

Per la registrazione di GIF, le opzioni principali sono:

  • Byzanz record:
# 12 second duration, top left corner, 700x800 pixel gif
$ byzanz-record -d 12 -x 0 -y 0 -w 900 -h 700 output.gif
# more documentation at https://wiki.ubuntu.com/CreatingScreencasts
  • LICEcap (Windows e OS X)
  • ffmpeg / avconv (avconv è un fork di ffmpeg):
$ avconv -y -video_size 200x100 -f x11grab -i :0.0+0,50 frame-%04d.gif
$ gifsicle --loop -O3 -d5 frame-*.gif > emacs.gif

Per mostrare i tasti premuti, è sufficiente un'applicazione che mostri i tasti. key-mon fornisce un'app GUI per questo. Esiste ovviamente una modalità Emacs per mostrare i tasti premuti: command-log-mode .


Potresti elaboccare un po 'su quei comandi? Con che frequenza vengono catturati i frame con quello?
Malabarba,

5

Ho usato Byzanz per generare tutte le mie GIF. Registro con una schermata per eseguire il byzanzcomando, una per la registrazione. Alcuni esempi sono nella mia guida qui .


4

Ho usato Byzanz per registrare gif

Installalo prima, inserisci questo snippet in rr (regione record) nel tuo $ PATH:

#!/bin/bash
# record screencast of a region into a gif using `byzanz-record`

# Delay before starting
DELAY=5

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

printf "usage: rr [time] [file]\n"

# Duration and output file
if [ $# -gt 0 ]; then
    D="--duration=$@"
else
    echo Default recording duration 10s to $HOME/recorded.gif
    D="--duration=10 $HOME/rarecorded.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

e questo in rw (finestra record) nel tuo $ PATH:

#!/bin/bash
# record screencast of a region into a gif using `byzanz-record`

# Delay before starting
DELAY=5

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

printf "usage: rr [time] [file]\n"

# Duration and output file
if [ $# -gt 0 ]; then
    D="--duration=$@"
else
    echo Default recording duration 10s to $HOME/recorded.gif
    D="--duration=10 $HOME/rarecorded.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 ${ARGUMENTS} $D
beep

Ora puoi usare rr e rw per registrare regione / finestra in gif (puoi cambiare l'ora e la posizione per le tue esigenze).


Supporta la registrazione e la visualizzazione dei tasti?
Erjoalgo,

@erjoalgo no, non mostra i tasti.
CodyChan il

2

Un'altra opzione usando QuickTime Player (funziona su OSX, non lo so su Windows). I requisiti sono: ffmpegegifsicle

  • Apri QuickTime e avvia File -> Nuova registrazione dello schermo
  • Al termine File -> Esporta -> Come filmato con opzione di qualità completa
  • Ora converti il ​​cast dello schermo con questo comando:
    • ffmpeg -i yourscreen.mov -s 600x400 -pix_fmt rgb24 -r 10 -f gif - | gifsicle --optimize=3 --delay=3 > out.gif
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.