Category: linux

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).

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.

Schede audio integrate…

… non sono proprio eccezionali se dovete lavorare i modi digitali. Ecco uno il “waterfall” della mia scheda integrata senza alcun ingresso.

Ingresso flottante, da 0 a 3.9 kHz

Ingresso flottante, da 0 a 3.9 kHz

Fino a 750 Hz notevoli i disturbi, o meglio, le interferenze rilevate. Dopo questa frequenza già meglio, però qualcosa anche a 1kHz si vede. Notevole la riga a 3.1 kHz circa. Molto notevole. L’immagine l’ho stampata da “fldigi” mettendo la sensibilità al massimo. Ovviamente queste righe non sono così forti in confronto ai segnali “veri” che dovremo analizzare. Però non danno tutta questa sicurezza. Ora vediamo con un cavo jack-jack 2.5mm lungo circa 1 metro, lasciato flottante (non è schermato, è un cavo economicissimo) cosa riusciamo a rilevare, che sostanzialmente è anche cosa non vorremmo rilevare.

Ingresso con cavo jack jack economico flottante, da 0 a 2.9 kHz

Ingresso con cavo jack jack economico flottante, da 0 a 2.9 kHz

E in questo caso, chi più ne ha, più ne metta, farei prima ad elencare gli intervalli “liberi” che quelli “occupati”. Insomma il cavetto raccoglie un sacco di immondizia radiata da chissà cosa (computer, monitor, periferiche, etc…). Fatto questo piccolo test, credo che mi metterò alla ricerca di una buona scheda audio USB, da tenere il più vicino possibile all’RTX, e di buon cavettame schermato.

Salvare i video da qualsiasi player flash

So che per i siti più popolari esistono delle comode estensioni, come Easy YouTube Video Downloader, ma di tanto in tanto ci si ritrova a voler salvare un video da un player personalizzato di qualche sito web. Ora vi spiego un modo semplice ed efficace per salvare tutti questi video.

Innanzitutto aprite la pagina col video, mettete il video in pausa, e lasciatelo caricare completamente. Quando il caricamente è finito (ricordatevi di lasciare aperto il browser su quella pagina), dobbiamo solo cercare sul nostro hard-disk dov’è il file che lo contiene. Su linux, o per lo meno sulla mia linuxbox, i flash video (e i flash in genere) vengono stipati nella directory /tmp/, quindi io faccio così:

ls -alh /tmp/Flash*

Verrà stampata a video una lista di file dal nome Flash?????? (dove al posto dei punti di domanda c’è un misto di numeri e lettere), ora con un player video (io uso mplayer) provate a visionare questi file, se il vostro sistema è abbastanza in ordine ce ne saranno pochi, e probabilmente il più grande in dimensioni sarà proprio il video che volete salvare. Alcuni potrebbero essere vecchi video che per qualche crash o altro motivo non sono stati eliminati alla chiusura del browser, visionateli ed eliminateli se non volete salvarli. Quelli che vi interessano li copierete dandogli un nome indicativo e con l’estenzione .flv e il gioco è fatto.

Per gli utenti windows il metodo è lo stesso, però i file vengono salvati in una directory nascosta che ora non ricordo, comunque basta fare una piccola ricerca all’interno delle directory come “dati applicazioni” e simili (tipo le varie “temp” e affini) e scoprirete velocemente dove vengono salvati i video.

Buon salvataggio.

Creare un ramdisk

Ogni tanto si vorrebbe una partizione “virtuale” su cui provare i propri smanettamenti. Script potenzialmente dannosi da debuggare, insomma, qualsiasi cosa, e la soluzione è: creare un ramdisk di piccole dimensioni e lavorarci sopra. Un’altro motivo per volerlo creare potrebbe essere per tenerci tutto il sistema, o parte, e mettere a riposo i dischi. Insomma, potenzialmente ha mille utilizzi.

I modi di crearlo sono due, uno è scrivere/usare uno dei device /dev/ram[0-15] (voi potreste averne di più, o di meno) che però hanno una dimensione prefissata, stabilita nel kernel (e modificabile con un parametro all’avvio, googlate). L’altro modo è più pregiato, e si tratta di

mount -t tmpfs none /var/ramdisk -o size=32m

Ovviamente invece di 32m userete la dimensione che vi interessa, e al posto di /var/ramdisk, il mountpoint che volete. Siccome mi sento generoso vi faccio dono anche dell’incipit di un’altra manpage che è in topic

losetup – set up and control loop devices

Buon lavoro.

Telegramma.

Immaginate di essere alla fiera dell’elettronica e di vedere un fantastico tasto telegrafico cecoslovacco in una bancherella di surplus militare, cosa fate? Io lo compro.

Telegrafia, io ti amo poi ti odio poi ti stimo.

Telegrafia, io ti amo poi ti odio poi ti stimo.

E una volta a casa? Si prende una vecchia tastiera, si cannibalizza il controller (USB) si collega il tasto morse ai capi dov’era collegato l’invio (o qualsiasi altro tasto esclusa la ‘q’), si infila il controller nella nostra linux box, si scarica morse-x e si inizia a tasteggiare. Io ho cablato l’invio così posso usarlo anche per l’im, ovviamente solo per inviare il messaggio. Chicca finale, una delle prime volte che provavo a digitare il mio nominativo (seguito da un punto) in morse.

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Yeah!

Esperimenti con Netcat

