Skip to content
Nunatic02Public

About

Drag-and-drop video/audio to SRT subtitle CLI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

📝 get-srt

Drag-and-drop video/audio → SRT subtitles, transcribed locally.

Just run get-srt. Drop a video or audio file in, pick a model, get an .srt file out. Nothing leaves your machine.

💡 Why

I wanted subtitles for lecture/screen recordings without uploading anything anywhere. Two options exist for that: run Whisper locally, or upload the video to YouTube (as unlisted) and download the auto-generated captions once they're ready.

The YouTube route was ruled out without writing any code for it: it needs OAuth/API credentials, an upload of the full file, and then an unpredictable wait (minutes to hours) for auto-captions to appear before you can pull an .srt back down with something like yt-dlp. That's slow, depends on a network round-trip and a third party, and won't work on private/sensitive footage. Running Whisper locally has none of those problems and, on Apple Silicon, is fast enough that the round-trip through YouTube isn't a reasonable trade at all.

So get-srt runs Whisper locally through one of two backends, auto-picking the best one for your machine:

  • mlx-whisper — runs on the Apple Silicon GPU via Metal. This is the default whenever it's available, because it's dramatically faster on Mac than the alternative below.
  • whisperx — cross-platform (CPU or CUDA). Its forced word-alignment step produces tighter segment boundaries than plain Whisper decoding, at the cost of extra models to load and CPU-only speed on Mac.

Both were benchmarked directly on this machine (Apple M3 Max) before picking a default — see the numbers below.

📦 Install

Requires ffmpeg and a Python environment with one of the backends installed:

brew install ffmpeg
pip install mlx-whisper   # Apple Silicon — fastest
# or
pip install whisperx      # cross-platform (CPU/CUDA)

Not published to npm/Homebrew yet — for now, build it from source:

git clone https://github.com/Nunatic02/get-srt.git
cd get-srt
npm install && npm run build && npm link

🚀 Usage

get-srt

The interactive prompts walk you through the rest: drop a file, pick a model size, optionally force a language, done.

✨ Features

  • Interactive by default — guided prompts, no flags to remember
  • Drag & drop — drop video or audio files right into your terminal
  • Fully local — no upload, no account, no API key, no waiting on a third party
  • Auto-detects the fastest backend — mlx-whisper on Apple Silicon, whisperx elsewhere
  • 5 model sizes — tiny through large, trading speed for accuracy
  • Batch processing — drop a folder or multiple files; the model loads once and is reused for the whole batch (see Batch speed below)
  • Auto language detection, with an override flag for known-language content

💻 CLI Mode

get-srt lecture.mp4                     # Transcribe with default (small) model
get-srt -m large lecture.mp4            # Best accuracy
get-srt -l ja anime_clip.mkv            # Force Japanese instead of auto-detect
get-srt -b whisperx interview.mov       # Use whisperx instead of mlx
get-srt -s *.mp4                        # Batch, save to subtitles/ subfolder

⚙️ Options

Flag Description Default
-m, --model <name> Model size: tiny, base, small, medium, large small
-l, --language <code> Force source language, e.g. en, es, ja auto-detect
-b, --backend <name> Backend: mlx, whisperx auto-detect
-o, --output <name> Custom output filename (without extension) same name as source
-s, --subfolder Save to subtitles/ subfolder alongside source

🎛 Models

Model Hint
tiny Fastest, rough drafts only
base Fast, usable accuracy
small Recommended — good balance (Whisper's own default)
medium Slower, more accurate
large Best accuracy, slowest

🔬 Backend benchmark

Measured on this machine (Apple M3 Max, 96 GB RAM) on the same 20-second narrated clip, tiny model:

Backend Time Notes
mlx-whisper ~1.4s Runs on the GPU via Metal
whisperx ~6.9s CPU-only on Mac; extra VAD + alignment models

mlx-whisper was about 5x faster in this test, which is why it's the default whenever it's available. whisperx is kept as an explicit -b whisperx opt-in for its tighter word-aligned timestamps, or for machines without Apple Silicon.

⚡ Batch speed

The obvious way to run either backend — shell out to its CLI once per file — reloads the whole model (for whisperx: the VAD model, the ASR model, and the alignment model) from scratch every single time. That cost is fixed per file regardless of how short the file is, so it dominates batch runs.

get-srt instead spawns one long-lived Python worker for the whole batch, loads the model(s) into memory exactly once, and reuses them across every file. Measured on a batch of 3 files on this machine:

Backend / model Reload-per-file (old way) Loaded-once (get-srt) Speedup
whisperx / tiny 30.4s 14.7s ~2.1x
mlx / large-v3-turbo 8.7s 6.5s ~1.3x

The gain scales with batch size — it's roughly one saved model-load per extra file — and is largest for whisperx, which has three models to reuse instead of one.

📁 Supported formats

Input: .mp4, .mov, .mkv, .avi, .webm, .m4v, .ts, .flv, .mp3, .wav, .m4a, .aac, .flac, .ogg, .opus, .aiff, .wma Output: .srt

📄 License

MIT

About

Drag-and-drop video/audio to SRT subtitle CLI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages