A command-line tool to transcribe and translate .srt subtitles using fully offline AI models (OpenAI Whisper + Meta NLLB).
- 🎙️ Transcribes audio or video files to
.srtsubtitles with timestamps - 🌍 Translates
.srtsubtitles between 200+ languages using NLLB - 🧰 100% local, no cloud required (besides downloading the models)
- ✅ Validates files, paths, languages and prevents accidental overwrites
- 🧪 Clean CLI built with
argparse, extensible and robust
⚙️ Install with uv
If you're already using UV, just do your usual uv sync. E.g.,:
uv sync
uv run nlingua2 --help
# Or
nlingua2 --helpOr even:
uv venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
uv pip install -e .
uv run nlingua2 --help
# Or
nlingua2 --helpRequires Python 3.11. (Some libs like
sentencepiecedon't install on 3.12+)
nlingua2 show_languagesYou can use relative or absolute paths, both work.
nlingua2 transcribe \
--input videos/aula01.mp4 \
--from portuguese \
--output srt/aula01.srtnlingua2 translate \
--input srt/aula01.srt \
--from portuguese \
--to english \
--output srt-ready/aula01-en.srtnlingua2 transcribe \
--input videos/aula01.mp4 \
--from portuguese \
--output srt/aula01.srt \
--translate_srt_to englishThis will generate two files:
srt/aula01.srt(original transcription)srt/aula01-en.srt(translated version)
--force→ overwrite existing output files--from/--to→ language names likeenglish,portuguese,french, etc--input/--output→ full path to your.mp4or.srtfile
This is optional, just a nice way to keep your project organized. You can also pass full absolute paths.
Example of a real command I just ran:
nlingua2 transcribe -i "/Users/luizotavio/Desktop/three_ALTERED.mp4" -f portuguese -o "/Users/luizotavio/Desktop/three_ALTERED.srt".
├── videos/ # Your input videos (.mp4, .mkv, etc)
├── srt/ # Transcribed original subtitles (.srt)
├── srt-ready/ # Translated subtitle versions (.srt)
├── src/nlingua2/ # Source code
├── pyproject.toml # CLI and dependency setup
└── README.md
MIT — Do what you want 😎
Created by Luiz Otávio Miranda, driven by clean code and a hatred for unnecessary cloud dependencies 🧠🔥
Ferramenta de linha de comando para transcrição e tradução de legendas .srt usando modelos de IA offline (OpenAI Whisper + Meta NLLB).
- 🎙️ Transcreve arquivos de áudio ou vídeo para
.srtcom timestamps - 🌍 Traduz legendas
.srtentre mais de 200 idiomas usando NLLB - 🧰 Tudo local, sem dependência de nuvem (além dos models, óbvio)
- ✅ Valida arquivos, caminhos, idiomas e evita sobrescrita acidental
- 🧪 CLI poderosa via
argparsecom comandos simples e extensíveis
⚙️ Instalação com uv
Se você já usa UV, faça como o de costume (uv sync).
uv venv
source .venv/bin/activate # ou .venv\Scripts\activate no Windows
uv pip install -e .Requer Python 3.11.
sentencepieceainda não suporta 3.12+. Algumas libs não instalam.
nlingua2 show_languagesOs caminhos não precisam ser locais, você pode usar caminhos completos do seu computador para entrada e saída.
nlingua2 transcribe \
--input videos/aula01.mp4 \
--from portuguese \
--output srt/aula01.srtnlingua2 translate \
--input srt/aula01.srt \
--from portuguese \
--to english \
--output srt-ready/aula01-en.srtnlingua2 transcribe \
--input videos/aula01.mp4 \
--from portuguese \
--output srt/aula01.srt \
--translate_srt_to englishIsso gera dois arquivos:
srt/aula01.srt(transcrição original)srt/aula01-en.srt(versão traduzida)
--force→ sobrescreve arquivos de saída existentes--from/--to→ aceita nomes comoenglish,portuguese,french, etc--input/--output→ caminho completo para os arquivos.mp4ou.srt
Isso é só para ficar tudo organizado dentro da pasta do projeto. Mas eu mesmo tenho usado muito com caminhos completos (absolutos). Exemplo de um comando que acabei de usar para transcrever um vídeo que gravei para o Youtube:
nlingua2 transcribe -i "/Users/luizotavio/Desktop/three_ALTERED.mp4" -f portuguese -o "/Users/luizotavio/Desktop/three_ALTERED.srt".
├── videos/ # Seus vídeos de entrada (.mp4, .mkv, etc)
├── srt/ # Legendas originais transcritas (.srt)
├── srt-ready/ # Legendas traduzidas (.srt)
├── src/nlingua2/ # Código-fonte do projeto
├── pyproject.toml # Configuração de dependências e CLI
└── README.md
MIT — Faça o que quiser 😎
Feito por Luiz Otávio Miranda, com carinho por código limpo e ódio por dependência de nuvem em IA local 🧠🔥