← All ideas
  • Published 8 Apr 2019

Ability to render specific, non-sequential frames of an animation.

Ability to render specific, non-sequential frames in a single render process (i.e. clicking 'render animation' ONCE)

Example: I'd like to render frame 5, 15, 30 and also 5 frames in the range 45-50 — (8 frames total to be rendered).

For context I have rendered an animation with hundreds of frames. Every 40 frames the image is distorted due to a motion blur issue (arising from using an 'empty axis' as a parent to move an armature walk cycle forward using a constant curve).

I can change the motion blur settings so that on these frames the issue is resolved, however, I'd have to go through the process of rendering each of these corrected frames.

I'm sure this is possible to do with scripts but I'm not that techincal yet and it would have to be spelt out to me like a dummy.

I believe there was add-on called loom ( github.com/p2or/blender-loom ) for Blender 2.79 that achieved this but I couldn't find anything for 2.8.

I'm sure this would be useful as a default option in the output settings!

Cheers!

TE.JPG

86.7%

Development Status: Open

Upvote 13 Downvote 2
tr4v3lf0x
8 Apr 2019

12 Comments

jason

For what it's worth, this feature is already possible when you render from the command line . I use them all the time. From the manual:

-f , --render-frame <frame>

  • Render frame <frame> and save it.

    • +<frame> start frame relative, -<frame> end frame relative.
    • A comma separated list of frames can also be used (no spaces).
    • A range of frames can be expressed using .. seperator between the first and last frames (inclusive).
3
Josephbburg

This is probably really easy to do with Python, but it wouldn't hurt to have a UI for it.

2
mcampbell

* @Josephbburg * does anyone know what the bpy API to use to accomplish this would be?

jason

* @Matt Campbell * The easiest way to do this is to render from the command line. No need for Python in that case. If you absolutely need to render with Python, the Python loop basically looks like this (pseudocode... indenting doesn't seem to work here, so please forgive me for that):

list_of_frames = [1, 5, 24, 7, 88, ...]
for frame in list_of_frames:
    set frame as current frame
    render frame
    save rendered result
hum-bee

did you try to use steps? you can find it where you set the start and endframe in the output panel. so you can over jump the animation in a set amount of frames. in 2.79 it was called "frame step" and in 2.80 its only "step".

2
tr4v3lf0x Author

* @humba_wumba * Ooo, this might just do the trick in this particular case. Thank you!

tom.tolle99

Its possible with python (easy) but if that is not what you want here is a workaround that I use very often if I have damaged frames in my Animation: I go through the folder checking the rendered frames and If I see a broken frame just delete it. If you are done, go back to blender:

"Properties" -> "OutputProperties" -> "Output" -> than deaktivade Overwrite.

Now you can press "Render Animation" again. Blender will check witch frames are allready in the destination Folder and only renders the missing ones.

You dont need to manually type the frame numbers in a script or addon. Just delete wrong ones and Render again.

mcampbell

* @tom.tolle99 *

Its possible with python (easy)

Do you know the bpy API to use? We use bpy.types.Scene.frame_start and bpy.types.Scene.frame_end currently but are looking to pass a non-contiguous list of frame positions like the OP in this thread.

So in our script it looks something like:

scene = bpy.data.scenes[job['scene']]
bpy.context.scene.camera = bpy.data.objects[job['camera']]
scene.frame_start = int(os.getenv('START'))
scene.frame_end = int(os.getenv('STOP'))
# scene.frames = os.getenv('FRAMES') # I wish!
pcservice.dordogne

It feels like in office applications when you want to print a set of pages, by specifying the pages. Example: "1-5,8,10" to print pages 1 to 5, then 8, then 10.

Currently, we have the choice between "Render frame", and "Render animation". Maybe it is possible to add "Render frames" along with a input field where you can specify the range of frames directly in the same way ?

testure

* @pcsd24 * I haven't done any animation rendering in Blender, so it's kind of surprising to me that it doesn't already work that way. hell, that's how it was done in softimage like 16 years go when i was using it

jason

* @testure * It does already work that way. If you do a lot of animation rendering, it's best to do it from the command line anyway... renders finish faster and you have more opportunities for automation (and, you can specify which frames you want).

1
davidj

i also would like a "render frames" field that takes frame number specs like a print dialog "1-6/2,8,10".. ("/2" = step 2)

( instead of being a manual process, or captured in some command line spec somewhere else. )

2