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-translatefor quick usage; programmatic API for embedding.
Quick Start
- Create venv (choose one, depending on your setup):
- Windows:
py -m venv .venvorpython -m venv .venv - macOS/Linux:
python3 -m venv .venv(orpython -m venv .venv) - Activate:
- PowerShell:
.venv\Scripts\Activate.ps1 - CMD:
.venv\Scripts\activate.bat - bash/zsh:
source .venv/bin/activate
- PowerShell:
- Windows:
- 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
openaiby default; modesmartby default. - The CLI auto-loads
.envwithOPENAI_API_KEYand optionalOPENAI_MODEL. - Note: Inside the venv prefer
python -m pip ...(on Unix you may usepython3 -m pip ...).
- Smart (default):
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-timingto 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 120if needed.
- Use
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.jsonwith segment time windows needing audio review.- Provide
resolutions.jsonlater (same IDs) to finalize improved translations (plannedfinalize). --probe auto: will require a transcriber provider and audio source (roadmap).
Configuration
- OpenAI provider needs
OPENAI_API_KEYand optionalOPENAI_MODEL. - The CLI auto-loads
.envfrom the repo root orVidScalerSubtitleAdder/.envif 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5cadb1381a7055d628989d335115418fe930f10f549d816e71678f772ab5d286
|
|
| MD5 |
a657dd854604152bb2ae24beeb5b4c66
|
|
| BLAKE2b-256 |
ad17cb0e7952771239aeba9093ca2cf81a11b599b08a35782d55d33315d1e8da
|
File details
Details for the file smart_srt_translator-0.1.2-py3-none-any.whl.
File metadata
- Download URL: smart_srt_translator-0.1.2-py3-none-any.whl
- Upload date:
- Size: 20.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e4f6e32ed8c936fc0dc3f38e1b011481977473c7712740763664bc743474d73
|
|
| MD5 |
efe38d6a823f6375fd24ee4ed2d6cb17
|
|
| BLAKE2b-256 |
7a68492c528480d49a2fadfdd27f51796441150aeca3ef7975480d2560bd8b2c
|