Copy link to clipboard
Copied
Hey everyone.
I am writing in arabic in after effects, and I want to animate it so it looks like someone is typing on a keyboard effect. However the problem is that in arabic, the letters changes depending on the letter that comes next, so the typewriter effect isn't gonna look realistic. As you can see in the example below whenever the next letter comes the first one changes. (Thats how the keyboard acts in arabic messaging application).
My solution was writing each letter on a keyframe in the source text, and it worked like in the example. The problem is I have a big workflow and can't animate each letter. Ideally I want to make an expression or something, such as put the first letter as a keyframe and the end of the sentence on another keyframe and be able to animate through them. The problem is the source text have only the Hold temporal interpolation.
Thank you for your reply
I have found a solution by asking around.
Here's the expression for the source text, to use it with a slider control:
s = effect("Slider Control")("Slider").value;
str = "";
txt = value.split("");
for (i = 0; i < Math.min(txt.length,s); i++){
str += (i > 0 ? "" : "") + txt[i];
}
str
Copy link to clipboard
Copied
There's probably no good way, not even with expressions. These contextual ligatures and alternate glyphs are tough to crack in an animation. You could play around with text animators for character value and character offset, but even that will require a ton of keyframes. Otherwise one might likely have to create an expression with a huge list that contains the substitutions and based on input "time" changes the underlying Unicode/ OpenType glyph. Either way, it seems to me there is no really efficient solution for this. Too many possible combinations and things can get even more complicated when you consider "natural" Arabic where sometimes entire words are suddenly replaced with a new scriptogram/ symbol...
Mylenium
Copy link to clipboard
Copied
Thank you for your reply
I have found a solution by asking around.
Here's the expression for the source text, to use it with a slider control:
s = effect("Slider Control")("Slider").value;
str = "";
txt = value.split("");
for (i = 0; i < Math.min(txt.length,s); i++){
str += (i > 0 ? "" : "") + txt[i];
}
str