Duration seconds
--
Free · Instant · No signup
Duration and a hundredths-friendly delay from frame count plus either FPS or delay milliseconds.
Page updated 2026-09-14.
Duration seconds
--
FPS
--
Delay ms
--
Suggested GIF delay (1/100 s)
--
24 frames driven by a 12 FPS target produces a 2.00 second total duration, a per-frame delay of 83.33 milliseconds, and a suggested GIF-format delay value of 8 (in the format's native 1/100-second units).
Duration = frame count / FPS = 24 / 12 = 2.00 seconds -- and per-frame delay is simply the inverse relationship, 1000ms / FPS = 1000 / 12 = 83.33ms, confirming that FPS and per-frame delay are just two different ways of expressing the identical timing.
The GIF format's suggested delay value (8) comes from converting that 83.33ms delay into the format's native centisecond (1/100 second) units: 83.33 / 10 = 8.33, rounded to 8 -- this rounding step is the reason GIF playback speed often doesn't perfectly match an intended FPS value.
GIF delay is stored in 1/100 s units. Encoders may round again. GIF's file format stores frame delay in units of 1/100th of a second (centiseconds) rather than milliseconds -- a coarser granularity than most video or animation formats use, which means a precise millisecond delay value (like 83.33ms) has to be rounded to fit into GIF's native centisecond storage, introducing a small, unavoidable timing discrepancy.
Beyond this format-level rounding, individual GIF encoding software may apply its own additional rounding or minimum-delay enforcement (some browsers historically enforced a minimum delay floor for very fast GIFs) -- meaning the actual delay value your specific encoder writes to the file could differ slightly from this calculator's suggested value.
This rounding effect compounds at higher target FPS values -- a target of 30 FPS (a 33.3ms delay) rounds to 3 centiseconds (30ms), actually playing back closer to 33.3 FPS in practice, a real, if usually minor, discrepancy between intended and actual GIF playback speed caused entirely by the format's coarse centisecond granularity.
For working with a related CSS-based rotation animation instead of a frame-based GIF, the CSS Keyframe Animation Generator covers that different animation technique.
For estimating the resulting file size of an animated image, the Image File Size Estimator is a related, though single-frame-focused, sizing tool.
Duration = frame count / FPS = 24 / 12 = 2.00 seconds. The same relationship also determines per-frame delay: 1000ms / 12 FPS = 83.33ms per frame.
GIF delay is stored in 1/100 s units. Encoders may round again. GIF stores frame delay in centisecond (1/100 second) units, a coarser granularity than milliseconds. Converting 83.33ms to centiseconds (83.33 / 10 = 8.33) requires rounding to the nearest whole centisecond, giving 8.
GIF delay is stored in 1/100 s units. Encoders may round again. Not always precisely -- the centisecond rounding, plus possible additional rounding or minimum-delay rules applied by your specific GIF encoding software, can produce an actual playback speed slightly different from the exact FPS you targeted.
GIF delay is stored in 1/100 s units. Encoders may round again. Yes -- higher target FPS values correspond to shorter per-frame delays, which represent a larger relative rounding error when forced into GIF's coarse centisecond units, compared to lower FPS values with longer, more forgivingly-rounded delays.
Yes -- the 'drive from' mode setting lets you start from either FPS or a specific delay value in milliseconds, and the calculator derives the other related figures (duration, FPS, and the GIF-native centisecond delay) from whichever one you provide.
Hex Sample Mixer Deduplicate pasted hex samples and average them into a mix hex. Does not cluster image pixels.
CSS Loader / Spinner Code Builder A rotating border spinner from size, accent color, and animation seconds.
Responsive Font Size rem/px Interconvertible Calculator Convert a pixel size through a root px into rem, em, and a clamp() suggestion for fluid type.
CSS Polygon Clip-Path Generator clip-path: polygon() for triangle, diamond, hexagon, or a custom list of points.