Is there a way to animate on 2s and 3s with blender?

In traditional animation you can animate on 2s (the same image appears on 2 frames) and 3s (3 frames), is there a way to do the for blender? What I mean is when you render out an image sequence you tell blender to copy the last frame rather than render out the new one then go to the current position and render that and so on and so forth.

What I mean:

Standard sequence: 1 2 3 4 5 6 7 8 9

What I want to do: 1 1 3 3 5 5 5 8 8 (and variations of 2s and 3s)

I am a novice in blender and I was just wondering if there was an easy way of doing this in the blender rather than manually with the renders afterwards.

As to why, I just want to see if this is possible and I just want to experiment.

Thanks

Moved from “General Forums > Blender and CG Discussions” to “Support > Animation and Rigging”

Without a secondary process on the rendered frames, there are a few different ways that you may achieve this. From a playback perspective, you can set the Frame Step value in the Dimensions panel of Render Properties. However, when rendering, I don’t think Blender generates the duplicate frames; it just skips them. So you may need a secondary step there.

The other way is while animating. It requires a bit of dedication, but if you only set keyframes on 2s (or 3s) and set your curve interpolation to Constant (from the Graph Editor or Dope Sheet, select all channels and press T > Constant Interpolation). This essentially gives you holds between your keys. Movement will be more jumpy, obviously, but if you’re looking to get a traditional hand-drawn or stop motion look, it’s pretty effective.

Both methods seem to somewhat achieve what I am thinking of but I guess each one has its drawbacks. I like the second method you recommended but it seems like a waste since it’ll render the duplicate frames. I guess the first method sames time rendering but requires some more consideration in the workflow, I think I have and idea.

Is there a way to get an output, like a string or something, of the number of frames between keys from blender?

That should be pretty easy to do with python. With that, you could technically have a variable framerate… though getting the correct playback timing becomes a bit more complicated.

However, if you’re interested in saving render time, use the first method. The built-in Blender player (Ctrl+F11) will playback your frames at the correct framerate with stepping. When you want to have a final video file as a deliverable, load the frames into the VSE and add a speed effect on your sequence strip (e.g. if you rendered in 2s, then set the strip’s speed to 0.5). Then when you render to a video file, your stand-in frames are created and packed in at the correct framerate.

If it’s a regular pattern, render out your animation at the normal framerate as an image sequence, and then re render using the compositor:

Create an image input node, set it up as normal, and then add a driver to the offset value. This driver can use the current frame (frame) and use it to offset the image appropriately.

As the frame variable increases with time (representing the current frame), you can render the image sequence at half the framerate using


-frame//2

or, you can render every second frame using


-frame%2

I’m not sure what pattern you want with 2 / 3, if it’s regular, work out an expression to drive it.
If this isn’t regular, it may be easier to simply use a manual curve to do the same thing.