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!

Aggiornare automaticamente ArchLinux

Dopo il passaggio da Slackware ad ArchLinux, mi sono ritrovato ad abituarmi ad una rolling-relase, ovvero una distribuzione continuamente aggiornata (tecnicamente non adatte a dei server.. ma io ne faccio un uso desktop). Di tanto in tanto gli aggiornamenti sono massicci, anche più di 1 GB, tanto che non possono essere completati in pochi minuti. Per ovviare a questo problema ho creato un file in /etc/cron.daily/ con il nome di ‘pacman-brake’ (il nome è comunque arbitrario) per lanciare ogni giorno il download (ma non l’installazione!) di nuovi pacchetti. Le dipendenze da installare sono, nel mio caso, solo netbrake (e immagino anche nel vostro, visto che cron dovrebbe essere incluso nell’installazione core), in ogni caso:

pacman -S netbrake cron

Fatto questo, basta creare il file /etc/cron.daily/pacman-brake, e al suo interno:

#!/bin/sh
# Scarica aggiornamenti
/usr/bin/netbrake -r 150000 /usr/bin/pacman -Syuw –noconfirm > /dev/Null 2>&1

Così il vostro sistema eseguirà giornarlmente il comando, scaricando ad una velocità massima di 150 kB/s gli aggiornamenti senza chiedere conferma (–noconfirm) e senza installarli (-w).

Clone dell’Arduino Mega

Mi sono comprato un clone dell’Arduino Mega, basato sull’Atmega 1280. Ha 54 pin I/O, di cui 14 utilizzabili come uscite PWM (8 bit) e 16 come ingressi ADC (10 bit di risoluzione) – 4 porte seriali di cui una collegata con un chip FTDI all’USB che si usa anche per alimentarlo e programmarlo. Per il momento ho provato solo alcuni piccoli frammenti di codice per far pulsare un led (PWM) o per usare lo stesso led come rilevatore di luminosità… più avanti prevedo di usarlo più costruttivamente anche se l’ho preso comunque solo per smanettarci, senza avere un progetto bene in mente.

L’ambiente di sviluppo è completamente in C, ed è fornito dal team del progetto Arduino, per tutti i sistemi operativi – è molto ben fatto, ricco di esempi e librerie, molto veloce ed intuitivo. Ottimo.

Il clone dell'Arduino Mega

Il clone dell'Arduino Mega

Assieme  questa board ho comperato un ATtiny85 – MCU piccolissima (DIP-8) ma con molte features (Seriali, PWM, ADC) che potrò usare nel caso mi servisse trasformare un progetto usante la board in un’applicazione fissa. Il costo di questa MCU è di poco più di un dollaro, e le potenzialità sono molte.

Nel frattempo ho anche ricevuto il kit per la SDR , ho rotto una stazione saldante e ne ho presa un’altra. Spero dalla prossima settimana di potermi rimettere al lavoro sul kit per completarlo. Spero di riuscire ad aggiornare il blog più spesso nei prossimi tempi!

La mia prima SDR in Kit – SoftRock V9.0

Avevo qualche soldino da parte da investire nell’hobby radiantistico, e così ho deciso di acquistare un kit per una Software Defined Radio, più precisamente il “SoftRock v9.0 Lite+USB Xtall Receiver with Si570 and Electronically Switched BPF Kit” al prezzo di 56$ + spedizione.

L’SDR in questione dovrebbe ricevere in tutte le HF, e la scheda filtri può essere costruita per operare 160-10 m oppure 80-6 m – devo ancora decidere quale costruirò – verosimilmente sceglierò 160-10 m.

Foto di IK5PWL dal Forum Arifidenza.

Foto di IK5PWL dal Forum Arifidenza.

Dicono abbia una buona sensibilità, e spero che la scheda audio integrata della mia scheda madre sia abbastanza “decente” per una SDR, altrimenti comprerò una scheda esterna USB o FireWire (meglio USB, per eventuali usi col portatile…)

Per ora attendo il pacco contenente il Kit, poi suderò freddo per saldare le SMD, poi suderò caldo per fare tutti gli avvolgimenti in foto.. e alla fine vi farò sapere.

Sono abitudinario, e al mattino…

… mi sveglio, faccio colazione, mi lavo e poi lancio

