Come creare presentazioni multimediali con vnc2swf
Scopo del gioco
Chi di voi non ha mai visto uno “screencast”?
Sono delle registrazioni di quello che avviene sullo schermo del computer, tipicamente possono essere usate per la formazione a distanza o per realizzare delle semplici presentazioni multimediali.
Sono l’equivalente audiovisivo del podcasting, che ha invece solitamente solo un flusso audio.
Non esiste uno standard riguardante i formati che possono essere usati, ma quasi tutti gli esempi presenti in rete usano il ben noto formato SWF di macromedia flash player.
Il trucco è usare il protocollo vnc per registrare una sessione interattiva sul monitor, e contemporaneamente, registrare l’audio. Una volta registrati i due flussi potranno essere convertiti in un filmato SWF completo di audio mp3 (quasi) perfettamente sincronizzato.
Cosa serve
- una macchina Linux
- vnc2swf
- vncX11
- lame
- sox
Lo script che segue è un adattamento di quello presente sul sito di vnc2swf, di mio ho solo aggiunto i comandi per la registrazione e per lanciare il browser alla fine e controllare l’esito della registrazione.
Buon divertimento!
#!/bin/sh
##
## recordwin.sh
## $Id: recordwin.sh,v 1.1 2005/11/11 04:58:33 euske Exp $
##
## Quick recording script for UNIX.
##
## usage:
## recordwin.sh [-display disp] [-name winname] [-id winid] output.swf
##
INSTALLDIR="/home/ale/bin/vnc2swf"
RECCMD=rec
BROWSER=konqueror
VNC2SWF="python $INSTALLDIR/vnc2swf.py"
PYEDIT="python $INSTALLDIR/edit.py"
X11VNC=x11vnc
#X11VNC=vncserver
XWININFO=xwininfo
AWK=awk
usage() {
echo "usage: $0 [-display display] [-name windowname] [-id windowid] swfname"
exit 2
}
# clean all
killall -9 x11vnc
xwopts=
swfopts=
display="$DISPLAY"
while [ $# -gt 1 ]; do
case "$1" in
-name) shift; xwopts="$xwopts -name $1";;
-id) shift; xwopts="$xwopts -id $1";;
-display|-d) shift; display="$1"; xwopts="$xwopts -display $1";;
-*) usage;;
esac
shift
done
if [ $# -lt 1 ]; then usage; fi
case "$1" in
-*) usage;;
esac
swffile="tmp$1.swf"
# Remove vnc and swf files
rm $1.vnc
rm $1.swf
geometry=`$XWININFO $xwopts |
$AWK '/Absolute upper-left X:/{x=$4}
/Absolute upper-left Y:/{y=$4}
/Width:/{w=$2}
/Height:/{h=$2}
END {printf "%dx%d+%d+%d",w,h,x,y}' `
# launch x11vnc
$X11VNC -quiet -display "$display" -viewonly -localhost -cursor -wait 10 -defer 10 >/dev/null 2>&1 &
#$X11VNC -quiet -display "$display" -viewonly -localhost -cursor -wait 10 -defer 10 &
# wait x11vnc
echo "Waiting for x11vnc to start..."
sleep 6
echo -e "\a"
echo "-----------------------------------------"
echo "Buongiorno, sono ................"
echo "questo screencast si intitola...."
echo "ed è stato registrato "
date
echo "-----------------------------------------"
echo "Launch vnc2swf..."
# start rec
rec -w -t wav -r 44100 $1.wav &
# start playback (in case you need to sync video to an existing audio)
#play $1.wav &
# launch vnc2swf
$VNC2SWF -n -o "$swffile" $swfopts -C $geometry
# stop rec
killall rec
killall -9 sox
# lame
lame -m mo $1.wav $1.mp3
# crop
$PYEDIT -c -a $1.mp3 -o $1.swf $swffile
echo $PYEDIT -C $geometry -c -a $1.mp3 -o $1.swf $swffile
# launch browser
$BROWSER $1.html >/dev/null 2>&1 &