Tenho um vídeo curto de 60 qps que gostaria de transformar em um arquivo GIF. eu corro
ffmpeg -i foo.flv foo.gif
e produz um arquivo GIF. Excelente!
O único problema é que o movimento no vídeo GIF produzido é inconsistente e desigual. Se eu usar outra ferramenta, posso ver que o FFmpeg criou um vídeo em que o primeiro quadro tem 10 ms, o segundo 20 ms, o terceiro 20 ms e depois repete assim: 10 ms, 20 ms, 20 ms. Se eu usar outra ferramenta para suavizar até 16 ms para cada quadro (sem alterar o conteúdo do quadro), o resultado ficará lindo.
Por que o FFmpeg está fazendo isso? Como posso pedir para gravar um arquivo GIF que solicita até 16 ms por quadro, para que eu não precise usar uma segunda ferramenta?
Eu já vi esta questão relacionada perguntando se existem vídeos GIF de 60 qps, mas ela não aborda a questão de como pedir ao FFmpeg para alterar seu comportamento. Além disso, levanta uma nova questão: se 16ms não é um tempo que o GIF pode representar, o que a outra ferramenta que estou usando está fazendo e por que funciona bem?
Conforme discutido em Os GIFs de 60 FPS realmente existem? Ou é o máximo de 50 FPS? , a resolução dos tempos de quadro no GIF é de 10 ms, portanto, não é possível obter até mesmo 16 ms por quadro. Assim, as respostas para as perguntas, em ordem, são:
Porque 10+20+20 dá a você 60 fps em média e é a aproximação mais precisa dessa propriedade que pode ser representada dentro das restrições do formato GIF.
Você não pode, porque o formato gif não pode representar isso. Mas descobri que pedir para fazer um vídeo de 50 fps - que pode ser representado exatamente no formato GIF - produz bons resultados suaves. Isso pode ser feito com:
Isso usa a interpolação temporal do vizinho mais próximo para escolher qual quadro transferir para a saída.
A outra ferramenta que eu estava usando era o GIMP, e sua escolha é arredondar cada quadro para o tamanho representável mais próximo, por isso estava alterando silenciosamente meus 16 ms/quadro solicitados para 20 ms/quadro. Provavelmente funciona bem porque meus pobres olhos humanos não conseguem dizer que tudo estava acontecendo um pouco devagar demais para estar correto; apenas que os movimentos estavam acontecendo suavemente em vez de em intervalos espaçados de forma incomum.