Forum Replies Created

Page 16 of 277
  • Filip Vandueren

    March 17, 2023 at 3:44 pm in reply to: Double stroke on open path in After Effects

    I don’t have Connect Layers Pro, but as long as its result is a (single) shape, you can pick-whip the path on the text-layer to that path and it’ll copy the path, and it should work ?

    Otherwise, can you give a screenshot of what exactly Connect Layers Pro outputs ?

  • Filip Vandueren

    March 16, 2023 at 7:58 pm in reply to: Double stroke on open path in After Effects

    Hey Nikki,

    I achieved it with text on path (force Alignment =true):

    https://imgur.com/a/usmE2F5

    There’s a text-animator with expression selector which alternates the Y-position offset for odd and even characters.

    With a few hundred _ characters (or . characters for finer detail, but that would need maybe thousands) you get two continuos lines. You can fatten up the lines using a stroke on the font.

    Strokes via text on Path

  • Filip Vandueren

    March 15, 2023 at 5:46 pm in reply to: Fade in centered type on text expression

    Try copying and pasting this on your layer:

    Adobe After Effects 8.0 Keyframe Data
    Units Per Second 30
    Source Width 1
    Source Height 1
    Source Pixel Aspect Ratio 1
    Comp Pixel Aspect Ratio 1
    Text Animators Animator #1 Selectors Range Selector #1 Start #4
    Frame
    -1
    Text Animators Animator #1 Selectors Range Selector #1 Offset #6
    Frame
    0
    Expression Data
    charPerSec = 10;
    idx = (time*charPerSec);
    End of Expression Data
    Text Animators Animator #1 Selectors Range Selector #1 Advanced Units
    Frame
    2
    Text Animators Animator #1 Properties Opacity
    Frame percent
    0
    End of Keyframe Data

    It will add an opacity textanimator with an expression on its range that keeps up with the sourceText getting longer. You’ll need to make sure the charPerSec is the same in both expressions.

  • A bit tricky, because Groups can be nested. How would you want to handle those cases ?

  • Good solution, it’s often not necessary to do stuff in 1 layer, I just like to explore it as a challenge. Still plan to fix the spacing issue (which you see too) when I find the time.

  • Filip Vandueren

    March 13, 2023 at 10:51 pm in reply to: Begin an animation when a condition is met

    I simplified the final result, it doesn’t use Sin() but a modulo (because you were just blinking on/off, no need for trig functions and Pi)

    with sin, it would have also use (time-t)*s instead of time -> the offset t that is subtracted from time is in effect the time of the last keyframe we’ve passed, so the blinking now has relative time to the last keyframe.

    But the function starts off with the cases where we don’t need to bother with blinking: if there’s less than 2 keyframes (which could have been omitted, because those cases would mean velocity=0 anyway)

    And if the velocity of the slider is not at 0, the cursor is moving, and we return out of the function yielding 100% without doing the other calculations.

  • Filip Vandueren

    March 13, 2023 at 9:02 pm in reply to: Begin an animation when a condition is met

    Hi Kevin, try something like this:

    const sl = effect("Animate On")("Slider");
    const s = effect("Cursor Blink Speed")(1).value;
    (function() {
    if (sl.numKeys<2) return 100
    if (sl.velocity>0) return 100
    t = sl.nearestKey(time).time;
    if (time<sl.key(1).time) {
    t=0;
    } else if (time<t){
    t = sl.key(sl.nearestKey(time).index-1).time;
    }
    return ((((time-t)*s)%1)<0.5)*100;
    })();

    I’m assuming the animating slider is only changed by keyframes, not by an expression ?

  • Filip Vandueren

    March 11, 2023 at 2:33 pm in reply to: Text highlight (expression selector)

    Hey Yannick,

    I would use this code in an expression selector based on Words:

    thisWord = text.sourceText.value.split(/[\s\3]+/)[textIndex-1];
    wordList = thisComp.layer("wordlist").text.sourceText.value.split(/[\s\3]+/).map(e => e.toLocaleLowerCase());
    wordList.includes(thisWord.replace(/[\.,?!…:;=]$/gi,'').toLowerCase()) ? 100 : 0;

    It does a few extra things so it also matches words regardless of case (everything is converted to lowercase), and it also matches a word when that is immediately followed by a punctuation mark (you may want to extend that list).

  • I think I can only get it to work if the lines have the same length.

    I can think of ways that the expression selector can know the character index AND the line index of the current character without checking the sourceText for linebreaks, but not character index within the current line.

  • Not sure Tomas.

    I’m hearing around how people would actually need to use this, so all suggestions are welcome.

Page 16 of 277

We use anonymous cookies to give you the best experience we can.
Our Privacy policy | GDPR Policy