Render video faster
When I render a video, I've noticed that Blender re-renders each individual frame, even though it's often no different from the previous frame. If it checked whether anything had changed before rendering each frame, it could simply copy these frames in the sequence, saving a lot of rendering time.
16 Comments
That's not how this works.
In with version blender not rendering this same image if on time line are whole copied?
What is this response? It's not a response. Blender's video rendering performance is absolutely pitiful compared to any other video editor. That's the only reason I now refuse to use it. It takes 5x longer than Premiere for the exact same task. I'm not smart enough to know what the proper solution is, but "That's not how this works" is not a response.
I'm not smart enough to know what the correct solution to this is, but I totally agree that Blender's performance here is absolutely pitiful compared to any other serious video editor. It's usually 5 times slower than Premiere, FCP, iMovie, the like, for the exact same task. Whether the answer is what you're talking about or something different, there are people who know how to solve this problem. It's already a solved problem. Blender just needs to catch up.
Was proposed in paper cuts time ago.. but.. devtalk.blender.org/t/optmization-for-viewport-refresh-cycles-and-render-part-1-4/20245/5
Some dev should report on post what is solved maybe...
When you say you "render a video", do you mean you made some form of video editing, compositing? Or even a 3D scene to render with Cycles/Eevee? In which case there is indeed some "render" to do, and that technically can have a few frames that are technically identical but are processed indiscriminately. I don't think there is an easy way for Blender to tell when there is a change or not. You can sort-of deduce some of it via the presence of keyframes, or manually set frame ranges.
For this user case, the Loom addon offers you tools to specify which frames to render and automatically make copies to fill out the blanks in the output frame sequence. See:
p2or/blender-loom: image sequence rendering, encoding and playback
If you mean that you have frames that you encode into a video with nothing to compute in between, then I don't think the encoder cares whether you have identical frames or not. It's one frame after another, it just encodes them as any other frames. However, most codecs do adapt to the amount of change within a chunk/pixel through time, it's a huge part of how they get the file size down (and why you see blocky videos on YouTube). But that's the codec's job, not Blender's.
"I don't think there is an easy way for Blender to tell when there is a change or not." - are you a Blender dev? I'm sorry but I'm pretty sure you can even figure that out with Python through bpy.
This loom addon has nothing to do with video. OP is talking about video.
Or, you know, you could do this yourself by setting the frame range to only cover frames you need to render to images, and use that single image as a strip for the range you want to occupy time with.
This is talking about about rendering video, as in an mp4, not separate image frames.
Render to frames or image sequences is how large projects are developed, not compressed to video and lossy. Getting the animation out to frames with lossless quality helps with color management down the road in the project, and is easier to modify like in the tip I gave of having that one image that accounts for that long span of time and stretching that to meet the required timeframe, then adding the rest of the images in sequence as a second strip. Add sound, add overlays, boom render to video. The OP is talking about rendering to video, yes, but it is not clear on why they need it to render a non-changing image over and over again 'faster' when they could do something manually to speed things up. Anyway, good point, have fun blending.
Comments about 3D graphics have absolutely nothing to do with Blender's performance as a general video editor. Many people use it for workflows thoroughly divorced from anything resembling 3D graphics. The way it "feels" is way better than any of the video editors in my opinion, it feels "organic". But it's render time is absolutely atrocious. And it doesn't have to be.
"Render to frames or image sequences is how large projects are developed, not compressed to video and lossy. " ??? Video is pretty important for showcasing your work. OP's comment is entirely valid. This is a critique of Blender's VSE. The VSE's entire job is video, so devaluing the legitimacy of video doesn't make sense.
Re-read: "If it checked whether anything had changed before rendering each frame, it could simply copy these frames in the sequence, saving a lot of rendering time". This OP has zero to do with Blender performance hit on video with memory and GPU/CPU but the OP wants Blender to know that they didn't need to render 100 frames of non-movement when that it exactly what they decided to render to begin with. My suggestion is to plan ahead and examine what you need before rendering 100 of the same frame. Blender is not going to add an AI project manager any time soon, so the OP needs to do the work before pressing Render Animation.
Your comments about VSE performance due to Blender not doing what it is supposed to do is laughable - buy a cheap Dell workstation, upgrade it, and then spit out video like its running water.