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 30fpsPercebi 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?