L’evoluzione naturale, dopo aver giocato in lungo ed in largo con l’Arduino, è unire Processing al tutto e vedere cosa emerge… alcune seghe mentali sono già on their way, questo post si limita a mostrare come catturare un video su Linux (ed applicare un effetto real time, già che ci siamo).
Come mai un post dedicato, qualcuno si chiederà… bè, perchè se siete su Linux dovete fare qualche rapida ricerchina per poter catturare video da webcam direttamente da Processing, dato che la libreria di default funziona solo su Mac e Windows (testata peraltro da me su quest’ultimo, e va); per fortuna, qualche anima pia della community ha creato una seconda libreria che sfrutta l’amato (?) GStreamer e ci permette di sfruttare come si deve l’amato sistema operativo.
L’installazione è estremamente semplice, di fatto si tratta di estrarre l’archivio nella cartella libraries (a proposito: lo sapevate che tale cartella si può collocare, in Processing come in Arduino, dentro la cartella degli sketch? Estremamente comoda se condivisa su Dropbox tra computer diversi!), ed il gioco è fatto: tra gli esempi, appaiono ora anche quelli di GSVideo, pronti ad essere provati. Se avete un solo dispositivo video, quello verrà caricato di default, altrimenti dovreste specificare il device.
Se siete su sistemi a 64 bit, c’è da penare un filino: per prima cosa dovete sostituire la directory java dentro Processing con la versione del JDK a 64 bit (il default è solo a 32), o in alternativa fate un symlink alla directory del vostro sistema dove avete già il JDK, e successivamente bisogna sostituire le librerie OpenGL in modes/java/libraries/opengl/library/linux64 con quelle installate nel vostro sistema (per fare questo dovrete installare libjogl per Java (su Debian/Ubuntu c’è l’apposito pacchetto, suppongo ci sia anche sulle altre distro)), con alcuni pratici symlink. Far partire Processing con linux32 non è purtroppo sufficiente…
Riguardo il video: ho messo assieme l’esempio che renderizza la differenza tra due frame successivi con quello che salva il video su file, e mi sono ripreso con la webcam mentre suonavo; il video non contiene audio, dato che il punto era mostrare che GSVideo funziona, non tanto registrare le note suonate; verranno esempi più avanti in cui metterò assieme diverse cose, ora come ora va bene così.
Se siete interessati, il file lo potete trovare qui (l’ho nominato con estensione java, così che Gist lo riconoscesse con la sintassi giusta, ma in realtà è un file pde).
Postilla
Nella registrazione avevo impostato gli fps del file salvato a 25, ma mi sono reso conto che il valore reale si aggirava attorno a 15, ovvero il video finale era accelerato rispetto alla realtà; semmai a qualcuno servisse, ecco il comando per diminuire gli fps usando ffmpeg e yuvfps (con probabile perdita di qualità, ma se volete un lavoro fatto meglio fate qualche esperimento di cattura e verificate che gli fps in output siano corretti direttamente alla fonte, invece che rimediare in un secondo momento…):
ffmpeg -i video.avi -f yuv4mpegpipe - | yuvfps -s 30:1 -r 30:1 | ffmpeg -f yuv4mpegpipe -i - -b 28800k slow.avi
Ovviamente sostituite al parametro b il valore di qualità in uscita che preferite…