La man page ($ man nc) lo definisce “TCP/IP swiss army knife”, e ha ragione. L’ho usato per fare di tutto. Trasferire file, controllare le impostazioni del browser, e anche per puro e semplice divertimento. In questo articolo vediamo come usarlo per giocare con i browser e i server web, anzi, vediamo come usarlo in un modo assolutamente poco utile. Ma per imparare va bene così.

Prima cosa, vediamo come intercettare la richiesta che un nokia N78 manda ad un server web quando richiede la homepage, per farlo apriamo un terminale e diamo il comando:

$ nc -l -p 8080

Dove nc è appunto netcat, -l dice di stare in ascolto, precisamente sulla porta 8080 (-p 8080), fatto questo apriamo il browser sul telefono, connettiamoci alla Wifi domestica, e digitiamo http://ip_del_pc:8080 come destinazione, nel mio caso l’ip è 192.168.1.10

Browser dell'N78

Browser dell'N78

Confermiamo, e poco dopo il terminale ci darà in output la richiesta inviata dal telefono, ecco come si presenta il terminale.

$ nc -l -p 8080
GET / HTTP/1.1
Host: 192.168.1.10:8080
Accept: text/html,text/css,multipart/mixed,application/java-archive, application/java, application/x-java-archive, text/vnd.sun.j2me.app-descriptor, application/vnd.oma.drm.message, application/vnd.oma.drm.content, application/vnd.oma.dd+xml, application/vnd.oma.drm.rights+xml, application/vnd.oma.drm.rights+wbxml, application/x-nokia-widget, */*
Accept-Charset: iso-8859-1, utf-8; q=0.7, *; q=0.7
Accept-Encoding: gzip, deflate, x-gzip, identity; q=0.9
Accept-Language: it;q=1.0,en;q=0.5,fr;q=0.5,de;q=0.5,es;q=0.5,pt;q=0.5
User-Agent: Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaN78-1/20.149; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413
X-Nokia-MusicShop-Version: 09.0820.9
X-Nokia-MusicShop-Bearer: WLAN
x-wap-profile: “http://nds1.nds.nokia.com/uaprof/NN78-1r100.xml”

Con CTRL+C chiudiamo netcat, e vediamo cosa fare. Innanzitutto noto con piacere i richiami a KHTML e WebKit, roba molto seria. Vedo che nell’User-Agent si può vedere addirittura quale versione del firmware sto utilizzando (20.149) e poi ci sono riferimenti al Nokia MusicShop, vabbè. Prendiamo questa richiesta, da GET fino in fondo e salviamola in un file, facciamo attenzione a come finisce il file, dopo xml” devono esserci SOLO due “a capo”, ovvero premete invio due volte. Prima di salvarlo modificate la linea Host, cambiate :8080 in :80, o con la porta con cui è configurato il vostro apache (default :80), io l’ho salvato come ~/N78.get . Ora lanciamo Apache, sulla mia linux box si fa con (da root)

# apachectl start

Sulla vostra potrebbe essere diverso (ad esempio /etc/rc.d/httpd start) documentatevi. Ora che abbiamo un webserver in esecuzione, procuriamoci una risposta valida alla richiesta che ci siamo salvati.

$ nc 192.168.1.10 80 < ~/N78.get
HTTP/1.1 200 OK
Date: Sun, 19 Apr 2009 11:24:13 GMT
Server: Apache/2.2.10 (Unix) DAV/2
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: “404df-2c-3e9564c23b600″
Accept-Ranges: bytes
Content-Length: 44
Content-Type: text/html

<html><body><h1>It works!</h1></body></html>

Ovviamente in questo caso il server è in esecuzione sulla macchina all’ip 192.168.1.10 porta 80 (notare che per la connessione in uscita non si usa -p, ma si scrive solo la porta separata ocn uno spazio dall’ip), se non volete avviare apache, o non l’avete installato, cambiate Host in N78.get con, ad esempio www.un_sito_a_vostra_scelta.com e lanciate

$ nc www.un_sito_a_vostra_scelta.com 80 < ~/N78.get > ~/N78.page

Notare che ho aggiunto un piccolo dettaglio, la redirezione dell’output nel file ~/N78.page, per comodità. Sappiate che ‘nc’ resterà in esecuzione finchè il server non deciderà di interrompere la connessione, se volete interrompere prima, usate CTRL+C. Bene, ora abbiamo una risposta HTTP completa e valida da poter rimandare indietro al telefono.

$ nc -l -p 8080 < ~/N78.page

Quando riceve una connessione netcat invia i contenuti del file ~/N78.page , ora puntiamo il telefono di nuovo all’indirizzo di prima e vediamo se funziona.

Pagina di benvenuto di Apache 2

L'esperimento funziona!

Bene, fine dell’esperimento. Un ultima cosa, vi lascio i comandi, che dovreste aver già capito come funzionano, per trasferire un file. Sul pc ricevente (che supponiamo abbia ip 10.0.0.1)

$ nc -l -p 8080 > ~/file.ricevuto

Sul pc mittente (il cui ip non ci interessa)

$ nc 10.0.0.1 8080 -q0 < ~/file.da.inviare

Il parametro -q0 dice di interrompere subito la connessione dopo aver ricevuto un EOF (End of file). In questo caso è obbligatorio a fine trasmissione un controllo con ‘md5sum’ per accertare che i due file siano uguali.

Tags: ,

categories linux