Open-source project
ThioJoe/Auto-Synced-Translated-Dubs avatar
ThioJoe/Auto-Synced-Translated-Dubs

Auto-Synced-Translated-Dubs: dubbing a video from an existing SRT with AI voices

Automatically translates the text of a video based on a subtitle file, and then uses AI voice services to create a new dubbed & translated audio track where the speech is synced using the subtitle's timings.

1,746 stars166 forksPythonAGPL-3.0

At a glance

What is it?
ThioJoe's Python tool translates an SRT file, synthesizes each line with Google, Azure or DeepL voices, and rebuilds an audio track that follows the subtitle timings. It is a batch pipeline for creators who already have a subtitle file, not a live dubbing service.
Who is it for?
Adopt it if you already own a well-timed SRT file, are willing to open a Google Cloud, Azure or DeepL account, and want a repeatable batch run over several languages. Do not adopt it if you have no subtitle file, expect automatic speaker separation, or want a viewer-side toggle for YouTube dubbing; this tool does not do those things.
Can I use it commercially?
Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
Is it still maintained?
Yes. The repository last received commits 128 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem: translating a video without losing lip-sync

Machine translation of a video usually produces either a wall of text or a voice track that drifts away from the picture. Auto-Synced-Translated-Dubs takes a narrower route. It assumes a human-made SRT file already exists for the source video, and treats those subtitle timings as the schedule for the dubbed audio. Every translated line is given exactly the duration of the line it replaces, so the new speech starts and stops where the original speaker did.

The audience is the creator who publishes the same video in several languages and already pays for a translation or TTS API. The README describes batch processing of multiple languages in sequence, which is the shape of the workflow: one run, several output tracks. It is not aimed at live streaming, at videos with no subtitle file, or at anyone who wants a single click inside an editing suite.

How the pipeline turns an SRT into a dubbed track

The README lays out five steps. First, Google Cloud or DeepL translates the subtitle text and writes new SRT files. Second, the timings of each subtitle line are used to calculate how long the spoken clip must be. Third, text-to-speech creates an audio clip of the translated line using neural voices. Fourth, the clip is stretched or shrunk to match the original speech length.

Step four has a documented alternative. By default the tool does a second synthesis pass through the API at the speaking speed it calculated during the first pass, which the README says slightly improves audio quality. Azure TTS skips this entirely because it accepts a requested duration before synthesis. Fifth, the clips are placed at their time points to build the audio track.

Two constraints are stated plainly. The process assumes one speaker; the README suggests separate SRT files per speaker if you want to work around that. And it works best with subtitles that keep the gaps between sentences and lines, because those gaps are what the timing calculation depends on.

Installing it and running a first dub

The README lists ffmpeg as the only external requirement, with rubberband as an optional alternative for audio stretching. The Python dependencies come from requirements.txt, which pulls in the Google TTS and Azure speech SDKs, pydub, pyrubberband, deepl and others. Clone the repository and install them:

bash
pip install -r requirements.txt

Credentials go into cloud_service_settings.ini for Google Cloud, Azure and/or your DeepL token. The README recommends Azure for synthesis on voice quality and sample rate, and Google Cloud for translation on speed, cost and language coverage. General options such as sample rate, output format and two-pass synthesis live in config.ini.

