linux video ffmpeg linux screencast gif

Creare screencast in formato gif

Come registrare lo schermo e trasformare il video in gif animata

Ti piacerebbe creare un video come questo?

Screencast gif

Registrare lo schermo con ffmpeg

All'inizio del video si vede la chiamata:

screencast 1048x773 0,0

screencast è una semplice funzione bash (o zsh nel mio caso)

screencast () {
  ffmpeg -video_size $1 -framerate 25 \
    -f x11grab -i :0.0+$2 -nostats \
    -loglevel quiet \
    ~/screencast-$( date +%Y%m%d-%H%M%S ).mp4
}

Questa funzione registra a 25fps, usando x11grab come sorgente. I due parametri impostano la dimensione e la posizione della porzione di schermo da registrare. L'ho scritta così perché normalmente devo registrare porzioni di schermo, invece di tutto il desktop composto da 2 schermi.

Il file viene salvato nella cartella home con il nome screencast seguito da data e ora di registrazione.

Ho registrato a 25fps anche se poi l'immagine gif che voglio ricavarne ha un framerate più basso, perché se poi ho voglia di tenere anche il video non devo ripetere la registrazione.

Con ffmpeg si fa sempre in tempo a diminuire il framerate.

Creare l'immagini gif animata

Non sarebbe difficile, il problema è che se convertiamo con un semplice

ffmpeg -i screencast-20151210-090849.mp4 anim.gif

Ci troviamo con un'immenso file, nel mio caso occupa circa 140MB per secondo!

Quindi va compresso!

Dopo varie prove, anche con il promettente gifsicle, ho trovato che ffmpeg riesce a fare tutto, ma ha bisogno di qualche configurazione...

ffmpeg -i screencast-20151210-090849.mp4 -vf fps=5,scale=640:-1:flags=lanczos,palettegen palette.png
ffmpeg -i screencast-20151210-090849.mp4 -i palette.png -filter_complex "fps=5,scale=640:-1:flags=lanczos[x];[x][1:v]paletteuse" anim.gif

In questo modo produco un'animazione di 5fps, scalata ad una larghezza di 640px. Riesce ad ottenere una buona compressione perché inizialmente genera una paletta di colori ottimizzata per il video.

Meglio ancora... byzanz!!!

byzanz è uno strumento scritto in C per Gnome che registra lo schermo direttamente in formato gif, senza passare per formati intermedi.

Per questo riesce a creare file estremamente ottimizzati.

byzanz

Il progetto si trova su github e si può installare anche su sistemi non Gnome (io l'ho installato su KDE e funziona da riga di comando).

byzanz

Ma la domanda è...

Perché usare gif quando c'è h264 che è molto più leggero? O meglio ancora h265? Perché è veramente una soddisfazione vedere una vecchia gif!

Ti è piaciuto l'articolo? Condividilo! Commentalo!

comments powered by Disqus