Relatório de reunião automatizado: Whisper + LLM 100 % local
Um relatório de reunião gerado por IA é composto por duas etapas: transcrever o áudio e depois resumir o texto. O problema é que a maioria das ferramentas SaaS envia a gravação completa da sua reunião — nomes, números, estratégia — para servidores de terceiros. Este guia monta o mesmo pipeline inteiramente em ambiente local: Whisper para a transcrição, um LLM via Ollama para extrair decisões e ações, sem que nada saia da sua máquina.
#Por que o processamento local se impõe para reuniões sensíveis
Uma reunião não é um arquivo inofensivo. Em uma hora de gravação, você encontra nomes de clientes, valores, decisões de RH, rumos de produto ainda não anunciados e, às vezes, dados pessoais na acepção do RGPD. Entregar esse áudio a um serviço de geração automática de relatórios de reunião na nuvem é aceitar que todo esse conteúdo seja transferido, processado e potencialmente armazenado por um terceiro.
- Confidencialidade real
- O áudio e a transcrição permanecem no seu computador. Nenhum dado de negócio passa por um servidor externo que poderia registrá-lo ou usá-lo para treinamento.
- Conformidade simplificada com o RGPD
- Sem transferência para um subcontratado, muitas vezes situado fora da UE. A parte referente à « transferência de dados pessoais » da sua avaliação de impacto é eliminada na origem.
- Nenhum custo recorrente
- Sem assinatura por usuário nem cobrança por minuto transcrito. Depois que a máquina estiver instalada, você pode processar quantas reuniões quiser.
- Funciona offline
- Uma viagem, um local sem conexão confiável, uma reunião em uma sala isolada: o processamento continua disponível sem internet.
#O princípio do pipeline em duas etapas
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
Um relatório de reunião gerado por IA sempre se divide em duas etapas distintas, que não devem ser confundidas. A primeira transforma o áudio em texto: é o papel do Whisper, o modelo de reconhecimento de fala da OpenAI, cujas várias implementações open source funcionam perfeitamente localmente. A segunda transforma esse texto bruto em um documento estruturado: é o papel de um LLM local executado por Ollama.
- Transcrição (Whisper)
- Entrada: um arquivo de áudio ou vídeo. Saída: o texto completo da reunião, eventualmente com marcações de tempo. É um processamento computacional pesado, mas mecânico.
- Síntese (LLM Ollama)
- Entrada: a transcrição. Saída: um relatório — resumo, decisões tomadas, ações a serem tomadas com seu responsável. É aí que o prompt faz toda a diferença.
Separar as duas etapas tem um benefício prático: você pode refazer a síntese quantas vezes quiser, com prompts diferentes, sem precisar refazer a transcrição, que é a parte mais lenta.
#Pré-requisitos
- Ollama instalado
- O daemon escuta por padrão em http://localhost:11434. Se você ainda não instalou o Ollama, veja o guia de instalação listado no final da página.
- Um LLM para síntese
- Um modelo de 9 a 12B em Q4_K_M (≈7 GB de VRAM) bom em francês é suficiente com folga. Qwen 3.5 9B (256k de contexto, perfeito para transcrições longas) ou Gemma 4 12B são ótimas opções para resumos estruturados.
- Whisper
- Implementação local: openai-whisper (simples), faster-whisper (rápido) ou whisper.cpp (leve, sem GPU). Este guia utiliza as duas primeiras.
- ffmpeg
- Indispensável para ler formatos de vídeo (mp4 do Teams/Zoom) e converter áudio. O Whisper depende dele nos bastidores.
- Hardware
- Um GPU acelera bastante o Whisper, mas o medium também roda em CPU (mais lentamente). Estime cerca de 2 GB de VRAM para o modelo small, mais para o large-v3.
#Etapa 1: transcrever o áudio da reunião com o Whisper
A instalação mais direta é feita pelo pacote openai-whisper, que fornece um comando de linha de comando pronto para uso. Instale-o em um ambiente Python, com ffmpeg instalado no sistema.
Em seguida, a transcrição é feita com um único comando. Especificam-se o modelo, o idioma (defini-lo explicitamente evita erros de detecção em reuniões curtas) e o formato de saída em texto.
Você obtém um arquivo reunion.txt contendo a reunião inteira. Se quiser também legendas com marcações de tempo (úteis para localizar um trecho), adicione --output_format srt, ou all para gerar tudo de uma vez.
Para uma reunião de uma hora, a transcrição pode demorar na CPU. É aí que entra o faster-whisper, uma reimplementação que utiliza CTranslate2 e é muito mais rápida, com qualidade idêntica. Aqui está um script Python que transcreve e salva o texto.
#Processar uma gravação do Teams ou do Zoom
As gravações do Teams e do Zoom são arquivos de vídeo .mp4 (às vezes .m4a quando há apenas áudio). O Whisper consegue lê-los diretamente, pois usa ffmpeg, mas extrair primeiro a faixa de áudio em mono a 16 kHz é mais confiável e mais rápido — especialmente com o whisper.cpp, que exige isso.
- -ar 16000
- Reamostra para 16 kHz, a frequência esperada pelo Whisper. Não há necessidade de manter 48 kHz: a fala não precisa disso.
- -ac 1
- Combina os canais em mono. Para a transcrição, não há vantagem em manter o áudio de uma reunião em estéreo.
- -c:a pcm_s16le
- Saída em WAV não comprimido, o formato mais seguro de entrada para o Whisper.
Onde encontrar o arquivo? No Teams, as gravações são salvas no OneDrive/SharePoint (pasta “Recordings”): baixe o .mp4 localmente antes de processá-lo. No Zoom, a gravação local fica na pasta Documents/Zoom, com um arquivo audio.m4a separado se a opção estiver ativada — é esse arquivo que você deve usar diretamente, sem passar pelo vídeo.
#Etapa 2: a síntese por um LLM local
A transcrição bruta é ilegível: sem pontuação confiável, sem estrutura, com repetições. É o LLM local que a transforma em relatório útil. Enviamos o texto para Ollama com instruções claras sobre o formato de saída esperado.
O mais simples para testar: enviar a transcrição via pipe para ollama run. O modelo recebe o prompt seguido do texto da reunião.
Para uso recorrente, é melhor usar a API REST de Ollama na porta 11434: ela separa corretamente a mensagem de sistema (o papel e o formato) do conteúdo (a transcrição) e torna o resultado reutilizável em um script.
#O prompt que gera decisões e ações de forma clara
Essa é a essência de um bom relatório de reunião gerado por IA. Um prompt vago gera um resumo em um bloco longo de texto; um prompt estruturado gera um documento diretamente utilizável. A chave: impor um formato de saída explícito, em seções, e pedir ao modelo para distinguir claramente o que foi decidido do que ainda precisa ser feito.
- Formato obrigatório
- Os títulos de seção (##) obrigam o modelo a organizar a informação em vez de misturá-la. Você obtém um resultado homogêneo de reunião em reunião.
- A regra contra alucinações
- “Inclua apenas o que foi realmente dito” e “não especificado” reduzem muito o risco de o LLM inventar um prazo ou um responsável que não existe.
- O responsável entre colchetes
- Indicar [Responsável] no início de cada ação torna o relatório diretamente utilizável para agir — basta uma olhada para saber quem faz o quê.
#Automatizar todo o pipeline
Após a validação das duas etapas, elas são encadeadas em um único script: forneça a ele um arquivo de reunião, e ele gera o relatório em Markdown. É isso que transforma o procedimento em uma ferramenta para o dia a dia.
Ajuste o arquivo synthese.py para que ele leia o arquivo passado como argumento e escreva o resultado na saída padrão. Assim, você terá um comando único: ./compte-rendu.sh reunion_teams.mp4, e o resumo em Markdown aparece alguns minutos depois, sem que um único byte tenha saído da máquina.
#Solução de problemas
- Transcrição que sai em inglês
- O Whisper detectou incorretamente o idioma em um início silencioso ou bilíngue. Force sempre --language French (ou language="fr").
- Nomes próprios mal escritos
- Normal: o Whisper tenta adivinhar com base na pronúncia. Adicione uma breve etapa de correção ao prompt de síntese (“corrija os nomes claramente mal transcritos”) ou forneça um glossário de nomes ao LLM.
- Reunião longa demais para a janela de contexto
- Divida a transcrição em blocos de ~3.000 palavras, resuma cada um e depois faça uma síntese dos resumos. Aumente também num_ctx na chamada ao Ollama se sua VRAM permitir.
- Whisper muito lento
- Mude para faster-whisper, ative o vad_filter, reduza o modelo (medium → small) ou mude para GPU. O whisper.cpp também é uma boa opção em máquinas sem GPU.
- Vozes que se sobrepõem
- Whisper não separa os falantes. Para um relatório de «quem disse o quê», é necessário adicionar previamente uma etapa de diarização (por exemplo, pyannote) — um assunto que merece ser tratado à parte.
#Para se aprofundar
Este guia combina dois componentes já tratados em detalhe no site. Para aprofundar cada etapa ou tornar o conjunto mais seguro:
- Whisper + Ollama: pipeline de transcrição e resumo 100% local
- O guia de referência sobre o componente de áudio, com as variantes de implementação do Whisper e um exemplo completo, de ponta a ponta, de uma reunião de uma hora.
- Escolher sua quantização (Q4, Q5, Q8, FP16)
- Para fazer um modelo de síntese de 14B ou 32B caber na sua GPU sem prejudicar a qualidade do relatório da reunião.
- LLM local e RGPD: conformidade na proteção de dados privados nas empresas
- O equivalente na área regulatória: processar reuniões localmente simplifica a conformidade; este guia detalha o que ainda precisa ser documentado.
Um comentário, um erro ou uma observação? Avise-nos; isso ajuda a melhorar o guia para todos.