Intermediário 14 minÁudio

WhisperX: marcação temporal palavra por palavra e locuteurs

Resposta direta

WhisperX é uma camada livre (licença BSD-2-Clause, mais de 24.000 estrelas no GitHub) em torno do Whisper que adiciona duas funcionalidades: um alinhamento forçado por modelo fonético para marcações de tempo realmente exatas, palavra por palavra, e uma separação de falantes com pyannote-audio. Tudo funciona localmente, com inferência em lotes que, segundo o projeto, é até 70 vezes mais rápida que o tempo real com Whisper large-v2 — ao custo de carregar três modelos em vez de apenas um.

Whisper transcreve muito bem e fornece marcações de tempo aproximadas. WhisperX acrescenta duas coisas que fazem toda a diferença quando se vai além de um simples documento: um alinhamento forçado que fornece marcações de tempo realmente exatas para cada palavra e uma separação dos falantes que indica quem falou e quando. É isso que transforma uma transcrição em legendas utilizáveis e em um relatório de reunião legível.

Por Mohamed Meguedmi·Atualização 2026-09-29·Testado no Windows, macOS e Linux

#O que Whisper sozinho não resolve

WhisperX é uma camada de software livre, sob licença BSD-2-Clause, que adiciona ao Whisper duas coisas que o modelo sozinho não oferece: marcações de tempo palavra por palavra obtidas por alinhamento forçado com um modelo wav2vec2 e uma identificação de quem fala produzida por um modelo pyannote. Você precisa do WhisperX se estiver criando legendas que precisam aparecer no momento certo ou um relatório de reunião que mostre quem falou. Se você só quer texto, o Whisper sozinho ou o faster-whisper basta. O custo envolve carregar três modelos em vez de um, precisar de um token de acesso do Hugging Face para a separação dos falantes e lidar com limitações documentadas: os números e valores monetários não são alinhados, a fala simultânea é mal processada e a separação dos falantes continua imperfeita. Tudo funciona localmente, seja em GPU, em processador ou em Mac.

Whisper gera um texto excelente. Suas limitações aparecem assim que se quer algo além de texto. De acordo com o repositório WhisperX, as marcações de tempo do Whisper são fornecidas por enunciado, e não por palavra, e podem apresentar desvios de vários segundos: isso passa despercebido em um documento, mas é inaceitável na legendagem, em que uma legenda que aparece um pouco atrasada é pior do que nenhuma legenda. E o Whisper não distingue quem está falando: duas horas de reunião são devolvidas como um monólogo indiferenciado.

O WhisperX atende às duas necessidades adicionando etapas em vez de substituir o modelo. É essa escolha de projeto que preserva a qualidade de transcrição que você conhece. O projeto, publicado sob a licença BSD-2-Clause, tem hoje mais de 24.000 estrelas no GitHub — um sinal de que a necessidade que ele atende, adicionar marcações de tempo à transcrição e atribuí-la aos falantes, vai muito além da legendagem.

#As três etapas

O kit IA Local

Seu ChatGPT privado e gratuito na sua máquina em 1 hora — LM Studio, Ollama, Open WebUI, seus documentos, sem nuvem.

  • Espaço online vitalício
  • PDF + arquivos
  • Atualizações vitalícias
O que cada etapa faz e o que ela exige
EtapaFunçãoO que é necessário
Detecção de voz (VAD)O sinal é dividido em zonas de fala antes da transcriçãoUm detector de fala (pyannote por padrão, silero como opção)
TranscriçãoO áudio é convertido em texto, via faster-whisper, uma implementação rápida do WhisperUm modelo Whisper: seu tamanho determina qualidade e memória (a configuração padrão de linha de comando é small)
Alinhamento forçadoCada palavra é reposicionada exatamente no áudio, via wav2vec2Um modelo fonético específico para a língua
Separação de falantesO áudio é dividido por voz e os turnos de fala são identificados, via pyannote-audioO modelo padrão pyannote speaker-diarization-community-1, cujo acesso exige aceitar condições

A detecção de voz tem um duplo papel: o repositório indica que ela reduz as alucinações e permite agrupar os segmentos sem piorar a taxa de erro por palavra. A etapa de alinhamento é a que costuma ser subestimada. É ela que torna confiáveis as marcações de tempo de cada palavra, usando um modelo wav2vec2 para alinhar cada palavra à sua posição real no sinal de áudio. Ela depende do idioma: o repositório especifica que é necessário um modelo wav2vec2 específico para o idioma e que existem modelos padrão para inglês, francês, alemão, espanhol e italiano, além de muitos outros idiomas via Hugging Face. Para um idioma ausente da lista, você precisa encontrar por conta própria um modelo fonético e testá-lo. A própria transcrição se beneficia da inferência em lote: o projeto anuncia até 70 vezes a velocidade em tempo real com o modelo large-v2, sem especificar o hardware no README. Considere esse número como um limite máximo a verificar na sua máquina.

