captions.js vs Remotion, ASS/libass and FFmpeg drawtext
How the common ways to render animated captions compare: live preview, server-side burn-in, headless browser, word-level animation.
Most caption tools make you choose between a good live preview and a reliable server-side export. This page compares the usual options on the points that decide which one fits.
| captions.js | @remotion/captions | Remotion (full render) | ASS / libass | FFmpeg drawtext | |
|---|---|---|---|---|---|
Live preview over <video> | yes | no renderer | yes, React player | depends on the player | no |
| Server-side burn-in | yes, Node + FFmpeg | no | yes | yes | yes |
| Headless Chrome in production | not needed | n/a | required | not needed | not needed |
| Word-level highlighting | yes | timing data only | build it yourself | karaoke tags only | no |
| Kinetic word animations (bounce, pop, box…) | yes, 10 built in | no | build it yourself | no | no |
| Preview and export share one code path | yes | n/a | yes, through Chrome | n/a | n/a |
| Ready-made styles | 26 presets | none | templates | write them by hand | none |
| License | MIT | Remotion license | Remotion license | open source | LGPL/GPL (FFmpeg) |
When to use which
- captions.js: you show captions to users in a browser editor or player and export
MP4s on a server, and the two must look identical. The same
renderFramedraws on a canvas in both places, with skia-canvas + FFmpeg on the server and no browser. - Remotion: your whole video is a React composition (titles, scenes, transitions),
and you are fine running headless Chrome to render it.
@remotion/captionsparses and groups transcripts; it does not draw anything, so you still build the caption visuals. - ASS / libass: classic subtitles, broad player support and fast burn-in, as long as you only need static lines or simple karaoke color changes.
- FFmpeg
drawtext: a single static line or a watermark. Word-by-word animation means generating and escaping a filter per word, which gets unmanageable fast.
Licensing note
Remotion uses its own license: free for individuals and small teams, paid for companies above a size threshold. Check their current terms. captions.js is MIT and stays MIT, free for commercial use.
Try it
npx captions.js burn talk.mp4 words.json --preset KaraokeThen see Animated captions with FFmpeg in Node.js and the styles gallery.
For AI agents and LLMs: this page as Markdown · llms.txt · all docs in one file