rsync -avz –delete –delete-after –progress rsync://$MIRROR_PREFERITO/slackware/slackware64-current /Slackware/

Poi se mi sveglio fin troppo fresco, reinstallo tutto e creo l’iso del DVD con:

mkisofs -o ~/slackware64-dvd.iso \
-R -J -A “Slackware Install” \
-hide-rr-moved \
-v -d -N \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-sort isolinux/iso.sort \
-b isolinux/isolinux.bin \
-c isolinux/isolinux.boot \
-V “SlackDVD” .

Ecco, questo per dire che avevo dei problemini con Arch e sono tornato alla distribuzione regina, la Slackware.

Diagnostica di un sistema Linux, ovvero “threads gone wild”

Ogni tanto succede che qualcosa non vada nel verso giusto, nel mio caso qualche processo fa troppo input/output ogni tanto, facendo laggare per qualche secondo il sistema. Non sapendo dove sbattere la testa sono andato a chiedere sul forum di supporto e ho scoperto l’esistenza di un tool che permette di confrontare diverse statistiche del sistema in parallelo. Dstat, un tool davvero formidabile. Io consiglio di provarlo con

dstat -cdnmgsf –top-cpu –top-bio –top-io

L’output di cui agevolo screenshot perchè è troppo largo è il seguente:

Output del comando suggerito "dstat"

Output del comando suggerito "dstat"

Esistono ovviamente molti altri parametri, io usavo questi per vedere chi faceva troppo I/O. Come vedrete genera una linea al secondo (delay personalizzabile, ovviamente) con tutte le statistiche (selezionabili) più salienti, mancherebbe il parametro “-f” di “full” che però usa troppe colonne e non può essere visualizzato (e succederà a chiunque di voi abbia più di un core…)

Rimane il dubbio che il problema sia Xorg, o addirittura in sync_supers che da quanto ho capito è parte del kernel, quindi per il momento ogni tanto mi becco delle laggatine, se qualcuno ha un’idea si faccia avanti.

Nortek HDBOX R1 HDMI – 1Tb

L’altro ieri ho comprato questo box, con incluso un hard-disk da 1Tb, al prezzo di 139 euro. Vediamo le caratteristiche che mi hanno spinto a comprarlo

  • 1Tb di spazio è tanto. Tanto.
  • HDMI, così posso collegarlo con un cavo solo (e non 5, 3YUV+2Audio) alla TV
  • Linux. È un embedded device, processore MIPS, 64Mb di RAM, e un’organizzazione interna da far venire il mal di testa, ma possiede delle partizioni scrivibili nelle quali depositare eventuali programmi compilati per quell’architettura
  • Ethernet. Ha la porta di rete, e oltre a poter riprodurre video da una condivisione windows (nel mio caso samba), ha anche funzionalità NAS (sebbene sia rumoroso quando è acceso), in più ci si può far girare molte cose (proxy, ssh, wget, …)
  • 2 porte USB, con supporto per qualche modello di chiavetta wifi-usb, e soprattutto per attaccarci eventualmente la stampante (se riuscirò a cross-compilare cups), o molte altre cose (l’UPS?)
  • 1 porta USB, la terza, per connettere il disco direttamente a un PC e scriverci dentro a velocità folli (ok, no, non così folli…)
  • Uscita YUV/AV, ingresso solo AV – potrebbero servire. L’ingresso per registrare, e per la funzione time-shift che non ho ancora provato…
  • Led blu. Tutti amano i led blu.

Per contro è rumoroso e non è adatto a stare sempre acceso come NAS nella stessa camera in cui io dormo, molta gente online dice che senza ventolina (che è la principale fonte di rumore) funziona comunqe alla grande senza surriscaldarsi. Vedrò.

Di default ha un’accesso telnet, senza password, che mi lascia un po’ basito se penso che dovrei usarlo come NAS, ma ovviamente si può rimediare spegnendo il telnet e usando SSH con keyfile (non ho ancora provato, quindi per ora sono ipotesi). Mi farebbe molto piacere se avesse qualcosa tipo il wake-on-lan e non so il perchè, mi è venuto in mente ora.

Nortek HDBOX R1 HDMI

Nortek HDBOX R1 HDMI

Non legge moltissimi formati, ma comunque legge tutti quelli che mi interessano, cito dal sito:

