transition_snapped_to_frame: a 0.3 s fade at 25 fps is 8 frames

Timeline rounds a fade to whole frames and reports transition_snapped_to_frame as a warning, not a failure. What 0.3 s becomes at 24, 25, 30 and 60 fps.

4 min readSume
All posts

Is transition_snapped_to_frame an error?

No. It is a soft warning in the result's warnings[]. The job still completes. Timeline snaps a fade onto whole frames, by at most half a frame, and tells you when the length you asked for was not already a whole number of frames. The warning carries the segment index and a context with requested_seconds, applied_seconds, frames and fps.

What does a 0.3 second fade become?

Frames are round(seconds x fps), and the applied length is frames divided by fps.

Snapped fade length for common requests, computed with the Timeline rule
Requested24 fps25 fps30 fps60 fps
0.3 s7 frames, 0.292 s (warns)8 frames, 0.320 s (warns)9 frames, 0.300 s18 frames, 0.300 s
0.4 s10 frames, 0.417 s (warns)10 frames, 0.400 s12 frames, 0.400 s24 frames, 0.400 s

Does the snap move my cuts?

The warning message says the timeline position is unchanged: only the fade's own length is adjusted. The overlap rule still applies, so a slot's start must allow for the fade, as in the overlap post. Read the applied value from the warning if you need frame-exact overlay timing elsewhere.

How do I avoid the warning?

Choose output.fps first, then pick fades that are multiples of one frame: 0.04 s at 25 fps, 0.5 s at any rate. Or ignore it; it does not change the price. Run the unbilled plan to see the compile before you render, as in the estimate post.

Fades under half a frame are the failure case, covered in transition_not_frame_aligned.

# frames = round(seconds * fps); applied = frames / fps
for fps in (24, 25, 30, 60):
    frames = round(0.3 * fps)
    print(fps, frames, round(frames / fps, 3))

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume