Skip to contentlyrisync

How to import SRT lyrics into After Effects

What a subtitle file is, and why the import is missing

An SRT or WebVTT is a list of cues: a start time, an end time and some text. That is what a stack of text layers with in and out points is, which is why the gap feels strange. After Effects treats text as a design object with a typeface, animators and transforms, and has no obvious default for an imported cue. Premiere can import a caption because a caption there is one track item, not two hundred styled layers. So the work is construction, not conversion: something has to build the layers.

Route one: a script that builds the layers

ExtendScript can create compositions, text layers, keyframes and markers directly. A script holding your cue list can therefore build the entire stack in one pass, and this is what most automated solutions do underneath, including ours.

You run it with File, Scripts, Run Script File, and pick the .jsx. Nothing is installed and nothing runs in the background. Two things are worth checking before you trust any script from anywhere: whether it adds to the composition you have open or creates its own, and whether the whole thing lands inside one undo group. If it does not, backing out of a result you dislike means pressing undo once per layer.

LyriSync exports one of these. It adds to the active composition when there is one, on the assumption you have already built the comp you want the lyrics in, and only creates a composition when nothing is open. Everything happens in a single undo group.

Route two: a panel

A CEP extension docks inside After Effects like any other panel and can push work into the project without you handling a file. Its advantage over a script is the second import. Timings change: you fix a wrong line and want the comp updated. A script run twice gives you two copies of everything. A panel can tag what it created and replace only that, leaving your own layers alone. LyriSync's After Effects panel works this way: it marks the composition and every layer it makes, then removes what matches before it writes the new version. It is a free download for Mac and Windows, for After Effects 2021 or newer.

Route three: expressions on a single Source Text

You can also keep one text layer for the whole track and drive its Source Text property from data, either with keyframes at each cue or with an expression reading a JSON file through a footage item. One layer instead of hundreds, and the styling is defined once.

The tradeoff is that you get one text object, so you cannot animate two lines against each other, cross-fade between them or give an individual line its own transform. For a clean single-line caption it is the tidiest approach there is. For anything where lines overlap it is the wrong shape.

Which layout to ask for

Layers: one text layer per cue, each with its own in and out point. Pick it when lines animate independently.

Source Text: one layer for the whole track with the property keyframed. At word level that alone reads as a word-by-word reveal.

Karaoke: one layer per line, with a Range Selector animator whose fill colour sweeps across the characters in step with each word. It is built from After Effects' own text animation, so the colour stays one property you can change afterwards.

The manual route, and when it is still right

Paste the lyrics into one text layer, split it and drag each piece into place. Not worth doing for a full track, but right for a fifteen second social cut with four lines, where setting up a pipeline costs more than it saves.

Things that go wrong

The timings are right and everything sits one beat early. Check that your comp starts at zero. A comp with a non-zero start time offsets every imported layer by that amount, and it is the most common single cause of a whole track being uniformly out.

Frame rate mismatch. Cue times are in seconds and After Effects works in frames, so they are rounded on import. That is invisible at 24, 25 or 60 fps; it only bites if you change the comp frame rate afterwards, which moves every keyframe.

Long lines running off the frame. Anything building layers has to decide how wide the text box is, and a script that hardcodes 1920 by 1080 overflows a vertical comp. Ours reads the composition's real width and height at run time and sizes the box as a fraction of it.

Non-Latin characters arriving as boxes. That is a font problem, not an import problem. The layer holds the right text; the typeface has no glyph for it.

Align a song

Align any whole song up to 10 minutes and open it in the editor: play it, check every word and fix timings. The private preview is available for 5 days. You pay per song, when you export.

Next guide: How to sync lyrics to a song without an acapella