Aplicação web local em Python que transcreve arquivos de áudio e vídeo com OpenAI Whisper. O sistema aceita arquivos MP3, MP4, WAV, WMA e AAC, detecta o idioma automaticamente e gera resultados em texto, legendas e PDF.
Avaliação rápida: execute localmente, envie uma mídia de demonstração e valide a exportação em TXT, SRT, VTT ou PDF. O processamento é local e pode usar GPU CUDA quando disponível.
- Transcrição local com Whisper, sem envio do áudio a uma API externa.
- Extração de áudio de vídeos MP4 e normalização para WAV mono/16 kHz com FFmpeg.
- Detecção automática de idioma e timestamps por segmento.
- Exportação para TXT, SRT, VTT e PDF.
- Escolha de modelo na interface:
tiny,base,small,mediumelarge. - Uso automático de GPU CUDA quando disponível; CPU como alternativa.
- Divisão automática de áudios longos em partes, preservando a ordem e os timestamps.
- Limpeza de uploads e arquivos temporários após o processamento.
flowchart TD
A[Arquivo de áudio ou vídeo] --> B[Flask]
B --> C[FFmpeg e FFprobe]
C --> D[Whisper em CPU ou CUDA]
D --> E[Exportação TXT, SRT, VTT e PDF]
app.py # Rotas Flask e orquestração do processamento
config.py # Variáveis e caminhos da aplicação
services/
audio_service.py # FFmpeg/FFprobe, conversão e divisão de áudio
transcription_service.py # Carregamento e execução do Whisper
export_service.py # Geradores TXT, SRT, VTT e PDF
utils/
file_utils.py # Validação e nomes seguros de arquivo
time_utils.py # Formatação dos timestamps
templates/ # Interface HTML
static/ # JavaScript e estilos CSS
uploads/ # Uploads temporários
temp/ # Áudios normalizados e segmentos temporários
outputs/ # Arquivos de exportação gerados
- Python 3.11 ou superior.
- FFmpeg 6+ com
ffmpegeffprobeacessíveis peloPATH. - Espaço em disco para o modelo Whisper e a cópia temporária do áudio.
- GPU NVIDIA com CUDA é opcional, mas reduz significativamente o tempo de transcrição.
Instale o FFmpeg e abra um novo terminal depois da instalação:
winget install --id Gyan.FFmpeg -e
ffmpeg -version
ffprobe -versionCrie e ative o ambiente virtual:
python -m venv .venv
.\.venv\Scripts\Activate.ps1Instale as bibliotecas e crie o arquivo de configuração local:
pip install -r requirements.txt
Copy-Item .env.example .envInicie o servidor:
python app.pyAbra http://127.0.0.1:5000 no navegador.
- Clique em Escolher arquivo e selecione uma mídia suportada.
- Escolha o modelo de transcrição. Para CPU, comece com
baseousmall. - Clique em Iniciar transcrição.
- Ao concluir, copie o texto ou baixe o resultado em TXT, SRT, VTT ou PDF.
No primeiro uso de cada modelo, o Whisper fará o download dos pesos. Os usos seguintes reutilizam o modelo já carregado em memória.
As variáveis abaixo podem ser definidas em .env:
# Modelo inicial exibido na interface
WHISPER_MODEL=small
# Tamanho máximo de upload em bytes (padrão: 2 GB)
MAX_CONTENT_LENGTH=2147483648
# Duração de cada parte de áudio longo em segundos (padrão: 30 min)
CHUNK_SECONDS=1800
# Valor 1 prioriza velocidade de processamento
WHISPER_BEAM_SIZE=1
# Quantidade de threads para uso de CPU
WHISPER_CPU_THREADS=4| Modelo | Velocidade | Precisão | Uso recomendado |
|---|---|---|---|
tiny |
Muito alta | Básica | Rascunhos e testes |
base |
Alta | Boa | Transcrição rápida em CPU |
small |
Média | Muito boa | Padrão recomendado |
medium |
Baixa | Alta | Áudios importantes |
large |
Muito baixa | Máxima | GPU com memória disponível |
O sistema usa CUDA automaticamente quando torch.cuda.is_available() retorna verdadeiro. Sem GPU, o Whisper utiliza CPU e a velocidade depende do processador, do modelo e da duração da mídia.
Para reduzir o tempo em CPU:
- prefira
tinyoubase; - mantenha o servidor aberto para reutilizar o modelo carregado;
- feche aplicações pesadas durante a transcrição;
- ajuste
WHISPER_CPU_THREADSao número de núcleos físicos/lógicos disponíveis.
Antes de transcrever, o sistema:
- valida extensão e tamanho do arquivo;
- usa
ffprobepara confirmar que a mídia possui duração válida; - usa
ffmpegpara remover vídeo, converter para WAV PCM, mono e 16 kHz; - divide o áudio em partes quando a duração excede
CHUNK_SECONDS; - transcreve cada parte e aplica o offset correto aos timestamps;
- gera os arquivos de exportação e remove os temporários.
O arquivo original nunca é modificado.
Recebe multipart/form-data com:
file: arquivo de mídia;model: nome opcional do modelo Whisper.
Resposta: JSON com texto, idioma, duração, dispositivo, número de segmentos e URLs dos downloads.
Baixa uma exportação, onde formato pode ser txt, srt, vtt ou pdf.
Os links de download são mantidos enquanto o servidor estiver ativo. Baixe os arquivos antes de encerrar a aplicação.
| Mensagem | Causa provável | Solução |
|---|---|---|
FFmpeg/FFprobe não encontrados |
FFmpeg ausente ou fora do PATH | Instale o FFmpeg e reinicie o terminal/servidor. |
Modelo Whisper não encontrado |
Download interrompido ou modelo inválido | Confira a conexão e selecione um modelo disponível. |
Memória insuficiente |
Modelo grande demais para RAM/VRAM | Use base ou tiny. |
Arquivo não possui áudio utilizável |
Arquivo vazio, corrompido ou sem faixa de áudio | Teste outro arquivo ou abra-o em um player. |
| Processamento lento | CPU, modelo grande ou mídia longa | Use base/tiny ou uma GPU CUDA. |
O áudio é processado localmente. Uploads e arquivos temporários são apagados ao fim de cada tarefa. Os arquivos de exportação permanecem em outputs/ para download e podem ser removidos manualmente quando não forem mais necessários.