Skip to main content

Transcribe videos to ASS subtitle files in 99 languages using faster-whisper

Project description

whispersub

Transcribe video files to ASS subtitle files using faster-whisper. Whisper detects the spoken language automatically and supports 99 languages, including English, Spanish, French, German, Japanese, Chinese, Arabic, Hindi, and many more.

  • Batch mode: pass multiple files or directories to scan recursively
  • Surround-sound audio extraction (dialogue-channel aware)
  • Word-level timestamps with balanced line breaking
  • Per-word confidence colour coding in the terminal

Requirements

Python 3.10+. Works on Linux, Windows, and macOS. No system FFmpeg needed — PyAV bundles its own. Supports MKV, MP4, AVI, MOV, WebM, TS, and other common video formats.

Install

pip install whispersub

GPU acceleration (Linux/Windows — requires an NVIDIA GPU with CUDA 12):

pip install whispersub[gpu]

Without [gpu], whispersub falls back to CPU automatically if CUDA is unavailable.

On first run, whispersub downloads the Whisper large-v3-turbo model (~800 MB) from Hugging Face and caches it locally.

Usage

# Single file — writes movie.en.ass alongside the video
whispersub movie.mkv

# Explicit output directory
whispersub movie.mkv --output-dir ~/subs

# Whole directory, force overwrite
whispersub /media/shows --force

# File with multiple audio tracks — list tracks first, then pick one
whispersub series.mkv                     # error lists available tracks
whispersub series.mkv --audio-track 2

Options

Option Default Description
--audio-track N auto Audio track index (required if the file has multiple tracks)
--colour-by probability Per-word terminal colour coding: probability or duration
--font-size N 48 Font size (1280×720 canvas; player scales to actual resolution)
--force off Overwrite existing subtitle files
--limit N Stop after N segments per video (useful for testing)
--max-line-count N 2 Maximum subtitle lines per card
--max-line-width N 36 Maximum characters per line
--max-threads N all cores CPU thread limit
--output-dir DIR alongside video Write all subtitle files to this directory

Output

Subtitle files are named <stem>.<language>.ass, e.g. movie.en.ass. The detected language comes from Whisper. Output is compatible with VLC, mpv, IINA, MPC-HC, and other players that support ASS/SSA subtitles.

We chose ASS over SRT for better-looking subtitles: font sizing scales correctly to any resolution, and line breaks are balanced for readability. It also allows us to preserve word-level timing, so the file can be post-processed or reformatted without re-transcribing.

Licence

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

whispersub-1.1.1.tar.gz (21.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

whispersub-1.1.1-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file whispersub-1.1.1.tar.gz.

File metadata

  • Download URL: whispersub-1.1.1.tar.gz
  • Upload date:
  • Size: 21.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for whispersub-1.1.1.tar.gz
Algorithm Hash digest
SHA256 fc44c3c7002dc3b3b83053aa59f906bcba2393da4f1c15193feb49728aa3197c
MD5 078da2e8896d6d6e34edac6fb58a59a6
BLAKE2b-256 cf0ef79e8c20cae9a8d8c33170af66fdd47bfe14ce79eee2ed0e5e79a7264fc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for whispersub-1.1.1.tar.gz:

Publisher: publish.yml on zvea/whispersub

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file whispersub-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: whispersub-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for whispersub-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f5994cad156ee407027d1d1b62547a29a1c3aa2850c1d35fc6648e6da3173e14
MD5 4e4fc4fce4652046cdc82ffae58a4d76
BLAKE2b-256 5f35dc4b83520335f7804182f6e8eac6a4e396142f5e69239027086e08f1c0f8

See more details on using hashes here.

Provenance

The following attestation bundles were made for whispersub-1.1.1-py3-none-any.whl:

Publisher: publish.yml on zvea/whispersub

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page