Como transcrever vídeos automaticamente com WhisperX e Modal
Otimize seu SaaS de vídeos transcrevendo áudios longos via GPU com baixo custo e altíssima performance.
Por que isso é importante
Em projetos que envolvem vídeos submetidos por usuários, gerar legendas, resumos ou até conteúdo automatizado depende de transcrições precisas e ágeis. Hospedar seu próprio modelo WhisperX, orquestrar via Callback e escalar com Modal pode reduzir drasticamente tempo de espera e custo em comparação às APIs comerciais tradicionais.
O desafio da transcrição em projetos com vídeo
Ao construir um SaaS capaz de gerar informações automáticas de vídeos, como títulos e capítulos, torna-se essencial extrair o áudio e transcrevê-lo com precisão. No início, soluções como a API do Whisper da OpenAI pareciam promissoras, mas logo surgiram limitações severas de tamanho, latência e custo.
Por que não usar diretamente APIs comerciais?
Serviços como Whisper API da OpenAI ou Gemini até funcionam bem, mas têm limitações de tamanho ou cobram caro por segundo. Táticas como acelerar o áudio para pagar menos comprometem a qualidade. Foi nesse ponto que a opção de rodar o próprio modelo surgiu como solução mais eficiente.
APIs comerciais (Whisper, Gemini)
Serviços prontos de terceiros que recebem áudio e retornam a transcrição
Prós
- Pronto para uso
- Fácil integração
Contras
- Custo elevado por segundo
- Latência em vídeos longos
- Customização limitada
Modelo WhisperX hospedado
Hospedagem manual de modelo open-source com otimizações
Prós
- Customização completa
- Controle da performance
- Custo sob demanda
Contras
- Maior esforço de setup
- Necessidade de GPU dedicada
WhisperX e WhisperJax: comparando os modelos open-source
WhisperJax e WhisperX são forks otimizados baseados no Whisper da OpenAI. O WhisperX traz dois diferenciais fortes: word-level timestamps e diarização, identificando qual pessoa falou o quê em conteúdo como podcasts ou entrevistas.
Onde e como hospedar seu modelo WhisperX
Hospedar localmente está fora de questão em infra serverless comum ou com baixa potência. Por isso, plataformas como Replicate ou Modal oferecem execução em GPU sob demanda. A opção escolhida foi o Modal, por permitir configurar diferentes GPUs e executar qualquer código Python como se fosse uma Lambda Serverless.
Como moldar uma arquitetura performática e econômica
No início, o Trigger fazia uma chamada síncrona à função no Modal e aguardava até finalizar, o que resultava em cobrança mesmo enquanto o código estava ocioso. Com a nova arquitetura assíncrona, o Trigger dispara uma requisição para Modal junto de uma callback URL. Assim que finaliza, Modal aciona a URL e libera o prosseguimento do workflow — sem cobrar ocioso.
FastAPI para criar o endpoint no Modal
Para lidar com a orquestração HTTP, a FastAPI executa dois papéis: expor um endpoint para receber os dados do áudio e a URL de callback, e um serviço separado para carregar o WhisperX, transcrever e emitir o webhook. O endpoint responde imediatamente com 202 Accepted, enquanto a transcrição roda separadamente.
Como a transcrição funciona na prática com WhisperX
Após o download do áudio, o WhisperX entra em cena usando a GPU. O modelo Whisper Large V2 da OpenAI se mostrou altamente preciso, incluindo termos técnicos como HTTP, RabbitMQ e CI/CD. O retorno final traz os timestamps, idioma e falas separadas com precisão word-level.
Testando localmente usando Webhook.site
Durante o desenvolvimento, sites como webhook.site ajudam a simular uma callback URL, permitindo verificar se a transcrição final está chegando corretamente. Isso torna possível iterar rapidamente no desenvolvimento antes de integrar ao Trigger.
Reduzindo custos extremos com Wait Points do Trigger.dev
A funcionalidade Wait Point do Trigger suspende a execução do job até que a callback seja disparada. Isso elimina a cobrança do tempo de espera, garantindo que só haja custo real pelo tempo de execução útil da transcrição.
Resultados e observações finais
Essa nova abordagem reduz drasticamente os custos, torna o sistema mais performático e elimina as limitações de APIs comerciais. Além disso, a lógica com callbacks permite grande escalabilidade, já que cada job roda em containers independentes e isolados com GPU, de forma absolutamente paralela.
⚠️Atenção
O tempo de cold start de máquinas com GPU pode gerar uma latência inicial de 15 a 30 segundos. Tenha isso em mente ao lidar com os primeiros requests ou em ambientes menos ativos.
ℹ️Dica valiosa
Use o modelo WhisperX com qualidade "large-v2" e configure sua instância do Modal para usar placas de no mínimo 10GB de VRAM, como a NVIDIA A10G, para garantir performance estável.
❌Cuidado com concorrência
Certifique-se de que seu job de transcrição não sobrescreva ou compartilhe arquivos temporários entre execuções simultâneas para evitar conflito de dados.