DEV Community

Cover image for Building a 100% Offline Subtitle Burner with Next.js, NestJS, and faster-whisper
Subham
Subham

Posted on

Building a 100% Offline Subtitle Burner with Next.js, NestJS, and faster-whisper

SubtitleStudio: The Subtitle Burner That Ghosted Every Subscription ๐ŸŽฌ

PROJECT โ€” https://github.com/Subham-Maity/add-subtitles-to-video

Front Home Page

Dashboard

1

I opened CapCut to burn one subtitle onto a 12-second clip. It asked me to subscribe first. I closed the tab and went to see what was actually doing the work under the hood: FFmpeg.

Turns out someone already built the free version. It's called SubtitleStudio, and it runs entirely on your own machine.

Why This Even Needed To Exist

Burning subtitles onto a video just means stamping text permanently into the pixels, frame by frame. Think permanent marker on a photo, not a sticky note you can peel off later.

Most subtitle tools are literally just wrapping FFmpeg, a free command-line video tool, and charging you monthly for it. That's a vending machine charging rent on a candy bar you already own. ๐Ÿฌ

2

SubtitleStudio Adobe Premiere Pro CapCut Pro
Cost Free, forever ~$20โ€“35/mo ~$20/mo
Runs fully offline Yes Partially No
Transcription Local AI, built-in Manual / paid add-on Cloud-based
Footage leaves your machine Never Depends on plan Yes
License MIT, open source Proprietary Proprietary

Pretty sure I thought CapCut Pro was still $10 a month. Checked, and it quietly doubled to around $20 in early 2026. Software you install once does not get to do that. ๐Ÿ˜…

What Actually Happens When You Drop In A Video

SubtitleStudio isn't one program, it's three, working together. A Next.js browser app, a NestJS API server, and a small Python AI service all talk to each other through Docker. Three cooks, one kitchen, each one on a different course.

Upload a video and the whole pipeline just kicks off, no extra clicking. Behind the scenes the job gets passed along in stages, like a relay race. Each runner does their leg, then hands off the baton.

3

Upload โ†’ Extract Audio โ†’ Transcribe With AI โ†’ Group Words Into Cues
Enter fullscreen mode Exit fullscreen mode

Notice there's no trip to a cloud server anywhere in that chain. Everything after "Upload" happens on your own hardware. That's the whole point. ๐Ÿ”’

The Brain: faster-whisper Doing the Listening

The AI engine here is faster-whisper, a speed-tuned version of OpenAI's Whisper speech model. It swaps in a leaner backend called CTranslate2, which runs roughly 2 to 4x faster than plain Whisper. Same listening skill, lighter engine underneath.

Think of it like swapping a giant hardcover dictionary for a phone app with the exact same definitions inside. Same answer, way faster to flip through.

SubtitleStudio lets you pick how big an AI "brain" to load, from tiny to large-v3. Basically choosing a bag for a weekend trip.

4

  • A tiny fanny pack: fast to grab, doesn't hold much detail
  • A giant suitcase: slow to drag around, holds absolutely everything

Same trade-off applies here. The tiny model needs about 1 GB and flies through a video. The large-v3 model needs about 10 GB but misses almost nothing. ๐ŸŒ

Model VRAM / RAM Speed Accuracy
tiny ~1 GB Fastest Decent
base ~1.5 GB Fast Good
small ~2.5 GB Moderate Better
medium ~5 GB Slower Great
large-v3 ~10 GB Slowest Best

SubtitleStudio defaults to base, a safe middle ground for most laptops. On clean audio, Whisper's large-v3 sits around 93 to 95 percent word accuracy. That's genuinely close to a human typing along in real time. ๐ŸŽฏ

The Editor That Doesn't Lie To You

Most subtitle editors show you a preview that's quietly lying. What looks centered in the browser can land three inches off-screen in the final export. Hit this exact bug editing a vertical reel once, centered on-screen, floating off-frame the second it exported. ๐Ÿ˜ฉ

SubtitleStudio fixes this with actual math, not vibes. Think of a sticker glued onto a photo.

Resize the photo, and the sticker has to shrink or grow by that exact same amount. It stays glued in the same relative spot.

5

Every project shares one reference height: 540 pixels. A subtitle's size scales up or down from that single number to match whatever you're exporting to.

  • On a 1080p export, the scale factor is 1080 รท 540, or 2x
  • On a 4K export, the scale factor is 2160 รท 540, or 4x
  • On a 1920-tall vertical reel, it's roughly 3.5x

Same font, same position, zero guesswork, no matter the resolution. That's it. ๐Ÿ“

Watching It Cook Live (No Frozen Spinners)

Older apps make you refresh the page just to check if a job's done. SubtitleStudio streams live updates instead, using something called Server-Sent Events, or SSE. It's a pizza tracker situation, the app pings you when the status changes instead of you refreshing every two minutes. ๐Ÿ•

6

Approach How it works Feels like
Polling Client keeps asking "done yet?" on a timer Calling the pizza place every 2 minutes
WebSockets Both sides talk, anytime, two-way A phone call that's open both ways
SSE Server pushes updates, one-way, no re-asking The tracker just updates itself

SubtitleStudio only ever needs one-way updates, so SSE was the lighter, simpler pick. No need for a full two-way phone line here.

During transcription, the bar jumps through real stages: 40 percent, 75 percent, then 100 percent when cues are ready. Export progress climbs from 10 all the way to 98 percent as FFmpeg reports actual encoding time. Either way you're watching a real number, not a spinning wheel. โณ

The Export Finish Line: GPU vs. CPU

Hit export and SubtitleStudio tries your NVIDIA GPU first, using a dedicated chip called NVENC built just for encoding video. No GPU, no problem, it quietly drops back to your CPU instead.

Picture a race down the same exact road. NVENC is a sports car built for one job only, encoding video, fast. Your CPU is a regular bike, it still finishes, just working a lot harder to get there.

7

Try NVENC (GPU) โ†’ Works? Fast export, done โ†’ Missing? Fall back to libx264 (CPU) โ†’ Export still finishes
Enter fullscreen mode Exit fullscreen mode

Either branch reaches the finish line eventually. The GPU one just gets there while you're still reading this sentence. ๐Ÿ

In real tests elsewhere, swapping software encoding for NVENC turned a 12-minute export into under 2 minutes. Roughly 6x faster, sometimes more depending on the card. One path just makes you wait a lot less. โšก

Two things people assume wrong here. You don't need a fancy GPU to use this at all. And CPU-only export doesn't mean it's broken.

CPU-only laptops still export just fine. Slower, not broken.

TL;DR

  • SubtitleStudio burns AI-transcribed subtitles onto video, 100% offline, free forever under MIT
  • Runs as 3 services in Docker: a Next.js frontend, a NestJS API, and a Python faster-whisper AI engine
  • The WYSIWYG editor matches your export pixel-for-pixel, using one shared 540px reference height
  • Live progress bars run on Server-Sent Events, not spinners or repeated polling
  • Exports try NVIDIA NVENC first, then fall back to CPU automatically
  • Zero cloud calls, zero API keys, zero monthly bill

Up next: clone the repo, drop in a clip, and see if you can spot the difference from a $20 export. ๐ŸŽฌ

Top comments (0)