Time-Lapse Videos con mplayer y ffmpeg

28 views
Skip to first unread message

Revista Occams Razor

unread,
Jan 24, 2010, 1:34:19 PM1/24/10
to Revista Occam's-razor
Hola a todos!

Como siempre estamos hasta arriba, pero hemos sacado un rato para
preparar un pequeño script basado en uno de los trucos del último
número de la revista.

Para los que no lo sepáis, esos vídeos en los que el tiempo parece que
está acelerado se denominan, en la lengua de Shakespeare,
time-lapse. No tenemos ni idea de como traducirlo... pero si
tuviéramos que hacerlo sería algo así como "vídeo por lapso de
tiempo".

La cosa es que se nos ocurrió la idea, al ver como la nieve se
derretía lentamente... ¡Podemos escribir un sencillo
script utilizando mplayer y ffmpeg para generar time-lapsed
videos... wow!!. Bueno, el truco en el último número de Occam's
utilizaba memcoder para capturar y generar el vídeo directamente, pero
hay un problema. No podemos decirle a memcoder que capture menos de un
cuadro
por segundo (o al menos no hemos encontrado la opción para
ello)... por eso hemos escrito un sencillo script.

El resultado lo podéis ver aquí:

Dirección youtube

... bueno, sí, se nos hizo de noche grabándolo :)... fueron unas 3
horas más o menos.

El script lo hemos escrito en Perl, pero podría muy fácilmente ser
un simple shell script. Aquí lo tenéis para que podáis generar
vuestros propios vídeos... si os apetece. Si alguien se anima no
olvidéis decirnos algo ;)

Saludos

P.D.: Sí, el modo esclavo de mplayer mola!

--8<------------------------------------------------
#!/usr/bin/perl
#

print "Time-Lapse Fácil\n";
print "por Occam's Razor 2010\n\n";

# Creamos FIFO de control
system "mkfifo /tmp/mpcontrol.fifo";

# Lanzamos mplayer
# Probablemente vosotros tengáis que utilizar /dev/video0
# y cambiar la resolución
system "mplayer -slave -quiet -input file=/tmp/mpcontrol.fifo -vf
screenshot -tv driver=v4l:device=/dev/video1:height=480:width=640 tv://
&";

# Algunas cuentas...
$total = 2.0 * 60 * 60; # Dos hora de grabación
$final = 30; # Reducidas a 30 segundos de video
$total_frames = $final * 25; # a 25 frames por segundo
$espera = $total/$total_frames;

print "Duración total: $total sec\n";
print "Duración final: $final sec\n";
print "Capura imagen cada $espera secs\n";

for ($i = 0; $i < $total_frames; $i++) {
# Le decimos a mplayer que capture una imagen :)
system 'echo "screenshot 0" > /tmp/mpcontrol.fifo';
sleep $espera;
}


system "killall mplayer; rm /tmp/mpcontrol.fifo; ffmpeg -y -acodec
copy -sameq -r 25 -i shot%04d.png movie.mp4";

--8<------------------------------------------------

Revista Occams Razor

unread,
Jan 24, 2010, 2:29:22 PM1/24/10
to Revista Occam's-razor
La dirección de Youtube es esta

http://www.youtube.com/watch?v=-kk-jxqZ-L8

Un pequeño problema de "cut&paste"...

Saludos

Reply all
Reply to author
Forward
0 new messages