Exit
  • Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
0

Speed graph to value graph mathematics

New Here ,
Feb 24, 2025 Feb 24, 2025

Copy link to clipboard

Copied

Hello everyone,

I recently stumbled upon this post that was made in 2013: https://community.adobe.com/t5/after-effects-discussions/bezier-curve-conversion-between-value-graph... talking about the mathematics for converting speed graphs to value graphs. I found the math to be fairly simple for one dimension, but with multi-dimension calculations, specifically in python, my curve values don't seem correct. The author hagmas provided a solution in which I tried to implement, but it seems incorrect when I run my own numbers.

 

Python:

 

import math

x_first, x_last = 0, 100
y_first, y_last = 0, 200
z_first, z_last = 0, 0

duration = 30

x_diff = abs(x_first - x_last)
y_diff = abs(y_first - y_last)
z_diff = abs(z_first - z_last)

x_avg, y_avg, z_avg = x_diff / duration, y_diff / duration, z_diff / duration
avg_speed = math.sqrt(x_avg * x_avg + y_avg * y_avg + z_avg * z_avg)

in_influence, out_influence = 0.50, 0.50
in_speed, out_speed = 200, 0

bezier_in = {}
bezier_in["x"] = 1 - in_influence
bezier_in["y"] = 1 - in_speed / avg_speed * in_influence

bezier_out = {}
bezier_out["x"] = out_influence
bezier_out["y"] = out_speed / avg_speed * out_influence

print(bezier_in, bezier_out)

# result: {'x': 0.5, 'y': -12.416407864998737} {'x': 0.5, 'y': 0.0}

 

 

When doing this same scenario in After Effects and reading the graph value from the AEScripts flow plugin, it shows me this graph result:

 

jah_4244_1-1740414993891.pngexpand image

The y-value of the left bezier should really be closer to 0.447 for accuracy, but it's being rounded in the plugin. Here is the speed graph view in AE:

jah_4244_2-1740415114861.pngexpand image

which reflects the scenario where:

x: 0 -> 100 in 30 frames

y: 0 -> 200 in 30 frames

left handle influence: 50%

left handle speed: 200

right handle influence: 50%

right handle speed: 0

 

Is my python calculations wrong, or am I not utilizing the output correctly to normalize the bezier curve correctly? I would appreciate any help!

 

 

TOPICS
Scripting

Views

88
Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Explorer , Feb 26, 2025 Feb 26, 2025

The issue with converting a speed graph to a value graph in After Effects is mainly about how the motion easing is calculated. The speed graph shows how fast something moves, while the value graph shows the actual position over time.

Your Python code seems to be calculating the average speed correctly, but the Bezier handle values might not be normalized properly. To fix this, make sure you are correctly applying the influence and speed ratios. A common mistake is not factoring in the way After E

...

Votes

Translate
Explorer ,
Feb 26, 2025 Feb 26, 2025

Copy link to clipboard

Copied

The issue with converting a speed graph to a value graph in After Effects is mainly about how the motion easing is calculated. The speed graph shows how fast something moves, while the value graph shows the actual position over time.

Your Python code seems to be calculating the average speed correctly, but the Bezier handle values might not be normalized properly. To fix this, make sure you are correctly applying the influence and speed ratios. A common mistake is not factoring in the way After Effects interprets influence percentages. Instead of using direct speed values, try adjusting the Bezier handle’s Y values based on how AE scales easing functions.

Also, double-check that your calculations account for motion in multiple dimensions correctly by using vector magnitude for speed. If the results still look off, manually tweak the influence percentages slightly to match After Effects' expected behavior.

 

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
New Here ,
Feb 26, 2025 Feb 26, 2025

Copy link to clipboard

Copied

LATEST

Hi tate,

Thank you, I was able to solve this issue. I found out that I was reversing the in influence and out influence, so the results were flipped. In addition, I took into account the max value of each dimension into the bezier handle calculations.

Votes

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines