Мы генерируем множество миниатюрных GIF-файлов, качество которых не так важно, как время, необходимое для их создания. Генерация высококачественных GIF-файлов с помощью ffmpeg очень хорошо освещена, но мне не сильно удастся выяснить, как генерировать низкокачественные как можно быстрее.
Вычисление палитры занимает большую часть времени выполнения с помощью следующей команды (взятой из ответа по многоцепочечному фильтру здесь: Как эффективно создать лучший палитра GIF из видео прямо из Интернета ):
ffmpeg -y -threads 8 -r 24 -f image2 -start_number 1 -i "frames.%04d.jpg" -filter_complex "fps=24,scale=150:-1:flags=fast_bilinear,split=2 [a][b]; [a] palettegen [pal] fifo [b]; [b] [pal] paletteuse" output.gif
Время выполнения этой команды с 1000 кадрами составляет около 72 секунд. Примерно через 67 секунд проходит палитра, а затем она проходит через фактическое создание GIF в течение 5 секунд. Я хотел бы максимально сократить время выполнения и желать пожертвовать большим качеством изображения ради скорости.
ffmpeg -y -r 24 -f image2 -start_number 1 -i "frames.%04d.jpg" -filter:v "scale=150:-1:flags=fast_bilinear" output.gif
Две проблемы с этим: 1) он сэкономил только 13 секунд (59 секунд вместо 72), и 2) я не уверен на 100%, что эта команда полностью исключает вычисления палитры (только то, что вычисление палитры, которое я указывал ранее, не включено ).
ffmpeg -i <input> <scale> <output.gif>
,
[b]
этикетка. В любом случае, использование быстрой палитры примерно на 200⨉ медленнее, если судить по быстрому тесту. Не использовать его вообще не вариант для вас?