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

  • 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)
  • 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 or VidScalerSubtitleAdder/.env 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.2.tar.gz (19.2 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.2-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: smart_srt_translator-0.1.2.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.7

File hashes

Hashes for smart_srt_translator-0.1.2.tar.gz
Algorithm Hash digest
SHA256 5cadb1381a7055d628989d335115418fe930f10f549d816e71678f772ab5d286
MD5 a657dd854604152bb2ae24beeb5b4c66
BLAKE2b-256 ad17cb0e7952771239aeba9093ca2cf81a11b599b08a35782d55d33315d1e8da

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for smart_srt_translator-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0e4f6e32ed8c936fc0dc3f38e1b011481977473c7712740763664bc743474d73
MD5 efe38d6a823f6375fd24ee4ed2d6cb17
BLAKE2b-256 7a68492c528480d49a2fadfdd27f51796441150aeca3ef7975480d2560bd8b2c

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