Skip to main content

subsprint — offline subtitle generator for any video

CLI that creates .srt subtitles from a video file, fully offline after the first model download. Tuned for Apple Silicon (M2 Pro tested).

Install

cd ~/Developers/projects/subsprint
pip install -e .
# optional, faster on M-series via Metal:
pip install -e ".[mlx]"
# optional, for `translate` command:
pip install -e ".[translate]"

Requires system ffmpeg (brew install ffmpeg).

Use

# transcribe English audio to English subs
# (pass -l en for English audio, omit -l for auto-detect)
subsprint transcribe movie.mp4 -l en

# higher quality, still <10 min with Metal backend:
subsprint transcribe movie.mp4 -l en --backend mlx --model small

# best quality offline (slower on CPU, faster on Metal):
subsprint transcribe movie.mp4 -l en --model large-v3-turbo --beam-size 1

# custom output dir / suffix / format
subsprint transcribe movie.mp4 -l en -o ./subs --suffix .en.auto --format srt

# translate an existing .srt (e.g. Italian -> English), keeps timings
subsprint translate subs.srt --from it --to en -o subs.eng.srt

Outputs by default sit next to the video: <video-stem>.<lang>.auto.srt (e.g. movie.en.auto.srt).

Example timings (English subs, measured on M2 Pro 10-core / 16 GB)

Fast defaults: model small, beam_size=1, VAD on, faster-whisper CPU backend.

Video length Audio language Model / backend Subs generation time
1 min English small / faster-whisper (CPU) ~5 s transcribe (+ one-time model load)
10 min English small / faster-whisper (CPU) ~50 s (scales linearly)
98 min English small / faster-whisper (CPU) ~5 min transcribe + ~20 s audio extract, 1,474 segments

Notes:

  • First run downloads the model once (small ≈ 500 MB); afterwards 100 % offline.
  • Model load is extra on first run only (~45 s with download, ~1 s cached).
  • tiny is faster but noticeably less accurate; medium / large-v3-turbo are more accurate and slower (turbo is much faster on the Metal mlx backend).
  • mlx-whisper (--backend mlx) uses the Metal GPU: ~3 s inference per 60 s of audio with small after the one-time model download.
  • translate uses Helsinki-NLP/opus-mt-<src>-<tgt>; first run downloads it too.

Metadata

Release files for subsprint 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for subsprint 0.1.0
File Size Uploaded
subsprint-0.1.0.tar.gz 7.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for subsprint 0.1.0
File Interpreter ABI Platform
subsprint-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 14.9 kB

Release files / subsprint-0.1.0.tar.gz

Download URL subsprint-0.1.0.tar.gz
Size 7.1 kB
Tags Source
SHA-256 checksum
How to use checksums
c70eb807622bd73f2f3fb08d50c835960c4518e2699f06a23c9b613009c9ab29
BLAKE2b-256 checksum
How to use checksums
bd69c5e526e72a7dfc19821c1d54a524c663892056b2dd57b4c51401bbe16639
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release files / subsprint-0.1.0-py3-none-any.whl

Download URL subsprint-0.1.0-py3-none-any.whl
Size 7.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0582db373af0da6607324f36fb1d83feb2780fc0fd75a5ac7f22b19e15e3ef8b
BLAKE2b-256 checksum
How to use checksums
f2d0ae1ee332e2559274d14d538fcca14955afc2a2735593252a23c8d1ffd1c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.10

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page