1

Мне нужно конвертировать серию изображений в гифки.

Я нашел три широких способа сделать это. Один с участием ImageMagick, один с gifsicle, а другой с avconv.

Я не могу использовать Imagemagick, потому что он намного медленнее, чем любой другой метод. Я не могу использовать gifsicle, потому что он не может работать с файлами "png". Я мог бы преобразовать PNG в gif-файлы с помощью команды ImageMagick 'mogrify', а затем собрать их в один gif-файл с gifsicle, но это могло бы привести к замедлению работы с помощью mogrify, что в моем случае нарушает условия сделки.

Я узнал, как делать то, что мне нужно, с avconv, но по какой-то причине результирующий gif имеет двойную частоту кадров.

Это команда, которую я использую:

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

И вывод с этим:

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%

Есть 301 изображение, рассчитанное на 30 секунд, поэтому я устанавливаю частоту кадров 10. Кажется, что игнорирует это, хотя.

Если я также заставлю входную частоту кадров с помощью «-r 10», результирующий gif будет длиться 60 секунд при половине моей желаемой частоты кадров.

Команда с FPS форсируется как на входе, так и на выходе:

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

И вывод:

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%

Я понятия не имею, что я делаю неправильно, и был бы признателен за чей-то вклад.

В качестве альтернативы, если кто-то знает быстрый способ конвертировать серию PNG-файлов в отдельные изображения без использования ImageMagick, я могу затем объединить их с помощью gifsicle.

0