Skip to main content

Smart SRT subtitle translation with optional audio probing and provider abstraction

Project description

Smart SRT Translator

A lightweight, extensible Python package for translating SRT subtitle files, with optional audio probe support and pluggable providers (OpenAI, etc.).

Features

  • Smart SRT in/out: preserves timing and structure.
  • Provider abstraction: start with a no-op Dummy, optionally use OpenAI.
  • Optional audio probe flow: generate JSON requests for uncertain segments.
  • CLI srt-translate for quick usage; programmatic API for embedding.

Quick Start

  • Install (PyPI): python -m pip install "smart-srt-translator[openai]" (zsh/PowerShell: Extras in Anführungszeichen setzen)
  • Create venv (choose one, depending on your setup):
    • Windows: py -m venv .venv or python -m venv .venv
    • macOS/Linux: python3 -m venv .venv (or python -m venv .venv)
    • Activate:
      • PowerShell: .venv\Scripts\Activate.ps1
      • CMD: .venv\Scripts\activate.bat
      • bash/zsh: source .venv/bin/activate
  • Install (local): python -m pip install -e ".[openai]" (omit [openai] to skip OpenAI extra; zsh/PowerShell: Extras quoten)
  • Translate (CLI):
    • Smart (default): srt-translate translate Sample/firstdayinnewhospital.srt en de
    • Provider is openai by default; mode smart by default.
    • The CLI auto-loads .env with OPENAI_API_KEY and optional OPENAI_MODEL.
    • Note: Inside the venv prefer python -m pip ... (on Unix you may use python3 -m pip ...).

Quick Start (DE)

  • Minimal: srt-translate translate <input.srt> en de (language-aware preset applies for DE).
  • Timing-critical (burn-in/live): srt-translate translate <input.srt> en de --preserve-timing --wrap-width 120
  • Improve readability (long clips): srt-translate translate <input.srt> en de --expand-timing --expansion-factor 1.3 --min-seg-dur 2.0
  • Both (recommended for DE video): srt-translate translate <input.srt> en de --preserve-timing --wrap-width 120 --expand-timing

Preserve Timing Mode

  • For timing-critical SRT where segments must never exchange words across boundaries:
    • Use --preserve-timing to translate per-segment with a higher wrap width (>=100), no balancing, and no cross-boundary reflow.
    • Example: srt-translate translate input.srt en de --preserve-timing
    • Tip: Combine with a larger --wrap-width 120 if needed.

Timing Expansion (Prototype)

  • Expands segment durations to improve readability (longer target texts like DE):
    • --expand-timing --expansion-factor 1.3 --min-seg-dur 2.0 --reading-wpm 200 --min-gap-ms 120
    • Works with both smart and preserve-timing modes; keeps segment order, shifts subsequent segments forward.
    • Recommended for DE: --preserve-timing --expand-timing --wrap-width 120 --expansion-factor 1.3
    • Basic per-segment: srt-translate translate Sample/firstdayinnewhospital.srt auto de --provider dummy --mode basic

Recommended Defaults

  • Wrap width: 40 (--wrap-width 40)
  • Review: on, thresholds ASCII=0.6, STOP=0.15 (override with --no-review, --review-*)
  • Strict review: on with 2 passes (disable via --no-strict-review)
  • Smoothing: on (disable via --no-smooth)
  • Balancing: on, ratio=1.8 (disable via --no-balance, tune with --balance-ratio)

Minimal Usage

srt-translate translate Sample/firstdayinnewhospital.srt en de

Programmatic API

from smart_srt_translator import translate_srt_file, translate_srt_smart, TranslateOptions

res = translate_srt_file(
    "Sample/firstdayinnewhospital.srt",
    src_lang=None,  # auto
    tgt_lang="de",
    options=TranslateOptions(probe_mode="off")
)
print(res.output_path)

# or Smart mode (uses recommended defaults)
out = translate_srt_smart(
    "Sample/firstdayinnewhospital.srt",
    src_lang="en",
    tgt_lang="de",
    # wrap_width=40,
    # review=True,
    # review_ascii_threshold=0.6,
    # review_stop_threshold=0.15,
    # strict_review=True,
    # strict_max_passes=2,
    # smooth=True,
    # balance=True,
    # balance_ratio=1.8,
)
print(out)

Audio Probe Flow (Concept)

  • --probe ask: creates <output>.requests.json with segment time windows needing audio review.
  • Provide resolutions.json later (same IDs) to finalize improved translations (planned finalize).
  • --probe auto: will require a transcriber provider and audio source (roadmap).

Configuration

  • OpenAI provider needs OPENAI_API_KEY and optional OPENAI_MODEL.
  • The CLI auto-loads .env from the repo root if present.

Status

  • MVP scaffold ready. OpenAI provider implemented at a minimal prompt level.
  • Finalization flow and advanced sentence-grouping/caching from the app are planned to be ported.

License

MIT

Further Docs

  • Parameter reference: see PARAMS.md for a concise overview of modes, flags, defaults, and recipes.
  • Readability guide: see READABILITY.md for DE presets and timing expansion tips.

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

smart_srt_translator-0.1.3.tar.gz (19.0 kB view details)

Uploaded Source

Built Distribution

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

smart_srt_translator-0.1.3-py3-none-any.whl (21.0 kB view details)

Uploaded Python 3

File details

Details for the file smart_srt_translator-0.1.3.tar.gz.

File metadata

  • Download URL: smart_srt_translator-0.1.3.tar.gz
  • Upload date:
  • Size: 19.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for smart_srt_translator-0.1.3.tar.gz
Algorithm Hash digest
SHA256 57d9f0603e5a5d4c624d377db3b35f9a7669d269901d5861fd49516a4ea819e8
MD5 63fcd293f1d46b6a135f20681a18a76b
BLAKE2b-256 86f0e18574aea43d3cc0b4ca36bb02687e4cf15e891819daebcc6c657137547a

See more details on using hashes here.

File details

Details for the file smart_srt_translator-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for smart_srt_translator-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 121067cc4e3ed062448791a5d88ecd7965f7981f6b94f11bf63f88d1e02dd119
MD5 76c75a7f6b018c884b153e4b8ead2ff5
BLAKE2b-256 53bd03a697fcc008cc9fcdc328a05965484ae7375b2ac9dc56776e75e9f493ae

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