Skip to content

Repository files navigation

Transcritor de Áudio e Vídeo

Python Flask Whisper FFmpeg

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.

Recursos

  • 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, medium e large.
  • 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.

Arquitetura

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]
Loading

Estrutura de diretórios

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

Requisitos

  • Python 3.11 ou superior.
  • FFmpeg 6+ com ffmpeg e ffprobe acessíveis pelo PATH.
  • 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.

Instalação no Windows

Instale o FFmpeg e abra um novo terminal depois da instalação:

winget install --id Gyan.FFmpeg -e
ffmpeg -version
ffprobe -version

Crie e ative o ambiente virtual:

python -m venv .venv
.\.venv\Scripts\Activate.ps1

Instale as bibliotecas e crie o arquivo de configuração local:

pip install -r requirements.txt
Copy-Item .env.example .env

Inicie o servidor:

python app.py

Abra http://127.0.0.1:5000 no navegador.

Como usar

  1. Clique em Escolher arquivo e selecione uma mídia suportada.
  2. Escolha o modelo de transcrição. Para CPU, comece com base ou small.
  3. Clique em Iniciar transcrição.
  4. 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.

Configuração

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

Modelos e desempenho

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 tiny ou base;
  • mantenha o servidor aberto para reutilizar o modelo carregado;
  • feche aplicações pesadas durante a transcrição;
  • ajuste WHISPER_CPU_THREADS ao número de núcleos físicos/lógicos disponíveis.

Processamento de arquivos

Antes de transcrever, o sistema:

  1. valida extensão e tamanho do arquivo;
  2. usa ffprobe para confirmar que a mídia possui duração válida;
  3. usa ffmpeg para remover vídeo, converter para WAV PCM, mono e 16 kHz;
  4. divide o áudio em partes quando a duração excede CHUNK_SECONDS;
  5. transcreve cada parte e aplica o offset correto aos timestamps;
  6. gera os arquivos de exportação e remove os temporários.

O arquivo original nunca é modificado.

API local

POST /api/transcriptions

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.

GET /api/transcriptions/<job_id>/download/<formato>

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.

Solução de problemas

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.

Segurança e privacidade

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.

About

Aplicação Flask com Whisper para transcrição local de áudio e vídeo, com exportação TXT, SRT, VTT e PDF.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages