Why does FFmpeg choose 10+20+20 ms instead of an even 16 ms for 60 fps GIF images?
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Romantic Lands Beckon
--
Chapters
00:00 Why Does Ffmpeg Choose 10+20+20 Ms Instead Of An Even 16 Ms For 60 Fps Gif Images?
01:05 Accepted Answer Score 84
02:27 Thank you
--
Full question
https://superuser.com/questions/1459724/...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#video #ffmpeg #animatedgif
#avk47
ACCEPTED ANSWER
Score 84
As discussed at Do 60 FPS GIF's actually exist? Or is the maximum 50 FPS?, the resolution of frame times in GIF is 10ms, so a nice even 16ms per frame is not possible. So the answers to the questions, in order, are:
Why is ffmpeg doing this?
Because 10+20+20 gets you 60fps on average, and is the most precise approximation with that property that can be represented within the constraints of the GIF format.
How can I ask it to write a gif that requests an even 16ms per frame instead, so that I don't need to use a second tool?
You can't, because the gif format can't represent that. But I've found that asking it to make a 50fps video -- which can be exactly represented in the GIF format -- produces nice smooth results. This can be done with:
ffmpeg -i foo.flv -vf fps=50 foo.gif
This uses nearest-neighbor temporal interpolation to choose which frame to transfer to the output.
If 16ms is not a time that gif can represent, what is the other tool I'm using doing, and why does it work well?
The other tool I was using was GIMP, and its choice is to round each frame to the nearest representable size, so it was silently changing my requested 16ms/frame to 20ms/frame. It probably works well because my poor human eyes can't tell that everything was happening just slightly too slowly to be correct; only that motions were happening smoothly instead of at unusually-spaced intervals.