Subtitler — de uma necessidade pessoal a uma ferramenta poderosa 🎬
eu sempre acreditei que a verdadeira tecnologia vai além da inovação pelo simples brilho das novidades.
para mim, tecnologia de verdade nasce da necessidade de resolver um problema real.
hoje em dia, corremos atrás de inovações para encher nossos computadores, celulares e olhos — mas mal conseguimos resolver nossos problemas diários.
foi pensando nisso que comecei o meu projeto: o subtitler.
como tudo começou
no início, o subtitler era algo totalmente pessoal — uma forma de facilitar minha própria vida.
sou apaixonado por cinema. se eu não tivesse me tornado desenvolvedor, provavelmente teria virado cineasta.
mas, mesmo sem câmeras ou sets de filmagem, nunca deixei de assistir filmes.
o problema é que os meus favoritos sempre foram difíceis de achar… e quando achava, quase nunca vinham legendados.
quando vinham, as legendas estavam completamente dessincronizadas.
foi aí que nasceu o subtitler.
uma ferramenta simples, feita para sincronizar e traduzir legendas automaticamente, com qualquer idioma — e que, enquanto esteve pública no github, acabou conquistando algumas pessoas por aí.
por enquanto, ele ainda roda apenas via terminal (cli), mas garanto que o poder está ali:
em até 18 minutos, o subtitler entrega uma legenda sincronizada e traduzida para qualquer filme, em qualquer idioma.
18 minutos pra ter aquele clássico em aramaico com legendas perfeitas? parece justo. 😄
como funciona o sistema subtitler
o subtitler é um sistema de sincronização automática de legendas com o áudio de vídeos, usando inteligência artificial.
ele alinha o texto das legendas com o exato momento em que cada palavra é pronunciada — e, se quiser, ainda traduz tudo no final.
visão geral da arquitetura
o sistema é modular e dividido em etapas bem definidas, cada uma cuidando de uma parte específica do processo:
🧠 1. interface cli (cli.py)
- recebe os comandos do usuário
- detecta automaticamente os arquivos de vídeo e legenda
- gerencia tradução quando solicitada
- mostra progresso e resultados em tempo real
⚙️ 2. pipeline principal (pipeline.py)
- coordena todos os módulos internos
- orquestra o fluxo entre extração de áudio, transcrição, matching e alinhamento
- limpa arquivos temporários e aplica as correções
🎧 3. extração de áudio (asr/audio.py)
- usa ffmpeg para extrair o áudio do vídeo
- converte para wav 16khz mono
- otimiza o áudio para o processamento pelo whisper
🗣️ 4. transcrição (asr/transcribe.py)
- usa whisper (ou parakeet/voxtral como fallback)
- gera transcrição palavra por palavra com timestamps
🔍 5. matching (match/fuzzy.py)
- compara o texto da legenda com o texto transcrito
- usa fuzzy matching (rapidfuzz)
- encontra correspondências mesmo com diferenças sutis
⏱️ 6. alinhamento temporal (align/affine.py ou align/piecewise.py)
- ajusta os tempos das legendas para sincronizar perfeitamente
- pode aplicar correção linear (afim) ou por trechos (piecewise)
🎯 7. alternativa: método mfa
- usa o montreal forced alignment
- precisão de até ±30ms por palavra
- ideal para trabalhos profissionais e legendagem de alta qualidade
métodos de sincronização
o subtitler oferece dois modos principais:
1. whisper (padrão)
usa ia para transcrever o áudio, compara com a legenda e aplica uma regressão linear afim para corrigir o tempo.
precisão: ±500ms
vantagens: rápido, multilingue, sem dependências externas.
2. mfa (montreal forced alignment)
alinha cada palavra individualmente ao áudio.
precisão: ±30ms
vantagens: extremamente preciso, ideal para produção profissional.
tradução integrada
após sincronizar, o subtitler pode traduzir automaticamente as legendas para qualquer idioma, com fallback inteligente:
- libretranslate (local e gratuito)
- google translate (fallback)
- azure translator (fallback avançado)
ele detecta o idioma automaticamente e mantém os timestamps originais intactos.
métodos de sincronização linear e piecewise
- sincronização afim (linear): ideal para atrasos constantes.
- sincronização piecewise: divide o vídeo em trechos e aplica correções específicas.
- mfa: gera novas legendas do zero com precisão de estúdio.
processo completo (resumo simplificado)
- detectar arquivos de vídeo e legenda
- extrair áudio com ffmpeg
- transcrever com whisper
- comparar com a legenda via fuzzy matching
- ajustar o tempo via regressão linear
- traduzir se necessário
- salvar o resultado final (
subtitle_synced.srt)
qualidade e métricas
o subtitler gera relatórios automáticos de qualidade, incluindo:
- match score (similaridade textual)
- r² (qualidade da regressão)
- rmse (erro médio em segundos)
- coverage (% de legendas alinhadas)
além disso, valida formatos, encodings e ordem temporal, e faz limpeza automática de arquivos temporários.
recursos avançados
- cache de modelos whisper
- controle de taxa (rate limiting) para apis
- fallback automático em caso de erro
- barra de progresso e estimativa de tempo
- configuração completa via
.env

o que vem pela frente
em breve, pretendo expandir o subtitler com:
- interface web moderna
- api rest
- integração com plex/jellyfin
- correção manual e preview visual
- tradução e sincronização em lote
sei que pode parecer meio assustador rodar tudo via terminal (por enquanto 👀), mas prometo:
a experiência de usar vai valer a pena — e a webgui está a caminho.
o subtitler nasceu de uma frustração pessoal e virou uma ferramenta de sincronização e tradução automática com inteligência artificial, múltiplos métodos de alinhamento e tradução integrada.
não é apenas sobre legendas — é sobre tornar acessível qualquer história, em qualquer idioma, para qualquer pessoa.