Come creare presentazioni multimediali con vnc2swf

It's only fair to share...Tweet about this on TwitterShare on FacebookShare on LinkedInPin on PinterestShare on RedditShare on Google+

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 &

It's only fair to share...Tweet about this on TwitterShare on FacebookShare on LinkedInPin on PinterestShare on RedditShare on Google+