#A separação dos falantes, sem ilusão

A identificação de falantes funciona agrupando as características vocais ao longo de toda a gravação, via pyannote-audio. O modelo padrão do WhisperX é hoje speaker-diarization-community-1, publicado sob a licença CC-BY-4.0, que recebe um sinal de áudio mono a 16 kHz (o estéreo é convertido para mono, e as demais frequências são reamostradas). A ficha do modelo afirma que ele tem um desempenho muito melhor que o antigo pipeline 3.1. O repositório do WhisperX é franco sobre as limitações: a sobreposição de falas é tratada de forma insatisfatória, e a separação continua « longe de ser perfeita ». As taxas de erro de diarização publicadas pelo pyannote mostram isso: 11,7 % no AISHELL-4, 17,0 % no AMI (microfones individuais), 19,9 % no AMI (microfone distante), 26,7 % no CALLHOME (parte 2) e 46,8 % no Ego4D, dependendo do corpus. São corpora acadêmicos, não as suas gravações, mas a ordem de grandeza indica que uma revisão continua sendo necessária. A situação piora justamente quando as reuniões ficam mais complicadas: pessoas que interrompem umas às outras, alguém longe do microfone, vozes semelhantes.

Duas observações práticas. É possível indicar um número mínimo e máximo de falantes (opções --min_speakers e --max_speakers), e o repositório recomenda fazer isso quando você conhece esse número: o modelo não precisa mais adivinhá-lo. E os rótulos são anônimos por definição: o sistema informa que havia três vozes e quais turnos de fala pertencem a cada uma, mas não quem são essas pessoas. Associar um rótulo a um nome é uma etapa manual — e é também nesse momento que a transcrição se torna um dado pessoal.

!
Tratar localmente não substitui o consentimento
Uma transcrição com identificação dos falantes é um dado pessoal, independentemente de sair ou não da sua máquina. O processamento local é a abordagem técnica correta; ele não dispensa informar as pessoas gravadas e obter seu consentimento.
i
As condições de acesso, concretamente
O modelo de separação de falantes está hospedado no Hugging Face. O repositório é público, mas a página do modelo exige que você aceite as condições para acessar os arquivos e depois crie um token de acesso de leitura, a ser passado com --hf_token. É gratuito, não exige pagamento, mas essa é uma etapa que você não deve descobrir só no meio de um processamento em lote.

#Precisão real, não a do benchmark

A transcrição em si merece um número, porque o benchmark habitual dá uma imagem excessivamente positiva. De acordo com o VexaScribe, um serviço comercial de transcrição, o Whisper large-v3 atinge uma taxa de erro por palavra de cerca de 2,7% no LibriSpeech test-clean, um conjunto de áudios limpos com um único locutor. Em áudio real em inglês — reuniões, podcasts, chamadas —, o mesmo site situa essa taxa em torno de 8 a 12%. São ordens de grandeza publicadas por uma empresa do setor, válidas para o inglês: elas não dizem nada sobre suas gravações em francês. O WhisperX não melhora a transcrição em si, que continua sendo a do Whisper: o que ele acrescenta é a identificação exata de onde cada palavra se encontra e de quem a pronunciou, duas informações que essa taxa de erro não captura.

Escolher a ferramenta certa de acordo com a necessidade
NecessidadeFerramenta
Texto simples, rápidoApenas o Whisper ou uma implementação rápida como faster-whisper
Legendas que aparecem no momento certoWhisperX: o alinhamento é sua própria razão de existir
Relatório com quem disse o quêWhisperX com separação de falantes ativada
Transcrição em tempo real, baixa latênciaUm motor orientado a fluxo; essa cadeia é feita para arquivos

#O que isso exige

