lunes, 10 de mayo de 2010

Convertir secuencia de imágenes en vídeo

Hace poco me he visto en la necesidad de convertir secuencias de imágenes en vídeos. ¿Por qué? En mi caso genero animaciones fotograma a fotograma, y luego compongo el vídeo a partir de ellas, pero puede emplearse para montar presentaciones, crear time-lapses, etc.

Buscando en Google he visto que la forma más sencilla (trabajo sobre GNU/Linux) es empleando FFmpeg. Con una sencilla orden puedo convertir la secuencia de imágenes en vídeo alterando algunos parámetros. Tras mis investigaciones por foros, he guardado estas distintas opciones como útiles para mis fines.

ffmpeg -f image2 -i frame%04d.png -r 24 out.mpg

Esta orden convierte todos los archivos de nombre frame####.png (donde #### es el número de secuencia) en un vídeo llamado out.mpg que reproduce a 24 fotogramas por segundo (-r 24). Si queremos variar el número de cifras de la parte de secuencia del nombre del archivo (digamos que frame01 en vez de frame0001) hay que variar el número que aparece entre el %0 y la d (en el ejemplo, quedaría %02d).

Variando la extensión del archivo de salida se consigue que emplee diversos formatos. A mí me ha funcionado con flv, mpg, mp4 y avi. Sin embargo, es con el codec h.264 con el que he conseguido los mejores ratios de calidad/tamaño. Para ello, hay que ejecutarlo de la siguiente manera:
ffmpeg -f image2 -i frame%04d.png -r 24 -vcodec libx264 out.mp4
Para obtener la máxima calidad con una compresión bastante decente con el codec h.264 conseguí encontrar una serie de parámetros que dieron muy buenos resultados. Lamentablemente no guardé el enlace del foro en donde se discutían, sólo anoté la combinación que me funcionó. Se trata de la siguiente orden:
ffmpeg -f image2 -i frame%04d.png -threads 0 -r 24 -vcodec libx264 -level 41 -crf 20 -bufsize 20000k -maxrate 25000k -g 250 -coder 1 -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -flags2 +dct8x8+bpyramid -subq 7 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -rc_eq 'blurCplx^(1-qComp)' -bf 16 -b_strategy 1 -bidir_refine 1 -refs 6 -deblockalpha 0 -deblockbeta 0 out.mp4
Se puede hacer acto de fe y creer que funciona ciegamente, pero para los curiosos: en la web de FFmpeg se explican todos y cada de estos parámetros.

Con esto ya cubro mis necesidades de creación de vídeos. En los próximos días crearé un nuevo post con resultados.

1 comentario:

CH. O dijo...

hermano saludos me podras ayudar con esto no he podido hacer un video con estas imagenes(00.png,01.png,02.png,03.png) podrias copiarme el comando para ellas.???