Formati video supportati: AVI, MPG, VOB, DAT, MPEG-2 TS, IFO
CODECs video supportati: MPEG-1, MPEG-2, MPEG-4 (DivX 5.x, DivX 4.x, DivX 3.x, XviD)
Decodifica video ad alta definizione: 720p, 1080i

Più che onesto, certo gli MKV sarebbero stati utili, ma conoscendoli… anche no. Per ora così. Magari in futuro avrò più informazioni da condividere.

Google Wave in prova

Pochi giorni fa mentre controllavo l’email, ne trovo una che aspettavo da un po’ di tempo: “Your invitation to preview Google Wave”. Beh, che dire, mi sono iscritto subito, ho mandato una raffica (no, scherzo, una decina) di inviti e ho iniziato subito a smanettarci un po.

Ovviamente per godersi al meglio l’esperienza, servono i Google Gears installati, che io avevo già perchè li usa anche Wordpress per facilitare talune cose, o perlomeno li avevo sul portatile. Su questo nuovo PC non li avevo ancora, e una sfavorevole combinazione del fatto che ArchLinux usi una sua versione di firefox (chiamata shiretoko) e dell’architettura a 64 bit, mi ha fatto fallire l’installazione dal sito di google. Per chi avesse con Arch questi problemi la soluzione è:

yaourt -S google-gears-svn

Detto questo, le prime impressioni su Wave sono positive, però alcune cose vanno ancora smussate:

  1. Io avrei inserito una suddivisione preconfigurata fra Wave pubblici (da integrare nei blog, etc..) e Wave privati (da usare come una Mail+IM+…) così da semplificare la gestione e evitare di pubblicare per sbaglio cose che si vorrebbero mantenere private.
  2. Il fatto che si possano modificare i messaggi altrui, non mi garba. E’ difficile risalire al messaggio originale, sapere chi ha modificato cosa è quasi impossibile, forse usando il playback, comunque non è immediato, e per quanto mi riguarda non è nemmeno garbato. I messaggi dovrebbero essere modificabili solo da chi li ha scritti.
  3. Chiunque nella Wave può invitare altre persone, anche questo potrebbe essere migliorabile, potrebbe ritornare nel discorso delle Wave pubbliche o private, potrebbe esserci una piccola moderazione da parte di chi l’ha iniziata… so che non è nello spirito collaborativo dello strumento, ma parlo vedendolo come un’alternativa all’email+IM in questo momento.
  4. L’inserimento di immagini e PDF funziona bene.. sarebbe bello anche audio/video magari con la possibilità di registrare direttamente dalla webcam, al giorno d’oggi non è gran cosa.
  5. I bot dovrebbero essere differenziati in qualche modo.. potrebbero ad esempio avere l’username e l’icona sulla destra… e comunque dovrebbero poter essere disabilitabili in una wave, o poter essere nascosti.

Per ora queste sono le prime cose che mi sono venute in mente. Ah, se qualcuno vuole provarlo io ho ancora qualche invito disponibile…

Gli inviti vengono comunque "ricaricati" di tanto in tanto..

Gli inviti vengono comunque "ricaricati" di tanto in tanto..

… scrivete pure l’email in un commento, tanto ho la moderazione quindi non verrà pubblicata e non riceverete spam.

Buon Waving!

Tags: ,

categories varie

Facebook Mail?

No, molto probabilmente è solo un indizio che non porta a nulla, ma l’URL della posta in arrivo (interna) su Facebook è:

http://www.facebook.com/inbox/?folder=[fb]messages

Quella tag [fb] potrebbe essere precorritrice di una possibile integrazione di qualche altro tipo di mail nel social network. Magari mail @facebook.com, oppure client POP/IMAP per usare Gmail/altre caselle nel sito. Oppure, molto più probabilmente, non significa nulla.

Navigare fra le “Tab” di Firefox con il multitouch

Non è una cosa difficile, si usa il gesto “twirl” ovvero la rotazione, per passare da una tab a quella precedente o successiva. Aprite firefox (3.5) e digitate nella barra degli indirizzi “about:config”. Seguite la trafila di rito dove Mozilla vi dice di stare attenti, bla bla, e scrivete “gesture” nel filtro.

Ora impostate così queste voci:

browser.gesture.twist.left = Browser:PrevTab
browser.gesture.twist.right = Browser:NextTab

Godetevi la nuova funzione.