Skip to main content

CLI for generating and translating SRT subtitles with WhisperX

Project description

Subtatix

Subtatix is a small CLI for generating .srt subtitles from audio or video files with WhisperX, with optional subtitle translation.

It transcribes the input, aligns subtitle timings with WhisperX, and can then translate the resulting subtitle lines into another language.

Requirements

  • Python 3.12+
  • ffmpeg installed separately and available on your PATH
  • Enough disk space for model downloads and caching

The first run will be slower because WhisperX and translation models need to be downloaded. Subsequent runs reuse the cached models and do not need to download them again unless the cache is cleared.

ffmpeg is an external system dependency. It is not installed by pip, uvx, or uv tool install.

Installation

Run without installing:

uvx subtatix --help

Install as a tool with uv:

uv tool install subtatix

Install with pip:

pip install subtatix

or from my Forgejo PyPI instance:

uvx --index https://forgejo.chrispaganon.com/api/packages/chris-paganon/pypi/simple/ subtatix --help
uv tool install --index https://forgejo.chrispaganon.com/api/packages/chris-paganon/pypi/simple/ subtatix
pip install --index-url https://forgejo.chrispaganon.com/api/packages/chris-paganon/pypi/simple/ subtatix

Usage

transcribe creates an .srt subtitle file from an audio or video file:

subtatix transcribe input.mp4

This writes input.srt.

Transcribe to a specific output path:

subtatix transcribe input.mp4 --output some-path/some-file-name

--output is a base path, not a full .srt filename. This writes some-path/some-file-name.srt. If you also translate to Spanish, it writes some-path/some-file-name.es.srt.

Set the source language explicitly:

subtatix transcribe input.mp4 --from en

transcribe --to creates the original transcription and also translates it:

subtatix transcribe input.mp4 --to es

This writes both input.srt and input.es.srt by default.

To discard the original transcription and only keep the translated output:

subtatix transcribe input.mp4 --to es --discard-transcription

translate translates an existing .srt or .vtt file without transcribing audio or video:

subtatix translate input.srt --from en --to es
subtatix translate input.vtt --from en --to es

For translation-only mode, the input must be an .srt or .vtt file and --from is required. These commands write input.es.srt or input.es.vtt.

Translate an existing subtitle file to a specific output path:

subtatix translate input.srt --from en --to es --output translated/subtitles

This writes translated/subtitles.es.srt.

If CUDA runs out of memory on larger files, reduce the batch size or force CPU mode:

subtatix transcribe input.mp4 --batch-size 4
subtatix transcribe input.mp4 --device cpu

Passing an --output value that ends in .srt is rejected. Use a base path such as --output subtitles instead.

List supported language codes:

subtatix --list-languages
subtatix --list-target-languages

Models

By default, transcription uses WhisperX with the Whisper model large-v2. This is a good general default when you want higher transcription quality and aligned subtitle timings, but it is heavier and slower than smaller Whisper models.

Translation uses facebook/nllb-200-1.3B. The CLI accepts simple target codes such as en, es, fr, de, pt, ja, ko, zh, and also raw NLLB codes such as spa_Latn.

Other model options can also be used:

  • For transcription, you can pass another Whisper model with --model, such as small, medium, or large-v3, depending on your speed and accuracy needs.
  • For translation, the code currently defaults to the NLLB model above, but the translation layer is built around Hugging Face seq2seq models and could be adapted to use a different multilingual translation model if needed.

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

subtatix-0.2.0.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

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

subtatix-0.2.0-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file subtatix-0.2.0.tar.gz.

File metadata

  • Download URL: subtatix-0.2.0.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for subtatix-0.2.0.tar.gz
Algorithm Hash digest
SHA256 ae70f797d367974d42d571cdfc470c052ae1161eb351b8efc8617768afc23101
MD5 fb29d4df9aef1e3c5dc7b981c1925dba
BLAKE2b-256 0e542c83e808bbf791f7843d86d2f6092cbec092eacd31701ce61cbc2ac75cca

See more details on using hashes here.

File details

Details for the file subtatix-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: subtatix-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for subtatix-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e58cdbf558a0be687348044da7e638028d7c6d34e304c7db67eaa57dfe91fb21
MD5 37315b63c69b3a6038b7a90955e85fb6
BLAKE2b-256 dd514476145e5056a97511d556bdb51d83970bd172a6cd2c9d7b3a7a501126fc

See more details on using hashes here.

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