Il titolo di questo post inizia con "Screencast Perfetto", e magari ad alcuni potrà sembrare un tantino esagerato, ma secondo me non lo è affatto. In Gnu/Linux esistono diversi programmi per fare uno screencast, ne cito uno per tutti, RecordmyDektop, anche se io ho sempre preferito utilizzare FFmpeg, Quello che ho notato in tutti i programmi è la "difficoltà" di centrare la finestra o il terminale in maniera precisa, certo nulla di grave, basta mettersi lì e perdere un pò di tempo per trovare il rettangolo perfetto. Però finalmente io ho trovato la soluzione che mi soddisfa completamente, e questo grazie a FFmpeg, che io amo molto, tanto è vero che gli ho dedicato una categoria esclusiva 🙂 Comunque andando al sodo la soluzione è la seguente:
$ xwininfo
digitando nel terminale xwininfo e successivamente toccando una finestra, avremo a disposizione molte informazioni:
xwininfo: Please select the window about which you
would like information by clicking the
mouse in that window.
xwininfo: Window id: 0x2424585 (has no name)
Absolute upper-left X: 274
Absolute upper-left Y: 219
Relative upper-left X: 274
Relative upper-left Y: 219
Width: 654
Height: 439
Depth: 0
Visual: 0x21
Visual Class: TrueColor
Border width: 0
Class: InputOnly
Colormap: 0x0 (not installed)
Bit Gravity State: ForgetGravity
Window Gravity State: NorthWestGravity
Backing Store State: NotUseful
Save Under State: no
Map State: IsViewable
Override Redirect State: yes
Corners: +274+219 -352+219 -352-366 +274-366
-geometry 654×439+274+219
io ho preso queste informazioni toccando la finestra che mi interessava, e come si può vedere ci sono molti dati utili, tra cui il posizionamento-Corners-geometry. Adesso non bisogna fare altro che darle in pasto a FFmpeg. Quindi per prima cosa bisogna creare lo script record.sh, ed incollarci dentro:
#!/bin/sh
INFO=$(xwininfo -frame)
WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+')
WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' )
ffmpeg -f x11grab -r 25 -b 2000k -s $WIN_GEO -i :0.0+$WIN_XY /tmp/screencast.avi
in caso di problemi di formattazione si può scaricare da quà:
settare i permessi:
$ chmod +x record.sh
e lanciare:
$ ./record.sh
adesso non dobbiamo fare altro che toccare la finestra da registrare e lo script si occuperà in automatico della posizione precisa, salvando lo screencast in /tmp. Attenzione: per registrare il terminale bisogna toccare la barra della finestra, altrimente lo script non riesce a determinare l'esatta posizione, non so il motivo, per quanto riguarda tutto il resto, basta cliccare in un punto qualsiasi delle finestre.
FFmpeg ti amo!!!
enjoy 😉