O tamanho do modelo Whisper determina tudo
Um modelo grande produz o melhor texto e exige mais memória; o repositório indica que um modelo maior melhora a precisão das marcações de tempo ao custo de mais memória da GPU, enquanto um modelo de alinhamento maior não ajuda muito.
São carregados três modelos, não um
A memória atinge o pico quando os modelos de transcrição, alinhamento e separação estão todos na memória. O exemplo Python do repositório libera cada modelo após sua etapa (coleta de memória seguida de torch.cuda.empty_cache()), solução comum em uma placa de vídeo com pouca memória.
Sem GPU, incluindo Mac
O repositório fornece o comando para o processador e para macOS: --compute_type int8 --device cpu. Ele não publica nenhum tempo de processamento no processador: meça em um trecho antes de planejar um lote. Com um GPU NVIDIA, ele exige o kit CUDA 12.8, e o projeto indica menos de 8 GB de memória para large-v2 com beam_size=5.
O processamento em lote ajuda
O processamento em lotes explica a velocidade anunciada: o valor padrão na linha de comando é --batch_size 8. Reduzi-lo (o repositório cita 4) libera memória da GPU.
→
Falta de memória da GPU: três formas de lidar com isso
O repositório lista três maneiras de reduzir o uso de memória: diminuir --batch_size (por exemplo, para 4), escolher um modelo menor (--model base) ou um tipo de cálculo mais leve (--compute_type int8). Segundo o repositório, as duas últimas opções podem prejudicar a qualidade. Comece, portanto, reduzindo o tamanho do lote.

#Instalar e iniciar a transcrição

A instalação é feita via pip; o pacote exige Python 3.10 a 3.13. A linha de comando grava por padrão todos os formatos disponíveis (srt, vtt, txt, tsv, json, aud), e a opção --highlight_words True sublinha cada palavra no momento em que ela é pronunciada nas legendas SRT e VTT. O JSON inclui os identificadores de locutor quando a separação está ativada.

  1. 01
    Instalar o WhisperX
    pip install whisperx instala o pacote; com uma GPU NVIDIA, instale primeiro o kit CUDA 12.8, de acordo com o repositório. O repositório acrescenta que também pode ser necessário instalar o ffmpeg, remetendo às instruções de instalação do Whisper.
  2. 02
    Transcrever e alinhar
    Iniciar uma primeira rodada com um modelo Whisper de tamanho médio (o padrão é small), especificando o idioma se ele for conhecido de antemão: sem essa informação, o idioma é detectado automaticamente, e o modelo de alinhamento depende desse idioma.
  3. 03
    Ativar a separação, se necessário
    Adicionar --diarize e o token de acesso do Hugging Face obtido após aceitar as condições do modelo pyannote, e indicar o número de falantes se você souber.
  4. 04
    Reler o arquivo de saída
    Abrir o arquivo SRT ou JSON gerado e verificar alguns trechos escolhidos ao acaso, especialmente os turnos de fala nos momentos em que várias pessoas falam quase ao mesmo tempo.
Terminal
pip install whisperx

# Avec GPU : transcription, alignement et séparation des locuteurs
whisperx reunion.mp3 --model medium --language fr \
  --diarize --hf_token VOTRE_JETON --min_speakers 2 --max_speakers 5

# Sur processeur ou sur Mac
whisperx reunion.mp3 --model medium --language fr --compute_type int8 --device cpu

#O que o alinhamento não conseguirá marcar com timestamps

O repositório lista limitações que é preciso conhecer antes de prometer legendas perfeitas. A primeira diz respeito aos números: palavras cujos caracteres não estão no dicionário do modelo de alinhamento, por exemplo «2014.» ou «£13.60», não podem ser alinhadas e, portanto, não recebem nenhuma marcação de tempo. Em uma reunião cheia de valores e datas, essas palavras aparecem no SRT sem marcação de tempo própria. A segunda é a fala simultânea, com a qual tanto Whisper quanto WhisperX lidam mal. A terceira é o idioma: é necessário um modelo wav2vec2 específico.

Duas diferenças em relação à versão original do Whisper também explicam diferenças no texto. Para processar cada lote em uma única passagem, a inferência é feita sem as marcações de tempo do Whisper, o que, conforme alerta o repositório, pode gerar divergências em relação à saída padrão. Além disso, a opção condition_on_prev_text está desativada por padrão para reduzir as alucinações. Desde 2026, a opção --interleaved_context restabelece um contexto contínuo entre os segmentos, útil para a pontuação e o vocabulário técnico segundo o projeto, mas ela é recente: teste-a em um trecho antes de adotá-la.

#Casos de uso concretos

