gentoo linux, java, software libre y otras hierbas
Oct, 24 2008 - 6:22 am

Efectos avanzados con hooks con ffmpeg [4ra parte]

Como hemos visto en otras entradas relacionadas con ffmpeg, esta herramienta es bastante útil para realizar una gran cantidad de tareas de edición de video. Sin embargo, aparte de simplemente convertir video o extraer audio, existen otros usos avanzados con el que podemos crear algunos efectos interesantes. En esta entrada aprenderemos a usar algunos de ellos, todos en un solo ejemplo.

Continuando con un ejemplo de otra entrada, en donde poníamos en cámara lenta un video, vamos a agregar un par de efectos. Lo primero será crear una cortina que cubra el video, y posteriormente un par de imágenes moviéndose que simularán un par de luces.

Primer ejemplo – Crear un video estático a partir de una imagen con ffmpeg

Lo primero es crear un video en donde tengamos las cortinas estáticas. Así, usando ésta imagen, el comando sería el siguiente:

ffmpeg -loop_input -i cortina.jpg -t 10 cortina.mpg

Esto creará un video con una imagen estática. La opción -loop_input es imprescindible puesto que el archivo de entrada es una simple imagen, es decir, solo un frame, y por tanto es necesario repetirlo durante el video. La opción -t indica a ffmpeg que el video durará 10 segundos.

Segundo ejemplo – Sobreponer imágenes en movimiento usando hooks

Ahora que tenemos el primer pedazo de nuestro video, vamos a jugar con otro tipo de efecto: movimiento de imágenes. Para ello vamos a ejecutar un comando bastante largo, pero fácil de digerir (eso espero):

ffmpeg -i cortina.mpg -vhook ‘/usr/lib/vhook/imlib2.so -x 100-(40*(sin(N/10))) -y ((H-(1.5*h))*(sin((N/10)+25)))+(h*2/3) -i luces.png’ -vhook ‘/usr/lib/vhook/imlib2.so -x 150+(40*(sin(N/10))) -y ((H-(1.5*h))*(sin((N/15)+45)))+(h*2/3) -i luces.png’ telon.mpg

¡Es todo! ¡Un comando fácil de recordar! Bueno, la verdad no es tan complicado como puede parecer; sin embargo te recomiendo que lo ejecutes por partes:

ffmpeg -i cortina.mpg
-vhook ‘/usr/lib/vhook/imlib2.so
-x 100-(40*(sin(N/10)))
-y ((H-(1.5*h))*(sin((N/10)+25)))+(h*2/3)
-i luces.png’
-vhook ‘/usr/lib/vhook/imlib2.so
-x 150+(40*(sin(N/10)))
-y ((H-(1.5*h))*(sin((N/15)+45)))+(h*2/3)
-i luces.png’ telon.mpg

Explicación del comando anterior…

Ciertamente lo único difícil del comando anterior es el uso de los hooks (-vhook). Sin ellos el comando sería algo así:

ffmpeg -i cortina.mpg telon.mpg

Por lo tanto es importante entender el uso y opciones de los hooks; sino tienes ni idea, puedes leer estos artículos en donde explico claramente qué son y cómo utilizarlos:

Tercer ejemplo – Extraer una imagen a partir de un video

Ahora vamos a extraer el primer frame del video al cual vamos a hacerle el montaje. En mi caso se llama lentas.mpg y lo tomé de una entrada anterior.

ffmpeg -itsoffset 0 -i lentas.mpg -vcodec png -vframes 1 -f rawvideo aun.png

Lo único a resaltar del comando anterior es el uso de la opción -vframes 1, que indica a ffmpeg que vamos a extraer un frame solamente. Luego creamos un video corto con dicha imagen:

ffmpeg -loop_input -i aun.png -t 3 mas_tiempo.mpg

Con el comando anterior creamos un video con una imagen estática, que en el siguiente pasos cubriremos con la cortina en movimiento…

Cuarto ejemplo – Cortina en movimiento (efecto abrir un telón)

En este caso usamos un hook para arrastrar la imagen de la cortina sobre el video que creamos en el paso anterior.

ffmpeg -i mas_tiempo.mpg -vhook ‘/usr/lib/vhook/imlib2.so -x 0 -y (-N*3) -i cortina.jpg’ abre_telon.mpg

Pasos finales

Luego de realizar todos estos pasos, no nos queda mas sino unir los tres pedazos importantes y añadirle audio:

$ cat telon.mpg abre_telon.mpg lentas.mpg > resultado.mpg
$ ffmpeg -i resultado.mpg -i sonido.mp3 final.mpg

El resultado del video…

Descargar archivos usados en el ejemplo

Descargar archivos

6 Comentarios | deja el tuyo

6 Comentarios en “Efectos avanzados con hooks con ffmpeg [4ra parte]”

  1. pablo dice:

    no lo ice pero me gusto el videos de las chiks
    jajaja

  2. noi dice:

    Eso de hacer videos con una imagen no sabia como hacerlo y tenia que usar winbugs! :X

    Que bien que lo hayas puesto! :D

    Saludos

  3. Abraham dice:

    Excelente aporte brother =)

  4. rocket dice:

    hola,
    muy buenos ejemplos… pero tienes alguna formula de vhook para rotar una imagen en un video?

  5. Mancuso dice:

    Hola, quisiera saber sí todo esto como se lo hace en window? Gracias por adelantado.

  6. fernando dice:

    son como lla verga no entiendo nada

¡Déjanos tu comentario!