Resumo de Reunião com IA (Áudio para Markdown)
Ata manual nunca funciona porque ninguém quer parar pra escrever. Você grava, deixa a IA transcrever e resumir, e recebe um markdown com contexto, decisão e responsável. 5 minutos depois da reunião terminar.
Por que ata manual nunca funciona
- Quem anota fica de fora da conversa, perde o contexto
- Ata feita depois é só lembrança parcial, perde 60% do que importou
- Decisão fica difusa, não vira tarefa
- Responsável fica implícito, ninguém se sente dono
- Próxima reunião começa sem alinhamento do que ficou da anterior
Stack
- Python 3.12 ou Node.js 22 com TypeScript
- faster-whisper local (modelo medium ou large-v3) para transcrição rápida sem custo de API
- Anthropic Claude API para gerar o resumo estruturado
- Notion API ou Linear API para entregar o resultado direto
- CLI simples ou interface web Next.js conforme preferência
- ffmpeg pra normalizar áudio antes da transcrição
Prompt completo para Claude Code
Cole no Claude Code dentro de uma pasta vazia:
Crie uma ferramenta de resumo de reunião em Python 3.12.
Estrutura:
src/
transcribe.py // wrapper do faster-whisper
summarize.py // chama Claude com prompt de resumo estruturado
exporters/notion.py // envia pro Notion
exporters/linear.py // envia pro Linear
exporters/file.py // salva como .md local
cli.py // entrada principal
Dependências (requirements.txt):
faster-whisper==1.0.3
anthropic==0.34.0
notion-client==2.2.1
ffmpeg-python==0.2.0
python-dotenv==1.0.1
click==8.1.7
Fluxo CLI:
$ python -m src.cli resumir reuniao.mp4 --destino notion
1. ffmpeg extrai áudio mono 16kHz do arquivo de entrada
2. faster-whisper transcreve em pedaços de 30s
Modelo: "medium" pra português (boa relação qualidade/velocidade)
Idioma: forçar "pt"
Inclui timestamps por sentença
Output: texto plano + lista [{ start, end, speaker?, text }]
3. summarize.py chama Claude:
prompt = f"""Você gera resumos de reuniões para times de produto e operação.
Transcrição:
{transcricao_completa}
Gere um resumo em markdown nesta estrutura exata:
# Resumo da reunião
**Data:** {data}
**Duração:** {duracao}
## Contexto
2 a 3 linhas sobre o motivo da reunião e o cenário discutido.
## Pontos discutidos
- Tópico 1, em 1 linha
- Tópico 2, em 1 linha
(no máximo 6 pontos)
## Decisões
- **Decisão 1:** o que ficou decidido (sem 'foi decidido que', vai direto)
- **Decisão 2:** idem
(no máximo 5)
## Responsabilidades
- **[Nome]:** o que ficou de fazer + prazo se mencionado
- **[Nome]:** idem
(extraia só o que foi atribuído explicitamente, não invente)
## Próximos passos
- 1 linha por passo
(no máximo 4)
Regras:
- Português, direto, sem jargão
- Sem 'foi discutido', 'foi falado', 'foi decidido'. Vai direto ao ponto.
- Se algo não ficou claro na transcrição, escreva '(não definido)'
- Nunca invente nome de pessoa, prazo ou número
"""
Retorna o markdown puro.
4. exporters/notion.py:
- Cria nova página na database configurada (NOTION_DATABASE_ID)
- Title = "Reunião {data}"
- Body = markdown convertido pra blocos Notion (notion-client faz)
5. exporters/linear.py:
- Cria 1 issue por linha em Responsabilidades
- Issue.title = a tarefa, Issue.assignee = nome mapeado pro user_id
6. exporters/file.py:
- Salva como reunioes/{data}.md
CLI com Click:
@click.command()
@click.argument('arquivo')
@click.option('--destino', default='file', type=click.Choice(['file', 'notion', 'linear']))
@click.option('--modelo', default='medium')
def resumir(arquivo, destino, modelo):
audio = transcribe.extrair_audio(arquivo)
texto = transcribe.transcrever(audio, modelo=modelo)
md = summarize.gerar_resumo(texto)
if destino == 'notion':
exporters.notion.enviar(md)
elif destino == 'linear':
exporters.linear.criar_issues(md)
else:
exporters.file.salvar(md)
Variáveis de ambiente (.env):
ANTHROPIC_API_KEY
NOTION_TOKEN
NOTION_DATABASE_ID
LINEAR_API_KEY
LINEAR_TEAM_ID
Instalação:
pip install -r requirements.txt
brew install ffmpeg # macOS
winget install ffmpeg # Windows
Uso:
python -m src.cli resumir reuniao.mp4 --destino notionComo gravar (Meet, Zoom, WhatsApp áudio)
- Google Meet: aperta gravar (precisa Workspace), arquivo cai no Drive como MP4
- Zoom: gravação local salva MP4 + transcrição automática, use o MP4
- WhatsApp: áudios da chamada não gravam, mas você pode gravar áudio do celular separado
- Reunião presencial: app gravador do celular salva como .m4a
- Plataforma de telefonia: a maioria exporta .wav direto
Estrutura do resumo
- Contexto (2 a 3 linhas): por que a reunião aconteceu
- Pontos discutidos (até 6 bullets): só tópicos, sem floreio
- Decisões (até 5 bullets): o que ficou definido em letras claras
- Responsabilidades (lista): nome + ação + prazo, extraído da fala
- Próximos passos (até 4): o que vem depois desta reunião
Integração com Notion ou Linear
- Notion: cria página nova numa database de Reuniões com o markdown como blocos
- Linear: cria 1 issue por responsabilidade, assignee mapeado pelo nome
- File: salva localmente em reunioes/2026-05-27.md pra commitar no repo
- Você escolhe o destino na linha de comando: --destino notion, --destino linear ou padrão file
- Pode rodar os 3 em sequência se quiser ter o markdown salvo e replicado
Perguntas frequentes
Preciso pagar pelo Whisper?
Não. O faster-whisper roda local na sua máquina, sem custo. O modelo medium ocupa 1.5GB e roda em CPU comum, mas fica bem mais rápido com GPU (qualquer placa com 4GB+ de VRAM serve). O modelo large-v3 acerta mais, ocupa 3GB.
Quanto tempo demora pra processar 1h de reunião?
Em CPU comum, cerca de 8 a 12 minutos pro medium. Em GPU de notebook (GTX 1650 e acima), 2 a 4 minutos. O passo do Claude (resumo) leva mais 10 a 20 segundos. Bem mais rápido que rever a reunião.
A IA identifica quem disse o quê?
O faster-whisper sozinho não faz speaker diarization (separar vozes). Pra isso você adiciona o pyannote.audio ou similar, que cruza com o Whisper. Custo: 1 modelo extra de 500MB. Sem isso, o resumo agrupa por contexto e infere o responsável pelo que falou cada um.
Funciona com reunião em inglês ou só português?
Funciona com qualquer idioma suportado pelo Whisper (99 idiomas). Você só muda o language="pt" pra "en", "es" etc. O Claude também resume em qualquer idioma, basta ajustar o prompt pra "em português" virar "em inglês".
Posso rodar isso direto do celular sem computador?
Dá pra fazer uma versão web simples com upload no Vercel chamando o faster-whisper via serverless, mas o tempo de execução estoura o limite de função do Vercel pra reuniões longas. O mais robusto é um worker no Railway que recebe o arquivo e responde quando termina.
Quer implementar isso?
Me chama no WhatsApp. Ajudo você a configurar ou implemento pra você.
Quero ajuda no WhatsAppGastão Matos
@gastaomatos