Posts tagged: script

Creare un Video partendo da una serie di immagini

Un amico mi ha chiesto se potevo montare una serie di immagini in un video, di modo da proiettarlo durante una serata in cui si esibiva. La prima cosa che ho pensato, da buon Linux-user, è stata quella di usare mencoder per codificare la serie di immagini in un video, usando un FPS piuttosto basso.

Per dare un effetto più “psichedelico” al video però decidemmo che le immagini dovevano comparire per un numero di frame variabile, fra i 2 e i 5 frame (che in un video a 25fps vuol dire, dagli 8 ai 20 centesimi di secondo) – così lo script è stato modificato di conseguenza.

Le immagini andavano montate in una sequenza casuale, e andavano ricercate nella cartella corrente e in tutte le sotto-cartelle – nessun problema in quanto l’utilizzo di find per trovare i file, e shuf per rimescolarne la lista rendono il compito davvero facile. I passaggi da fare prima di lanciare mencoder per la codifica finale sono: convertire le immagini alla risoluzione finale del video (in questo caso 720×576 PAL) e inserire un logo (al centro, ma è modificabile) – tutto questo viene fatto con convert e composite. Il loop finale crea un file list.txt contenente ad ogni riga il nome del file che deve comporre ogni frame del video – in questo caso tutte le immagini compaiono 10 volte, come impostato dalla variabile $ITER.

Lo script è molto grossolano – però funziona abbastanza bene, ed è comunque una base di partenza per chiunque abbia necessità di fare qualcosa di simile. Eccolo:

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en “\n\b”)

ITER=10
DIR=`mktemp -d`
LISTA=`find -iname *.jpg | shuf`
COUNT=0

for i in $LISTA; do
COUNT=$(($COUNT+1))
cp “$i” “$DIR/$COUNT.jpg”
done;

for i in `seq 1 $COUNT`; do
convert -resize 720×576! “$DIR/$i.jpg” “$DIR/$i.jpg”
# watermark
composite -gravity center logo.png $i.jpg $i.jpg
done;

for k in `seq 1 $ITER`; do
for i in `seq 1 $COUNT | shuf`; do
for j in `seq 1 $((2+$RANDOM%4))`; do
# 5FPS – for j in `seq 1 5`; do
echo “$DIR/$i.jpg” >> “$DIR/list.txt”
done;
done;
done;

mencoder mf://@$DIR/list.txt -mf w=720:h=576:fps=25:type=jpg -ovc lavc \
-lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o output.avi

IFS=$SAVEIFS

Purtroppo ho perso l’indentazione, non che sia necessaria per così poche righe di testo. Se non funzionasse, fate attenzione al comando mencoder spezzato su due linee… per altri problemi, ci sono i commenti!

Calcolare il pigreco. (π)

Questo è uno script non mio, ma siccome non mi ricordo la fonte, lo copio-incollo senza pudore tanto non è un segreto industriale. Salvate in pi.sh (o col nome che volete) questo scriptino.

#!/bin/bash

time bc -q -l << EOF
scale=$1
4*a(1)
quit
EOF

Rendetelo eseguibile (chmod a+x ./pi.sh) e ora lanciatelo seguito dal numero di cifre dopo la virgola che volete calcolare.

$ pi.sh 10
3.1415926532

real    0m0.009s
user    0m0.000s
sys     0m0.004s

Tenete conto che è un’approssimazione quindi l’ultima o le ultime due cifre non sono molto affidabili. E’ comunque un test carino (visto il “time”) per fare dei piccoli benchmark. Ma soprattutto la vostra curiosità dovrebbe spingeri fino a questa manpage:

NAME
bc – An arbitrary precision calculator language

Contenti?

Bloccare il PC quando sei lontano

Oggi ero in vena di smanettamenti e ho creato questo scriptino da lanciare all’avvio di KDE4 (ma in teoria anche GNOME, e altri, ma di certo non mi metterò a provarlo) per fare in modo che la sessione venga “lockata” quando siete lontani. Dovete avere il bluetooth sul PC e pure sul cellulare che tenete in tasca. Quando il cellulare non sarà più nel range del computer, partirà lo screensaver con blocco della sessione.

Innanzitutto attivate il bluetooth sul cellulare (o qualsiasi altra periferica) e rendetelo visibile a tutti, ora date il comando

$ hcitool scan
Scanning …
00:13:57:9B:DF:24       Qualsiasi

Segnatevi il MAC address, nel mio caso (è finto) “00:13:57:9B:DF:24″, questa è la periferica che controllerà la sessione. Ora potete mettere il telefono in modalità “invisibile”, ma non spegnere il bluetooth.

Nella vostra home, andata in .kde4/Autostart

cd ~/.kde4/Autostart/

create un file contenente questo script (ad esempio lock.sh) sostituendo alla linea KEY_MAC quello che vi eravate segnati pocanzi:

#!/bin/bash

ENABLED=$(kdialog –yesno “Bluetooth Key?”;echo $?)

if [ "$ENABLED" != "0" ]; then
exit 0
fi

KEY_MAC=”00:13:57:9B:DF:24″;

while [ "1" ]; do
DEVNAME=`hcitool name $KEY_MAC`;

if [ -z "$DEVNAME" ]; then
qdbus org.freedesktop.ScreenSaver /ScreenSaver Lock
fi

sleep 60

done;

Rendete il file eseguibile, così

chmod a+x lock.sh

dal prossimo avvio di KDE4 una finestrella vi chiederà se in quella sessione volete usare questa possibilità, così potrete lavorare tranquilli anche quando dimenticherete il cellulare a casa, o quando è scarico.

Il controllo della presenza del telefono viene fatto ogni 60 secondi.