Legendar vídeos de treinamento
A marcação de tempo palavra por palavra evita legendas que ficam uma frase inteira atrás da voz, um defeito imediatamente visível e incômodo em conteúdo pedagógico.
Relatório de reunião com vários interlocutores
A separação dos falantes permite reconstruir quem propôs o que, uma informação que um resumo sem atribuição não consegue reproduzir fielmente.
Podcasts e entrevistas longas
A inferência em lote é feita para gravações longas: é o que anuncia o título do artigo dos autores, « Time-Accurate Speech Transcription of Long-Form Audio ».
Arquivos de áudio para indexar
Um texto com marcações de tempo para cada palavra permite direcionar uma pesquisa diretamente para o instante exato da gravação, e não apenas para o documento inteiro.
Trechos para redes sociais
Identificar exatamente onde uma frase marcante é dita, palavra por palavra, facilita a extração de um trecho curto sem precisar ouvir todo o vídeo novamente.

Um ponto em comum nesses casos: nenhum exige transcrição em tempo real. Trata-se de um arquivo já gravado que é processado depois, o que dá tempo para a inferência em lote fazer seu trabalho sem restrições de latência. Quando a necessidade passa a ser legendagem ao vivo — uma conferência transmitida, uma ligação em andamento — o WhisperX deixa de ser a ferramenta adequada, independentemente da potência da máquina disponível.

#A transcrição é uma entrada, não um produto final

Em quase todos os casos reais, a transcrição não é o objetivo: ela alimenta um modelo local que, a partir dela, gera um relatório, um registro de decisões ou um resumo. Isso tem uma consequência para a qualidade esperada: um erro de transcrição em uma palavra rara importa menos do que a estrutura dos turnos de fala, porque é essa estrutura que permite ao modelo atribuir corretamente o que foi dito.

Na prática, um fluxo de produção razoável separa as duas funções: o WhisperX produz um texto com marcações de tempo e identificação dos falantes, depois um modelo de linguagem separado relê esse texto para extrair um resumo estruturado. Misturar as duas funções em uma única chamada — pedir a um modelo para resumir diretamente o áudio — priva o pipeline da precisão das marcações de tempo que o WhisperX tem justamente a função de fornecer e dificulta a verificação posterior de um trecho específico.

Outro benefício: a transcrição é feita apenas uma vez e depois é reutilizada para vários entregáveis — resumo curto, registro de decisões, legendas — sem precisar voltar ao áudio. O texto com marcações de tempo e rótulos torna-se a fonte de verdade.

#FAQ

O WhisperX é gratuito?+
Sim, é um projeto livre sob licença BSD-2-Clause que funciona localmente e conta com mais de 24.000 estrelas no GitHub. A separação dos locutores utiliza um modelo pyannote hospedado no Hugging Face. É preciso aceitar as condições de uso desse modelo e criar um token: isso é gratuito, sem pagamento, mas precisa ser feito antes do primeiro processamento em lote.
Qual a confiabilidade da separação de falantes?+
Correta em um áudio limpo com vozes distintas, mais frágil assim que as vozes se sobrepõem: o repositório reconhece que a separação está «longe de ser perfeita». Os erros publicados pelo pyannote variam de 11,7% a 46,8% conforme o corpus. Indicar o número mínimo e máximo de falantes ajuda, e uma revisão humana continua necessária.
É necessária uma GPU?+
Não: o repositório fornece o comando para CPU e para macOS (--compute_type int8 --device cpu), mas não publica tempos de processamento nesses ambientes, portanto meça primeiro. Com uma GPU NVIDIA, o projeto anuncia menos de 8 GB de memória para large-v2 com beam_size=5, e o uso de memória atinge o pico quando transcrição, alinhamento e separação são carregados juntos.
WhisperX ou Whisper sozinho?+
Whisper sozinho se você quiser apenas texto, sem preocupação com sincronização precisa, por exemplo, para indexar o conteúdo de uma entrevista. WhisperX quando você precisar de marcação de tempo palavra por palavra para legendas que apareçam no momento certo, ou de identificação dos falantes para transcrever uma reunião com várias vozes de forma legível e utilizável.
Funciona em francês?+
Sim: o repositório menciona o francês entre as cinco línguas (juntamente com o inglês, o alemão, o espanhol e o italiano) que possuem um modelo de alinhamento padrão. Use --language fr. Para uma língua ausente dessa lista, você precisa encontrar por conta própria um modelo fonético wav2vec2 e testá-lo antes de contar com marcações de tempo confiáveis palavra por palavra.
Ele pode transcrever em tempo real?+
Não, ele foi projetado para arquivos já gravados, não para um fluxo ao vivo. A legendagem ao vivo exige um motor voltado a fluxos, com um equilíbrio entre latência e precisão diferente do buscado aqui, e a inferência em lote que torna o WhisperX rápido ao processar um arquivo inteiro deixa de fazer sentido em um fluxo de áudio contínuo que chega em partes.
Este guia ajudou você?

Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.