converter gif animado em vídeo no servidor linux, preservando a taxa de quadros

como faço para converter um gif animado em um vídeo (por exemplo, h264 @ mp4) programaticamente em um servidor linux?

Eu preciso disso para processar o conteúdo gerado pelo usuário, que deve ser exibido como vários formatos de vídeo definidos; portanto, é possível que os usuários desejem processar arquivos gif animados. Eu já tenho um conjunto de scripts php em funcionamento para transcodificar arquivos de vídeo para formatos específicos (como vpx @ webm e h264 @ mp4, dimensionados para resoluções específicas) usando avconv, mas, portanto, preciso de entrada de vídeo.

As formas comuns parecem ser extrair os quadros do gif e depois codificá-lo, como

convert file.gif file%03d.png 
avconv -i file%03d.png file.mp4

Mas isso descarta a taxa de quadros, determinada pelas informações de pausa no arquivo gif. É possível definir uma taxa de quadros para avconv com -r, mas

isso não respeita a pausa entre os quadros, pois eles podem diferir (como pausa no primeiro quadro de 100ms, pausa no segundo quadro de 250ms, pausa no terceiro quadro de 100ms, ...)como a entrada vem dos usuários, ela pode até variar, pois alguns gifs podem ter 5fps e outros 30fps

Percebi que o avconv é capaz de processar gifs por si só e, portanto, pode respeitar as pausas corretas, mas quando o faço (como similarmente descrito emComo converter GIF para MP4 é possível?)

avconv -i file.gif -r 30 file.mp4

O avconv pega apenas o primeiro quadro do gif, enquanto detecta o arquivo pelo menos como vídeo:

Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
  Stream #0.0: Video: gif, pal8, 640x480, 25 tbn

(o exemplo gif 'file.gif' possui 15 quadros, cada um com uma pausa de 100ms => 1,5s de duração, em loop)

o que estou perdendo? O que está errado?Provavelmente existem ferramentas melhores para este caso de uso?Como são os sites grandes, por exemplo 9gag usando para transcodificar gifs enviados para vídeo?

questionAnswers(2)

yourAnswerToTheQuestion