Kevin Camp
Forum Replies Created
-
Kevin Camp
March 18, 2022 at 10:05 pm in reply to: Dan Ebbert’s expression Boucing Ball + Squash & Stretchit should be a less-than sign:
else if (newSquash < squahLimit*-1) newSquash = squahLimit*-1;
-
If you needed to do this again, you can do it with a couple text animators, which would allow you to format the text any way you needed — adding italic or bold words, or even changing the font as needed.
To do it with animators, you can start by simply adding the typewriter animation preset (animation presets>text>animate-in). At this point the text should type on if you scrub thru the timeline.
Next, you need to add an extra character to the end of your text, it doesn’t matter what the character is, but it cannot be a space. This character will get replaced in the next step.
Then create a new text animator on the same text layer for Character Value and set the value to 124 (this is the pipe, or vertical line). Then use an expression on that animator’s Offset property to link it to the Offset of the Typewriter preset, but one character shorter, so it will look like this:
text.animator("Animator 1").selector("Range Selector 1").offset - 100 / text.sourceText.lengthNow the text should type on with a vertical cursor at the end as it types on.
To make the cursor blink, add this expression to the character value property:
blink = 1 ; // value in seconds
if( time % blink > blink / 2 ) { 124 } else { 1 }And then twirl down the animator’s settings to get to advanced>smoothness and set that to 0.
Your text should now type on with a blinking cursor.
Now save it as a preset : )
-
you can link the text in a text layer to the comp’s name… the idea here would be to enter the lower third text to the comp name, then the text layer uses the comp name and when you render the file will also have the comp’s name…
The expression that goes in the text layer’s source text property is pretty simple:
thisComp.name
Then in the project panel, change the comp’s name to ‘Bob Smith’ and the text layer should show ‘Bob Smith’. Add it to the render queue and the default filename should be ‘Bob Smith.mov’.
If you are doing special formatting as you enter the names, this may not work as well. Also some characters can create issues in filenames depending on what systems will be using the L3s….
-
With just AE, you can choose ‘Convert Audio to Keyframes’ and then use expressions to drive the scale of the crystals. I think is probably the method in the tutorial you mention, and you probably found the limitation that while it could separate left and right stereo tracks, it cannot further separate by frequency.
There was (probably still is) an effect called SoundKeys that could separate audio like that. It was part of the Trapcode Suite that Red Giant distributed. There may be others, or you may be able to find an audio tool that could generate separate tracks and then import those into AE and do the Audio Keyframe trick for each.
But otherwise the set up is pretty simple, create your crystals — can be 2d from Illustrator or Photoshop, or maybe 3D with Cinema 4D light and import into AE to link the scales to the audio. But in any case, you’ll want the anchor points at the base of the crystals so it it looks like they grow/shrink with the music.
FYI, the Audio Spectrum effect has a ‘Polar Path’ option that does scale out lines from the center, and the effect does separate frequencies… similar to what you are looking for. But I don’t know of a way to use that for what you are trying to accomplish.
-
Kevin Camp
January 16, 2022 at 4:30 pm in reply to: Type one letter at a time without using text animatorsI think you can actually do this with a text animator, but rather than using opacity, use scale. You’ll also want to change the smoothness to 0%
-
Kevin Camp
January 14, 2022 at 7:21 pm in reply to: Maintain Gap Between Text Layers, No Matter The Width Of TextSomething like this should work, add it to the position property and set the ‘target’ to be the layer that you want it to maintain 200px from.
target = thisComp.layer("LayerToFollow") ; rect = target.sourceRectAtTime() ; x = target.position[0] + rect.left + rect.width + 200 ; [ x, value[1] ]The expression assumes that the text layers are left-justified and none are parented.
If you animate the furthest left text layer, the text layers with that expression will follow it along the x-axis.
-
This might work for you.
Create 4 text layers and name them ‘Days’, ‘Hours’, ‘Minutes’, ‘Seconds’. Then add a slider expression control to the Days text layer and set key frames to have the slider count down from 10 to 0 (or however you want it).
On the Days text layer, add this expression to the Source Text:
days = Math.floor( effect("Slider Control")("Slider") ) ; n = days.toString() ; if ( n.length == 1 ) { n = '0' + n ; } nOn the Hours text layer add this expression:
days = thisComp.layer("Days").effect("Slider Control")("Slider") ; hrs = Math.floor( ( days % 1 ) * 24 ) n = hrs.toString() ; if ( n.length == 1 ) { n = '0' + n ; } nMinutes, add this expression:
days = thisComp.layer("Days").effect("Slider Control")("Slider") ; mins = Math.floor( ( ( ( days % 1 ) * 24 ) % 1 ) * 60 ) ; n = mins.toString() ; if ( n.length == 1 ) { n = '0' + n ; } nAnd Seconds, add this expression:
days = thisComp.layer("Days").effect("Slider Control")("Slider") ; secs = Math.floor( ( ( ( ( ( days % 1 ) * 24 ) % 1 ) * 60 ) % 1 ) * 60 ) n = secs.toString() ; if ( n.length == 1 ) { n = '0' + n ; } nThe text in the layers should now count down.
-
From what you describe, it sounds like you have a list of words in a text layer, where each word is separated by a return (i.e. each word is on it’s own line). If so an expression on the source text could probably work for you, try this:
Twirl down the text layer’s properties to get to Text>Source Text and enable expressions for Source Text (select the Source Text property and choose Animation>Add Expression). Then add this as the expression:
lines = value.split('\r') ; rate = 5 ; // lines per second n = Math.floor( time * rate ) ; lines[n]It should animate thru each word at a rate of 5 words per second. If needed you can edit the ‘rate’ value in the expression, ex: rate = 10 would be 10 words per second.
-
Kevin Camp
December 23, 2021 at 11:17 pm in reply to: How do I keep the number of dashes in a stroke constant?Assuming you are using a shape layer and a straight path with two points, you could try this on the ‘dash’ property:
n = 10 ; // number of dashes shp = content("Shape 1").content("Path 1").path ; p1 = shp.points(time)[0] ; p2 = shp.points(time)[1] ; d = length( p1, p2 ) d / n / 2If its curved, the math would be much more difficult.
If you are OK with dots on a line versus dashes, you can use the Audio Waveform effect on a layer… Set the Display Options to ‘Digital’, the Audio Samples to the number of dots you want, the Thickness and colors as needed. The create a mask on that layer (curved or straight) and, in the Audio Waveform settings, set the Path property to that mask. Then you can animate the mask as needed and the line of dots will follow it and maintain a consistent number of dots.
-
Kevin Camp
December 23, 2021 at 5:18 pm in reply to: Looking for AE script to export multiple different numbers easily.There is a script on aescprits.com called CompsFromSpreadsheet that would probably make things easier for you. It’s not free, but there is a short tutorial/overview you can check out and I think you can try it before you buy it. Probably worth checking out.
You can also use expressions to get a comp’s name and use it in a text layer… the thought here would be to use AE’s built in auto numbering when you duplicate it in the project window.
Say you have a comp named MyComp_1, when you duplicate that comp in the project window the duplicate will be MyComp_2. If you had a text layer in MyComp_1 that grabbed the value after the underscore in the comp name (‘1’ in this case), when it is duplicated in the project window the text in the resulting MyComp_2 will be ‘2’. As you keep duplicating the comp that number will change in each new comp. You also don’t have to start with 1, the comp could start and MyComp_100 and the duplicate will be MyComp_101…
If something like that might work for you, here is the expression to add to the source text of the text layer:
txt = thisComp.name.split('_') ; txt[ txt.length - 1 ]The expression is looking for an underscore to separate the number, and it will return the last item it finds after the underscore. EX: This_is_My_Comp_1 will still return just the ‘1’. You could use a space or other character by changing the character in the split() function. EX: split(‘+’) will split the name at a + character (EX: My_new-Comp+1, returns ‘1’). So the expression can be pretty flexible for comp naming.