The run itself is defined in batch.ini. The [SETTINGS] section holds the path to the original video, used to get the correct audio length, and the path to the original subtitle file. The enabled_languages variable lists the [LANGUAGE-#] sections to process, so you can keep many presets and pick a subset per run. Then run the script and let it finish:

bash
python main.py

The README states that translated subtitle files and dubbed audio tracks land in a folder called output. If you want the tracks inside an mp4, TrackAdder.py does that with ffmpeg, and its settings are edited at the top of the script file rather than in an ini file.

One speaker, good subtitles, and a paid API account

The biggest limitation is stated in the README itself: the process currently assumes a single speaker. Any video with a conversation, an interview or overlapping voices will produce a track where every line is read by the same voice. Splitting speakers means building separate SRT files and running the pipeline once per speaker, which multiplies both the work and the API cost.

The second constraint is the input subtitle. The README says the tool works best with subtitles that do not remove gaps between sentences and lines. If your SRT was generated by a tool that packs lines tightly, the duration calculation has less room to work with, and the stretch or shrink step has to distort the audio further. There is no documented cleanup pass for that case.

The third is cost and access. Translation and synthesis both run through paid cloud services, and you have to obtain the credentials yourself. The README points to a Wiki for the Google Cloud setup, and the repository does not ship a local, offline TTS engine. Anyone expecting a self-contained download that dubs a video without an account will be disappointed.

Compared with YouTube's own dubbing and with subtitle-only translation

YouTube offers auto dubbing on some videos, and the search data around this project shows how much confusion that creates: people ask how to turn it on as a viewer, how to turn it off, and how to disable it on a phone. Those questions are about YouTube's platform feature, not about this repository. The difference in approach matters. YouTube's dubbing is applied by the platform to videos that qualify, and the viewer controls it. Auto-Synced-Translated-Dubs runs on your machine, produces files you own, and gives you the translated SRT alongside the audio, so the same run also yields captions and a track you can upload or archive.

Against subtitle-only translation tools, the difference is the audio. A tool that only translates an SRT leaves the viewer reading; this one adds a synthesized voice track. Against a manual dubbing workflow with a voice actor, the trade-off is the opposite: no performance and no speaker separation, but a batch run over many languages at API prices, with a config file that stores the voice choice per language for the next video.

Maintenance, licence and the cost of an upgrade

The repository is not archived, and the last push was on 2026-05-11. The most recent tagged release listed is v0.21.0 from 2025-01-28, after v0.20.1 and v0.20.0 in 2024. That gap between tags and pushes suggests fixes and small changes land on main between releases, so pinning to a release tag is safer than tracking the branch if you need a reproducible pipeline.

The project is licensed AGPL-3.0. For a creator running it locally to dub their own videos, the practical question is whether the output counts as a covered work; that is a legal question, not one this article can settle. What is clear from the licence identifier is that AGPL-3.0 is a strong copyleft licence, so anyone embedding the code in a hosted service should read the terms before shipping.

Upgrade cost is mostly external. The pipeline depends on ffmpeg, on the Google and Azure SDKs in requirements.txt, and on cloud APIs whose voice lists and pricing change on their own schedule. A voice name that worked in a batch.ini preset can disappear from a service without any change to this repository, so keep the presets and the credentials documented somewhere you will find them.

Editorial conclusion

Adopt it if you already own a well-timed SRT file, are willing to open a Google Cloud, Azure or DeepL account, and want a repeatable batch run over several languages. Do not adopt it if you have no subtitle file, expect automatic speaker separation, or want a viewer-side toggle for YouTube dubbing; this tool does not do those things. Before committing, verify your target pair is supported by the translation service and the TTS voice list, install ffmpeg, and run one short clip through main.py to confirm the output track lines up with the original speech.

Frequently asked questions

What does auto dubbing mean in Auto-Synced-Translated-Dubs?

In this project it means translating the text of a video from an existing subtitle file and generating a new audio track with AI voices, placed at the subtitle timings so the speech stays in sync with the original video.

Can you disable auto dubbing in Auto-Synced-Translated-Dubs?

The README does not describe an on/off switch for dubbing itself. You control which languages run by editing the enabled_languages variable in batch.ini, which lists the [LANGUAGE-#] sections the program will process.

How do I automatically translate audio with Auto-Synced-Translated-Dubs?

You supply an original video and a matching SRT file, configure the cloud service credentials, then run python main.py. The tool translates the subtitle text, synthesizes each line with a TTS voice, and builds the dubbed audio track in the output folder.

How to use automatic dubbing in Auto-Synced-Translated-Dubs?

Install the requirements with pip install -r requirements.txt, install ffmpeg, set your credentials in cloud_service_settings.ini, choose languages in batch.ini, and run python main.py. The README notes the process currently assumes a single speaker.

Official sources

  1. Issues
  2. License: AGPL-3.0
  3. README
  4. Releases
  5. ThioJoe/Auto-Synced-Translated-Dubs on GitHub
Community notes

Community notes