Por que não consigo acertar o framerate ao usar o avconv para converter uma sequência de imagens em um gif?

1

Eu preciso converter uma série de imagens em gifs.

Encontrei três maneiras amplas de fazer isso. Um envolvendo ImageMagick, One envolvendo gifsicle e outro envolvendo avconv.

Eu não posso usar o Imagemagick porque é muito mais lento do que qualquer um dos outros métodos. Eu não posso usar gifsicle porque ele não pode trabalhar com arquivos "png". Eu poderia converter os PNGs para gifs com o comando 'mogrify' do ImageMagick e juntá-los em um único gif com gifsicle, mas isso envolveria atrasar as coisas com o mogrify, que é um fator decisivo para o meu caso.

Descobri como fazer o que preciso com o avconv, mas, por algum motivo, o gif resultante tem o dobro da taxa de quadros.

Este é o comando que estou usando:

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

E a saída com isso:

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%

Existem 301 imagens destinadas a durar 30 segundos, e é por isso que estou forçando uma taxa de quadros de 10. Parece estar ignorando isso.

Se eu também forçar a taxa de quadros de entrada com "-r 10", o gif resultante terá a duração de 60 segundos em metade da minha taxa de quadros desejada.

Comando com FPS forçado em entrada e saída:

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

E a saída:

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%

Eu não tenho ideia do que estou fazendo de errado agora e apreciaria a contribuição de alguém.

Como alternativa, se alguém souber uma maneira rápida de converter um lote de PNGs em gifs individuais sem usar o ImageMagick, eu posso reuni-los com o gifsicle.

    
por Nikhil 13.05.2014 / 10:59

0 respostas