Почему я не могу получить правильную частоту кадров при использовании avconv для преобразования последовательности изображений в gif?

981
Nikhil

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

Я нашел три широких способа сделать это. Один с участием 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.

1
Пожалуйста, включите полный, неразрезанный вывод командной строки slhck 9 лет назад 1
Извини за это. Добавил это сейчас. Nikhil 9 лет назад 0

0 ответов на вопрос