itaeng

Blog

Pubblicato in:linux script trucchi

Affiancare piĆ¹ video con FFMPEG

18DIC2015

Oggi ho avuto necessità di fare una cosa diversa dal solito: niente programmazione, ma ho dovuto realizzare un video che fosse il risultato di quattro video, affiancati due a due (2 video sopra, 2 video sotto).

Realizzare qualcosa del genere può sembrare difficile, ma con gli strumenti giusti (ed un minimo di dimestichezza con la shell) si tratta di una cosa veramente semplice. Dopo un po' di ricerche e di tentativi, ecco il risultato:

#!/bin/bash

ffmpeg -i 1.avi  -vf "movie=2.avi [in1]; [in]pad=500:210:color=white[in0]; [in0][in1] overlay=250:0 [out]" -crf 5 -b:v 8M out1.avi
ffmpeg -i 3.avi  -vf "movie=4.avi [in1]; [in]pad=500:236:color=white[in0]; [in0][in1] overlay=230:15 [out]" -crf 5 -b:v 8M out2.avi
ffmpeg -i out1.avi  -vf "movie=out2.avi [in1]; [in]pad=500:446:color=white[in0]; [in0][in1] overlay=0:216 [out]" -crf 5 -b:v 8M out.avi

rm out1.avi
rm out2.avi

La prima riga affianca i primi due video (1.avi e 2.avi) in un file temporaneo chiamato out1.avi. Le dimensioni del file risultante sono specificate nell'istruzione pad=500:210, che si occupa di "creare" lo spazio in cui inserire il secondo video, impostando uno sfondo bianco fra un video e l'altro (ho voluto lasciare qualche pixel di distanza fra i due video). L'istruzione overlay=250:0 invece inserisce il secondo video nello spazio creato in precedenza, a 250px da sinistra e 0 dall'alto.

I parametri finali (-crf 5 -b:v 8M) sono necessari per mantenere una qualità decente nel file risultante. Non conosco precisamente il significato di questi parametri, so solo che mi hanno permesso di mantenere inalterata la qualità iniziale dei singoli video. Per maggiori informazioni, consulta il manuale di ffmpeg.

La seconda riga fa la stessa cosa con i file 3.avi e 4.avi, creando un file out2.avi.

La terza riga prende out1.avi e out2.avi e li posiziona uno sopra l'altro. Le istruzioni sono simili, cambiano solamente il padding e l'overlay.

Fatto questo elimino i file temporanei et voilà, il file out.avi contiene i 4 video, affiancati.

Facile, no?

Pubblicato in:segnalazioni trucchi

Disattivare l'autocomplete su chrome (ed altri browser)

04SET2015

Disattivare l'autocomplete per username e password dovrebbe essere una questione semplice, normalmente si tratta solamente di un

autocomplete='off'

da implementare a livello di singolo campo e/o di form. Purtroppo chrome ha deciso di fare a modo suo, e quell'attributo non è sufficiente. L'autocomplete lo vuole usare a tutti i costi, e se trova un campo di tipo password, lui presume che quello precedente sia lo username.

Disattivarlo è semplice, ma è un workaround degno di un Internet Explorer qualunque. Per raggiungere questo obiettivo, è sufficiente mettere -prima dei veri campi username e password- due campi nascosti e fasulli... chrome li vede, pensa di dover usare l'autocomplete lì e si lascia fregare.

Per farla breve, appena dopo l'apertura del form metti qualcosa del genere:

<!-- campi fasulli nascosti, per fregare chrome con l'autocomplete -->
<input style="display:none" type="text" name="fakeusernameremembered"/>
<input style="display:none" type="password" name="fakepasswordremembered"/>

Et voilà. 

Ridicolo, no?

Pubblicato in:segnalazioni php

Alcuni siti si vedono male su chrome 44

24LUG2015

Da quando Google Chrome 44 è stato rilasciato sono fioccati problemi di compatibilità con alcuni siti che non si vedono più correttamente, sembrano essersi persi dei pezzi o in generale si comportano in modo strano.

Beh, è un bug di questa versione di Chrome, che dovrebbe venire aggiornata a breve (il 27 luglio). Ad esserne affetti sono potenzialmente un po' tutti i siti. Personalmente ho riscontrato un problema su un sito PHP "fatto a mano" ed uno in Wordpress.

Nel frattempo, è possibile risolvere il problema "eliminando" due variabili di sessione che "confondono" questa versione di Chrome:

# Fix for CHROME 44 https bug
unset($_SERVER['HTTP_HTTPS']);
unset($_SERVER['HTTPS']);

Tutto lì. A saperlo prima, mi sarei evitato qualche ora di debug... :)

Pubblicato in:segnalazioni

Prima ti obbligo e poi ti spiego come farlo: Chiarimenti sulla cookie law

01LUG2015

Visto che continua ad esserci moltissima confusione sulla cookie law, il Garante della Privacy ha pensato che potesse essere utile spiegare come mettersi in regola con la legge, che nel frattempo era già entrata in vigore.

Lo ha fatto con una semplice immagine (bisogna ammettere che è -abbastanza- ben fatta) che chiarisce probabilmente molti più dubbi di quanto avrebbero fatto intere paginate di spiegazioni in burocratese, quindi... ecco a voi.

Ora, probabilmente non è ancora del tutto chiaro... cosa significa "ridurre il potere identificativo", per esempio? Io uso il servizio X, sono in regola? A questo viene in soccorso un altro sito, quello di SqueezeMind, che ha preparato un paio di altre belle grafiche ed una spiegazione finalmente comprensibile dagli addetti ai lavori.

 

Non perderti la spiegazione, la puoi trovare  sul loro sito.

Pubblicato in:git linux script trucchi

Pre-push GIT Hook - Aggiornare un sito remoto ed il database tramite SSH con un git push

15MAG2015

In questi giorni mi è capitato di dover lavorare su un nuovo progetto e di dover caricare le modifiche online man mano che il procedimento andava avanti... siccome farlo manualmente è un'operazione noiosa e ad alto rischio di errori (collegati all'ftp, carica le modifiche, elimina i files non più utilizzati...) ho pensato di sfruttare la potenza e la velocità di rsync agli hooks di GIT per effettuare questa operazione in automatico, ogni volta che faccio un push.

Puoi vedere il gist a questo indirizzo: Gist

Il funzionamento è molto semplice, eccolo riassunto:

#!/bin/sh
 
##############
## CONFIGURATION
############## 
 
# remote access
sshUser=""
sshPass=""
 
remoteServer="192.168.1.1"
remotePath="/var/www/production"
 
# local database
localDbName="myapp"
 
# remote database
remoteDdbUser="root"
remoteDbPass=""
remoteDbName="myapp"
 
 
##############
## WORKFLOW
############## 
 
# create a database backup and add it to the last commit (amend)
mysqldump -uroot --skip-extended-insert $localDbName > database.sql
git add database.sql
git commit --amend --no-edit
 
# since you can't force the password for SSH, echo it here as a hint (don't do this for critical projects! :))
echo When prompted, please insert this password: $sshPass
 
# update all the files through rsync
echo
echo Updating files...
rsync -rzhe ssh --delete --filter=':- .gitignore' ./ $sshUser@$remoteServer:$remotePath
 
# update the database
echo
echo Updating database...
cat database.sql | ssh $sshUser@$remoteServer "mysql -u$remoteDdbUser -p$remoteDbPass $remoteDbName"
 
# and you're done!
exit 0

Facile, no?