Skip to main content

CLI tool to transcribe and translate subtitles from videos

Project description

Transub

中文说明

Turn any video into ready-to-share subtitles. Transub extracts audio with ffmpeg, runs Whisper to transcribe the speech track, and hands the text to an LLM so you get well-translated subtitles without leaving the terminal.

Table of Contents

Overview

Transub orchestrates a reproducible pipeline:

  1. Extract audio from a video with ffmpeg.
  2. Transcribe speech via Whisper (local, mlx, whisper.cpp, or API).
  3. Translate subtitle batches with JSON-constrained prompts.
  4. Emit .srt or .vtt files with tuned line breaks and timing.

Intermediate state is cached so interrupted runs can resume without repeating earlier steps.

Key Features

  • End-to-end pipelinetransub run <video.mp4> handles extraction → transcription → translation → export.
  • Multiple transcription backends — choose local Whisper, mlx-whisper, whisper.cpp, or OpenAI-compatible APIs.
  • Reliable translations — JSON-constrained prompts, retry logic, and configurable batch sizes.
  • Subtitle polishing — punctuation-aware line splitting, timing offsets, and optional spacing tweaks when different scripts appear in the same line.
  • Stateful execution — cached progress in the work directory (defaults to ~/.cache/transub) avoids rework across runs.

Installation

1. Prerequisites

  • Python 3.10+
  • ffmpeg: Must be installed and available in your system's PATH.
    • Windows: winget install Gyan.FFmpeg or choco install ffmpeg
    • macOS: brew install ffmpeg
    • Linux: sudo apt update && sudo apt install ffmpeg (Debian/Ubuntu) or sudo pacman -S ffmpeg (Arch)

2. Install Transub

Option A: Using pipx (Recommended)

pipx installs Python CLI tools in an isolated environment, which is the cleanest way to put transub on your PATH.

pipx install transub

To update later, run:

pipx upgrade transub

Option B: Using pip

pip install transub

Upgrade with:

pip install --upgrade transub

3. Install a Whisper Backend (Optional)

transub supports multiple Whisper backends. Choose one based on your needs:

  • Cloud API (Recommended for quick start):

    • Uses OpenAI's Whisper API or compatible endpoints
    • No local installation required
    • Set OPENAI_API_KEY environment variable
    • Configure with backend = "api" during setup
  • Local backends (for offline use or custom models):

    • For most users (local, CPU/GPU):

      pip install openai-whisper
      
    • For Apple Silicon (macOS):

      pip install mlx-whisper
      
    • For whisper.cpp: Follow the whisper.cpp installation instructions to build the main executable and make it available on your PATH.

4. Configure Transub

Run the interactive setup wizard to create your configuration file.

transub init

The wizard will guide you through selecting the backend, model, and LLM provider for translation.

Note on API Keys: If you use OpenAI for both transcription (Whisper API) and translation (GPT models), they share the same OPENAI_API_KEY by default. If you need separate keys for different services, you can customize api_key_env in the config file for each service.

5. Run the Pipeline

transub run /path/to/your/video.mp4

Subtitles are written alongside the source video unless you set pipeline.output_dir in your config. Override the cache location with --work-dir when you need an alternate workspace.

Configuration Overview

Runtime settings live in transub.conf (TOML). Key sections:

  • [whisper] — backend selection, model name, device overrides, and extra arguments.
  • [llm] — translation provider/model, temperature, batch size, retry policy.
  • [pipeline] — output format, line-length targets, timing trim/offset, punctuation and spacing options.

Example:

[pipeline]
output_format = "srt"
translation_max_chars_per_line = 26
translation_min_chars_per_line = 16
normalize_cjk_spacing = true
timing_offset_seconds = 0.05

Run transub configure for an interactive editor, or update the file manually. Configuration files are user-specific and should not be committed.

CLI Cheatsheet

transub run demo.mp4 --config ~/transub.conf --work-dir /tmp/transub  # override work dir (defaults to ~/.cache/transub)
transub show_config
transub init --config ./transub.conf   # rerun the setup wizard
transub configure                      # edit config (0 saves, Q discards)
transub run demo.mp4 --transcribe-only # export raw transcription only
transub run demo.mp4 -T              # short flag for transcribe-only
transub --version                    # print the installed version

The work directory (defaults to ~/.cache/transub) stores audio, transcription segments, translation progress, and pipeline state. If a run is interrupted, re-running the same command resumes where it left off. Use --work-dir to point at a custom cache location when needed.

Development

If you want to contribute to transub, you can set up a development environment.

Installation from Source

  1. Clone the repository:
    git clone https://github.com/PiktCai/transub.git
    cd transub
    
  2. Create and activate a virtual environment:
    python3 -m venv .venv
    source .venv/bin/activate
    
  3. Install in editable mode with development dependencies:
    pip install -e ".[dev]"
    
  4. Install a Whisper backend for testing:
    pip install openai-whisper
    

Running Tests

python -m unittest

Code Structure

  • Source lives in transub/ (cli.py, config.py, transcribe.py, translate.py, subtitles.py, etc.).
  • Add tests beside related modules (e.g., transub/test_subtitles.py).
  • Use Rich console utilities and transub.logger.setup_logging for consistent output.

Project Layout

transub/
├── audio.py
├── cli.py
├── config.py
├── subtitles.py
├── transcribe.py
├── translate.py
└── test_subtitles.py

License

This project is distributed for personal use and study; there is no formal contribution process at this time.
Transub is released under the MIT License.

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

transub-0.2.1.tar.gz (49.2 kB view details)

Uploaded Source

Built Distribution

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

transub-0.2.1-py3-none-any.whl (46.5 kB view details)

Uploaded Python 3

File details

Details for the file transub-0.2.1.tar.gz.

File metadata

  • Download URL: transub-0.2.1.tar.gz
  • Upload date:
  • Size: 49.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for transub-0.2.1.tar.gz
Algorithm Hash digest
SHA256 c5ed07d39abe703f3eec9959c266f41eba85e3669536b9c23f1772cf8d6ee8b8
MD5 bfad6015afae2d211511119f7b635add
BLAKE2b-256 446226d66840150df222d09c1e2b6c27be47aac4aef49fb1a80a679d14b883a7

See more details on using hashes here.

File details

Details for the file transub-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: transub-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 46.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for transub-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f1527aa06c95777548e5802e0d3b6b496f9b6928e3741eefc95cb3502097ee23
MD5 17df3773eb1453acc33280cf2b7b5a77
BLAKE2b-256 400c09bc15b1324d334446bf51a21c1700f48c14a5d0da891ffe90ece75ebd94

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