Smooth End Crawl

When designing end credits I deal with taking care about many components: fonts, proper punctuation, diactrics and special characters, typesetting, layout design, colors, sound sync, etc. Actually this is what makes me fond of title design process. I can use most of graphic design skills in one place altogether! And there’s always room for creativity and advancement.

Many times I felt sad from seeing clumsy twitchy end credits after watching a great movie. Flickering or jittering effect in the end crawl is a common problem. It still takes place and seems to never go away. This is one of the reasons I decided to write this post to sum up best practices.

Jittering crawl

End crawl jitter effect appears in the form of an unpleasant twitching of scrolling lines of text.

Keyframing is a common method of creating moving objects in AfterEffects. It allows to incrementally change the position of a given object from one keyframe to another.

Imagine two keyframes with different vertical Y coordinates. One with Y = 0 at 00:00:00, and another with Y = 500 at 00:00:05. Going from 0 to 500 in 5 seconds is equal to the speed of 100 px/sec. Let’s convert it to pixels per frame with taking various FPS settings into account:

When pixel/frame ratio is not an integer number, it leads to so called sub-pixel motion. AfterEffects simulates it with changing the opacity of glyphs’ edges, thus calling the jitter effect.

So, the scroll should be running with integer values. To achieve that, layer positioning should be defined with a mathematical expression.

Expression-based scroll

Create a new null layer and paste the expression into Position.

Adding the script
Alt+click the icon and paste the script into the field

The script:

rate = 4; // scroll speed, px/frame
currentFrame = (time - inPoint)/thisComp.frameDuration;
value - [0, currentFrame*rate];

Link the layer with titles to this null expression layer.

Linking with null layer
Click `Parent & Link` and select choose `null` layer from the dropdown

Now the scroll is controlled by the expression. The speed can be adjusted by changing rate variable in the script. It’s recommended to keep px/frame rate under 4 for maximum smoothness.

Control start/stop time

If you would like to choose when the crawl starts or ends (e.g., title cards are shown before the end crawl), there’s an advanced version of the script:

rate = 4; // scroll speed, px/frame
timePoint = 10 ; // time reference point
if (time <= timePoint) // end crawl on timePoint;
	{
	if (marker.numKeys > 0){
		if (time > marker.key(1).time){
			value - [0,rate*timeToFrames(time-marker.key(1).time)];
		} else {
			value;
		}
		} else {
			value - [0,rate*timeToFrames(time-inPoint)];
		}
	} else {
		value - [0,rate*timeToFrames(timePoint-inPoint)];
	}

With timePoint = 10 scrolling will begin on the tenth second. Conversely, to end scrolling on timePoint, replace the <= condition in the third line to >=.

Recommendations

Here are some of my best practices of creation neat-looking and smooth end crawl sequences:

  1. Turn on Title/Action Safe grid in AfterEffects to keep the crawl within safe margins
  2. Avoid usage of the pure white color (#FFFFFF) on top of dark backgrounds. Reduced contrast rate works better the darkness of a movie theater.
  3. Choose fonts appropriately. Choose simple, easy-to-read typefaces without unnecessary complications and tiny details.
  4. Set Reduce Interlace Flicker effect to somewhere between 1 and 3, depending on the font size.
  5. Subtle Pixel Motion Blur effect might be helpful in some cases.
  6. Set Shutter Angle to 180 degrees.
  7. When exporting with Media Encoder, set Time Interpolation to Optical Flow or Frame Sampling.
  8. Make sure that all external assets1 are in original resolution, not scaled.

Related Links


  1. I personally prefer to design titles in InDesign, exporting them into EPS files and linking to a project in AfterEffects. ↩︎

Reply via Email or Mastodon