captions.js

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/captionsRemotion (full render)ASS / libassFFmpeg drawtext
Live preview over <video>yesno rendereryes, React playerdepends on the playerno
Server-side burn-inyes, Node + FFmpegnoyesyesyes
Headless Chrome in productionnot neededn/arequirednot needednot needed
Word-level highlightingyestiming data onlybuild it yourselfkaraoke tags onlyno
Kinetic word animations (bounce, pop, box…)yes, 10 built innobuild it yourselfnono
Preview and export share one code pathyesn/ayes, through Chromen/an/a
Ready-made styles26 presetsnonetemplateswrite them by handnone
LicenseMITRemotion licenseRemotion licenseopen sourceLGPL/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 renderFrame draws 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/captions parses 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 Karaoke

Then 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