Este projeto transcreve áudios de entrevistas usando Python.
Ele tem dois modos:
- Modo local, usando
faster-whisper, sem enviar o áudio para a internet. - Modo OpenRouter, usando uma chave de API para transcrever via nuvem, quando você quiser mais praticidade, velocidade ou rodar sem depender do processamento do seu computador.
Para entrevistas sensíveis, o modo mais seguro continua sendo o local. O modo OpenRouter é opcional e envia o áudio para uma API externa.
transcritor-entrevistas/
├── audios/
│ └── SEUS ÁUDIOS AQUI !!!!!
├── transcricoes/
├── transcrever_entrevistas.py
├── requirements.txt
├── .env
├── .gitignore
└── README.md- Transcreve um único áudio
- Transcreve uma pasta inteira de áudios em um comando
- Busca arquivos em subpastas automaticamente
- Gera
.txtcom a transcrição limpa - Gera
.txtcom timestamps quando usado em modo local - Gera
.jsoncom metadados - Gera um arquivo combinado com todas as entrevistas
- Remove automaticamente CPF, telefone e e-mail, se você usar
--redact - Permite escolher entre transcrição local e transcrição via OpenRouter
.mp3
.wav
.m4a
.ogg
.flac
.aac
.webm
.mp4Entre na pasta do projeto:
cd transcritor-entrevistasAtualize os pacotes:
sudo apt updateInstale o ffmpeg:
sudo apt install ffmpeg -yCrie um ambiente virtual:
python3 -m venv .venvAtive o ambiente virtual:
source .venv/bin/activateAtualize o pip:
pip install --upgrade pipInstale as dependências:
pip install -r requirements.txtColoque seus arquivos dentro da pasta audios/.
Exemplo:
audios/
├── entrevista_01.mp3
├── entrevista_02.m4a
└── clientes/
└── entrevista_03.wavPor padrão, o script também procura áudios dentro de subpastas.
Use este modo quando os áudios forem sensíveis.
Neste modo, o áudio fica no seu computador.
python transcrever_entrevistas.py --input ./audios --output-dir ./transcricoes --backend local --local-model small --redact --combineEsse é o comando mais recomendado para começar.
Ele faz isto:
- lê todos os áudios da pasta
audios/ - também lê áudios em subpastas
- salva os resultados em
transcricoes/ - usa o modelo local
small - remove CPF, telefone e e-mail
- cria um arquivo combinado chamado
transcricoes_combinadas.md
python transcrever_entrevistas.py --input ./audios/entrevista_01.mp3 --output-dir ./transcricoes --backend local --local-model small --redactpython transcrever_entrevistas.py --input ./audios --backend local --local-model baseUse base se quiser velocidade.
python transcrever_entrevistas.py --input ./audios --backend local --local-model mediumUse medium se quiser mais qualidade.
python transcrever_entrevistas.py --input ./audios --backend local --local-model large-v3Esse modo é mais pesado e pode demorar bastante sem GPU.
tiny
base
small
medium
large-v3Recomendação prática:
tiny = muito rápido, menos preciso
base = rápido, razoável
small = melhor equilíbrio
medium = boa qualidade, mais lento
large-v3 = melhor qualidade, mais pesadoUse este modo quando você quiser integrar uma chave da OpenRouter e transcrever usando API.
Atenção: neste modo, o áudio é enviado para a API. Não use com entrevista sensível sem consentimento e sem avaliar os termos, o custo e a política de privacidade.
Copie o arquivo de exemplo:
cp .env.example .envAbra o arquivo:
nano .envColoque sua chave:
OPENROUTER_API_KEY=sua_chave_aquiVocê também pode configurar o modelo:
OPENROUTER_STT_MODEL=openai/whisper-large-v3Salve com:
CTRL + O
ENTER
CTRL + Xpython transcrever_entrevistas.py --input ./audios --output-dir ./transcricoes --backend openrouter --redact --combineEsse comando:
- lê todos os áudios da pasta
audios/ - envia cada áudio para o OpenRouter
- salva as transcrições em
transcricoes/ - remove CPF, telefone e e-mail
- cria um arquivo combinado com tudo
python transcrever_entrevistas.py --input ./audios/entrevista_01.mp3 --output-dir ./transcricoes --backend openrouter --redactpython transcrever_entrevistas.py --input ./audios --backend openrouter --openrouter-model openai/whisper-large-v3 --redactVocê também pode trocar o modelo no .env, usando:
OPENROUTER_STT_MODEL=openai/whisper-large-v3python transcrever_entrevistas.py --input ./audios --output-dir ./transcricoes --backend local --local-model small --redact --combinepython transcrever_entrevistas.py --input ./audios --output-dir ./transcricoes --backend openrouter --redact --combinepython transcrever_entrevistas.py --input ./audios/entrevista_01.mp3 --backend local --local-model small --redactpython transcrever_entrevistas.py --input ./audios/entrevista_01.mp3 --backend openrouter --redactpython transcrever_entrevistas.py --input ./audios --no-recursivepython transcrever_entrevistas.py --input ./audios --overwritepython transcrever_entrevistas.py --input ./audios --combinepython transcrever_entrevistas.py --input ./audios --language autopython transcrever_entrevistas.py --input ./audios --language ptpython transcrever_entrevistas.py --input ./audios --language enPara cada áudio, o script gera:
entrevista_01.txt
entrevista_01_com_tempos.txt
entrevista_01.jsonSe você usar --combine, também gera:
transcricoes_combinadas.mdTranscrição limpa:
A entrevista começou com a participante explicando sua rotina de trabalho.No modo local, contém timestamps:
[00:00:00 - 00:00:05] A entrevista começou com a participante explicando sua rotina.
[00:00:05 - 00:00:12] Depois, ela comentou sobre as dificuldades no atendimento.No modo OpenRouter, se o modelo não retornar timestamps, o arquivo será gerado sem marcações reais de tempo.
Contém metadados, como:
- backend usado
- nome do arquivo
- idioma
- modelo
- duração, quando disponível
- uso/custo, quando a API retornar
- segmentos, quando disponíveis
Para entrevistas sensíveis, prefira:
--backend localO modo local não envia o áudio para APIs externas.
Use OpenRouter apenas se:
- você tiver autorização para processar o áudio em serviço externo
- o conteúdo não for extremamente sensível
- você aceitar o custo da API
- você entender que o áudio sai do seu computador
- a política de privacidade fizer sentido para o seu caso
Nunca coloque sua chave diretamente no código.
Use o arquivo .env.
Não envie .env para o GitHub.
Este projeto já inclui .gitignore para ignorar:
.env
.venv/
audios/
transcricoes/OPENROUTER_API_KEY=coloque_sua_chave_aqui
OPENROUTER_STT_MODEL=openai/whisper-large-v3
TRANSCRIPTION_BACKEND=local
TRANSCRIPTION_LANGUAGE=pt
LOCAL_WHISPER_MODEL=small
WHISPER_DEVICE=cpu
WHISPER_COMPUTE_TYPE=int8
MAX_OPENROUTER_MB=25
OPENROUTER_TIMEOUT=300
OPENROUTER_SITE_URL=
OPENROUTER_APP_NAME=Transcritor Local de EntrevistasSua chave da OpenRouter.
Obrigatória apenas se você usar:
--backend openrouterModelo usado na API.
Exemplo:
OPENROUTER_STT_MODEL=openai/whisper-large-v3Backend padrão:
TRANSCRIPTION_BACKEND=localou:
TRANSCRIPTION_BACKEND=openrouterMesmo assim, você pode sobrescrever no comando com --backend.
Idioma padrão:
TRANSCRIPTION_LANGUAGE=ptUse auto para detecção automática.
Limite de tamanho por arquivo enviado ao OpenRouter.
MAX_OPENROUTER_MB=25Se o áudio for maior, divida ou comprima antes.
Rode:
python transcrever_entrevistas.py --input ./audios --backend local --local-model baseSe tudo estiver certo, você verá algo parecido com:
========================================================================
Transcritor de Entrevistas
========================================================================
Backend: local
Arquivos encontrados: 2
Entrada: /caminho/transcritor-entrevistas/audios
Saída: /caminho/transcritor-entrevistas/transcricoes
Idioma: pt
Redact: não
Modelo local: baseAo final, veja os arquivos:
ls transcricoesInstale:
sudo apt install ffmpeg -yAtive o ambiente e instale as dependências:
source .venv/bin/activate
pip install -r requirements.txtCrie o .env:
cp .env.example .env
nano .envE preencha:
OPENROUTER_API_KEY=sua_chave_aquiO script bloqueia arquivos acima do limite configurado em MAX_OPENROUTER_MB.
Soluções:
- comprimir o áudio
- dividir o áudio em partes
- usar o modo local
- aumentar
MAX_OPENROUTER_MBsomente se o modelo/endpoint que você usa aceitar
Use:
--overwriteExemplo:
python transcrever_entrevistas.py --input ./audios --overwritePara ter melhor transcrição:
- grave em lugar silencioso
- deixe o microfone perto da pessoa
- evite duas pessoas falando ao mesmo tempo
- teste o áudio antes
- prefira
.wav,.m4aou.mp3em boa qualidade - evite áudio muito comprimido de WhatsApp, se possível
python transcrever_entrevistas.py --input ./audios --output-dir ./transcricoes --backend local --local-model small --redact --combinepython transcrever_entrevistas.py --input ./audios --output-dir ./transcricoes --backend openrouter --redact --combineO script ajuda, mas não substitui revisão humana.
Modelos de transcrição podem errar:
- nomes próprios
- termos técnicos
- falas rápidas
- áudio baixo
- ruído
- pessoas falando juntas
- sotaques
- siglas
Sempre revise antes de usar a transcrição como fonte oficial.