🚀 Oferta especial: 60% OFF no CrazyStack - Últimas vagas!Garantir vaga →
Back-End

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.

CrazyStack
15 min de leitura
whisperXtranscrição automáticamodaltriggerfastapipython

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.

WhisperX

Modelo de transcrição com word-level timestamps e diarização

Saiba mais →

Modal

Infraestrutura serverless com GPU para executar modelos de AI

Saiba mais →

Trigger.dev

Orquestrador de jobs assíncronos em background

Saiba mais →

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.

1
Passo 1: Usuário faz upload do vídeo na aplicação.
2
Passo 2: Trigger envia uma POST para o endpoint FastAPI hospedado no Modal com a URL do áudio e uma callback URL.
3
Passo 3: O serviço gera o requestId e dispara o job de transcrição rodando em GPU no background.
4
Passo 4: Ao terminar, a transcrição é enviada pela callback para o Trigger, que então continua o fluxo do job.

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.

Checklist de Implementação

Endpoint FastAPI funcional com rota assíncrona habilitada
Job de transcrição totalmente desacoplado da aplicação principal
Transcrição com WhisperX Large V2 processando via GPU
Callback acionando retorno no Trigger com status
Billing otimizado usando WaitPoints para reduzir custos
Teste local com webhook.site validando ambiente antes de produção

Domine React e Node com o CrazyStack

Aprenda técnicas avançadas de React com nosso curso completo