Pregunta ¿Por qué no puedo obtener la velocidad de fotogramas correcta cuando uso avconv para convertir una secuencia de imágenes a un gif?


Necesito convertir una serie de imágenes en gifs.

Encontré tres maneras amplias de hacer esto. Uno involucrando a ImageMagick, uno involucrando gifsicle y otro involucrando a avconv.

No puedo usar Imagemagick porque es mucho más lento que cualquiera de los otros métodos. No puedo usar gifsicle porque no puede funcionar con archivos "png". Podría convertir los PNG en gifs con el comando 'mogrify' de ImageMagick y luego juntarlos en un solo gif con gifsicle, pero esto implicaría desacelerar las cosas con mogrify, que es un factor decisivo para mi caso.

He descubierto cómo hacer lo que necesito con avconv, pero por alguna razón el gif resultante tiene el doble de velocidad de fotogramas.

Este es el comando que estoy usando:

avconv -i frame%15d.png -s qvga -vf format=rgb8,format=rgb24 -pix_fmt rgb24 -r 10 output.gif

Y la salida con eso:

avconv version 9.13-6:9.13-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
  built on May  9 2014 13:34:03 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, image2, from 'frame%15d.png':
  Duration: 00:00:12.04, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: png, rgb24, 320x240, 25 fps, 25 tbr, 25 tbn
File 'output.gif' already exists. Overwrite ? [y/N] y
Output #0, gif, to 'output.gif':
  Metadata:
    encoder         : Lavf54.20.3
    Stream #0.0: Video: rawvideo, rgb24, 320x240, q=2-31, 200 kb/s, 90k tbn, 10 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png -> rawvideo)
Press ctrl-c to stop encoding
frame=  121 fps=  0 q=0.0 Lsize=   10406kB time=12.10 bitrate=7044.8kbits/s    
video:27225kB audio:0kB global headers:0kB muxing overhead -61.779245%

Hay 301 imágenes pensadas para durar 30 segundos, razón por la cual estoy forzando una tasa de fotogramas de 10. Sin embargo, parece ignorar eso.

Si también fuerzo la velocidad de cuadro de entrada con "-r 10", el gif resultante dura 60 segundos a la mitad de mi framerate deseado.

Comando con FPS forzado en entrada y salida:

avconv -r 10 -i frame%15d.png -s qvga -vf format=rgb8,format=rgb24 -pix_fmt rgb24 -r 10 output2.gif

Y el resultado:

avconv version 9.13-6:9.13-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav developers
  built on May  9 2014 13:34:03 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
Input #0, image2, from 'frame%15d.png':
  Duration: 00:00:12.04, start: 0.000000, bitrate: N/A
    Stream #0.0: Video: png, rgb24, 320x240, 25 fps, 25 tbr, 25 tbn
Output #0, gif, to 'output2.gif':
  Metadata:
    encoder         : Lavf54.20.3
    Stream #0.0: Video: rawvideo, rgb24, 320x240, q=2-31, 200 kb/s, 90k tbn, 10 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (png -> rawvideo)
Press ctrl-c to stop encoding
frame=  301 fps=270 q=0.0 Lsize=   25884kB time=30.10 bitrate=7044.5kbits/s    
video:67725kB audio:0kB global headers:0kB muxing overhead -61.780963%

No tengo idea de lo que estoy haciendo mal ahora y agradecería la opinión de alguien.

Alternativamente, si alguien conoce una forma rápida de convertir un lote de PNG en gifs individuales sin utilizar ImageMagick, puedo unirlos con gifsicle.


1


origen


Por favor incluya la salida de línea de comando completa y sin cortes - slhck
Lo siento por eso. Lo agregué ahora - Nikhil


Respuestas: