Posts tagged: mplayer

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!

MPlayer inserito in Slackware.

Ho appena lanciato il mio periodico (mensile?) aggiornamento del tree di slackware-current, che tengo sul desktop in caso abbia bisogno di installazioni d’emergenza (creo la iso con l’ultima -current e sono pronto a dar battaglia a qualsiasi hard disk). Ecco dicevo, lanciato rsync mi sono accorto che dentro la Slack finalmente c’è MPlayer, che io fino ad ora ho pazientemente ricompilato ogni volta che installavo.

Sono curioso di vedere se e qualche codecpack viene distribuito.

Fare uno screenshot ad un video

Ovviamente parlo di metodi automatizzabili, così potrete inserirli nei vostri script. Ora non ricordo bene il motivo per cui mi era servito, ma mi pare che la risposta non fosse stata difficilissima da trovare, ma siccome potrebbe servirmi di nuovo, o potrebbe servire ad un ipotetico lettore di questo blog, scrivo quì sotto il comando per chi ha installato mplayer. Basta fare un:

mplayer -ss 00:00:05 -frames 1 -nosound -vo jpeg input.movie

Questo genera uno screenshot al quinto secondo del video. Non so se possa esservi utile o meno, ma a mio tempo lo fu.