Retime camera based on timing curve

Hello

I have a key framed camera - created from camera tracking some footage.

The footage has since been retimed and I have a timing curve of this retime in a null.

Is there a way to create a second camera which copies its animation from the first from a given frame based on the timing curve?

For example:
Let’s say Camera1 positionX value is 1 at frame 1 and moves linearly to 100 at frame 100

My timing curve at frame 1 has a value of 5

At frame 1 Camera2 should evaluate Camera1’s position at frame 5 and return positionX value at that frame, 5.

so: camera2 = camera1 at timing curve frame

I’m hoping there’s a way to do this through constraints or expressions so that the timing curve can be adjusted after the set up.

Thanks

I’m not sure if i understood this correctly about “timing curve” but:

You can copy the camera (with all the keyframes) and simple move the keyframes in the timeline for this camera. And even in the graph editor set a 2D cursor and scale everthing to make it “faster” or “slower”.

The timing curve is a fairly fundamental part of the question.

The timing curve (in a channel of a null axis) tells camera2 which frame of animation to copy from camera1

In the below example…

at frame 1 camera2 would copy camera1’s position and rotation from frame 10.

at frame 7 camera2 would copy camera1’s position and rotation from frame 4.

Timing curve values
frame value
1 = 10
2 = 9
3 = 8
4 = 7
5 = 6
6 = 5
7 = 4
8 = 3
9 = 2
10 = 1

This is a basic example to illustrate the idea simply and this particular curve would reverse the animation of camera1.

However, in reality my curve will not be a linear inversion. It will be much more complicated and… curvey.

And I need it to be linked so that I can adjust the curve and see the result on camera2 in real time.

I hope that’s added clarity.

Basically camera2 looks at the timing curve.

If the timing curve has a value of 5 then camera2 copies camera1’s pos/rot from frame 5

Ahh yes… i understand now… hmm :thinking: so i’m triedto make a moving camera and some “timecurve” by simple animating some empty from between Z=0 and Z=1… then a driver (camera. location[2] ) could read the this as factor for the number of frames ( z-pos / frame )…
… to get the location of the camera at this frame…

But the simple expressions does not allow to get this info (AFAIK)… so maybe in python… (or geometry nodes)…

It might be useful to provide a simple blend file with the timecurve as you seems to already have build ??

I actually don’t have a build yet. This is for a project that I’m starting in 2 weeks. Trying to get ready.

1 Like

camera retime example 001.blend (954.5 KB)

Here you go.

Camera 2 should animate like camera 1 but retimed according to the Z pos channel in the “Timing” null axis

So in this example setup camera 2 should move slower at the start but then accelarate to catch up by frame 100

Haha… in fact i have some similar setup… only didn’t delete the default cube :grin:

It’s bit ( or a lot ) messy yet… but i can copy a position coordinate from some other object on a specific frame via drivers… But to be honest i do re-search for a slightly cleaner way… for example not having a driver for ever three position and also rotation coordinates… (driver variables are some kind of weird…) And it’s “hardcoded” to the names also… (will adapt to your example… also for 3.6 but this shoudl work in 4 too)…

So i needd to put everything together… and because of the “complicated driver setup” also have to do some “docu”…

So far about “interim report”…

I believe the Action constraint is what you are looking for.

camera retime example 001.blend (1004.6 KB)

1 Like

sounds promising…

@Lumpengnom Thanks for this. I think the last step here will be to normalise my timing curve into a value between 0 -1 to drive the evaluation time, but this is really helpful thanks

camera retime solve.blend (988.0 KB)

@Lumpengnom I’ve adapted your setup to use my timing curve to drive the evaluation time. Thanks!

That’s indeed interesting…
…another part of blender which i didn’t know.

So thanks for this… :smile_cat:

You can normalize it by setting the Frame Start and Frame End inside the modifiert to the same length as the source action is.

Then you can animate the evaluation time from 0 to 1 to re-time your object.