Centurion

CENTURION

SPEECH IN · SUBTITLES OUT · .NET 10

dub — Media Dubbing with Qwen3-TTS

Take a Centurion intermediate file (already carrying sentences, translations and speakers — run translate first if needed) and turn it into dubbed audio. Fully local, no cloud, no Python.

Centurion dub <CENTURION_FILE> -t <LANG> [options]

The pipeline

intermediate file (sentences + translations + speakers)
              ──► SpeakerProfiling (SNR-scored selection of each speaker's cleanest sentence)
              ──► TTS Synthesis (llama-tts / Qwen3-TTS 1.7B, parallel by speaker, long lines chunked)
              ──► TimeAlignment (ffprobe actual length  atempo; overlap detection & compression)
              ──► AudioMix (timeline placement + optional background ducking + loudnorm)
              ──► Quality Report  (translation coverage, alignment deviation, tempo stats)

Options

How it works

Examples

# Convert  translate  dub in one chain
Centurion convert episode.ass
Centurion translate episode.centurion.json -t zh
Centurion dub episode.translated.centurion.json -t zh

# Dub with per-character voice references
Centurion dub movie.centurion.json -t en --speaker-reference voices/

# Dub over the original soundtrack with ducking, louder output
Centurion dub subs.translated.centurion.json -t ja --background ost.wav --loudness-target -14

# Strict timing + aggressive parallelism for fast dialogue
Centurion dub subs.centurion.json -t en --strict-timing --tts-parallelism 4 --max-chunk-seconds 10

Outputs: <input>.dub.wav (the dub) + <input>.dub.centurion.json (intermediate, with all dub segments) + <input>.dub.centurion.quality.json (per-segment report).