конвертировать анимированные GIF в видео на сервере Linux, сохраняя частоту кадров
Как программно преобразовать анимированный GIF-файл в видео (например, h264 @ mp4) на сервере Linux?
Мне это нужно для обработки сгенерированного пользователем контента, который должен выводиться в виде нескольких определенных видеоформатов; поэтому возможно, что пользователи захотят обрабатывать анимированные GIF-файлы. У меня уже есть набор работающих php-скриптов для перекодирования видеофайлов в определенные форматы (например, vpx @ webm и h264 @ mp4, масштабированные до определенных разрешений) с использованием avconv, но поэтому мне нужен ввод видео.
Обычные способы, по-видимому, состоят в том, чтобы извлечь кадры из gif и затем закодировать его, например:
convert file.gif file%03d.png
avconv -i file%03d.png file.mp4
Но это отбрасывает частоту кадров, определяемую информацией паузы в gif-файле. Можно определить частоту кадров для avconv с -r, но
это не учитывает паузу между кадрами, поскольку они могут различаться (например, пауза 1-го кадра 100 мс, пауза 2-го кадра 250 мс, пауза 3-го кадра 100 мс, ...)так как ввод поступает от пользователей, он может даже отличаться, так как некоторые GIF-файлы могут иметь 5 кадров в секунду, а другие 30 кадров в секундуЯ заметил, что avconv может обрабатывать GIF-файлы самостоятельно и, следовательно, может уважать правильные паузы, но когда я это делаю (как описано вКак конвертировать GIF в Mp4 возможно?)
avconv -i file.gif -r 30 file.mp4
avconv примет только первый кадр gif, пока он обнаружит файл, по крайней мере, как видео:
Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
Stream #0.0: Video: gif, pal8, 640x480, 25 tbn
(пример gif 'file.gif' имеет 15 кадров, каждый с паузой 100 мс => 1,5 с, цикл)
Чего мне не хватает? Что происходит не так?Есть ли, вероятно, лучшие инструменты для этого варианта использования?Какие большие сайты, например, такие как 9gag использовать для перекодирования загруженных картинок в видео?