transcribe_app
Aplicação de transcrição de áudio/vídeo com OpenAI. Divide ficheiros em blocos (chunks) com sobreposição, transcreve via API (modelos gpt-4o-transcribe, gpt-4o-transcribe-diarize, whisper-1, etc.), aplica heurísticas (e validação opcional por LLM) para detetar transcrições degeneradas e exporta resultados agregados.
- Entrada: pasta
audios/(por omissão). - Saídas:
audios/chunks/…– WAVs gerados por chunk.audios/Transcrits/<ficheiro>.txt– transcrição por ficheiro.audios/transcricao_AGREGADA.txt– agregação de todas as transcrições.audios/logs/run_transcricao.log– log textual da execução.
Requisitos
- Windows (script
run.batusa winget). Em macOS/Linux, ver Secção “Execução manual”. - Python 3.10+ (o
run.batinstala 3.13 via winget se faltar). - FFmpeg e ffprobe (o
run.batinstala via winget se faltar). - Chave OpenAI (
OPENAI_API_KEY).
Instalação e execução (Windows)
Tens duas formas simples:
- Pelo
.bat(recomendado para primeira vez)
- Clica duas vezes em
run.batou corre-o no terminal. - O script:
- Garante Python via winget.
- Cria venv
./venve instalarequirements.txt. - Garante FFmpeg via winget.
- Executa a app (
python -u transcribe.py).
- Pelo VS Code com
run.py
- Abre a pasta no VS Code.
- Corre
run.py(usa orun.batnos bastidores para ver saída no terminal integrado).
Na primeira execução, a app cria transcribe.ini com valores por omissão e pedirá a tua API key se não encontrar OPENAI_API_KEY no ambiente.
Configuração (transcribe.ini)
O ficheiro é criado automaticamente com defaults (ver constants.py). Secções principais:
-
[transcribe]
input_folder: pasta de entrada (defaultaudios).output_root: raiz de saídas (mantida por compatibilidade; a app escreve dentro deaudios/).model_name: por ex.gpt-4o-transcribe-diarize,gpt-4o-transcribe,gpt-4o-mini-transcribe,whisper-1.chunk_minutes: tamanho do chunk em minutos (default 15).overlap_seconds: sobreposição entre chunks em segundos (default 5).max_retries: tentativas por chunk (default 5).recursive: procurar ficheiros nas subpastas (yes/no).media_exts: extensões elegíveis (áudio/vídeo).api_key: opcional; se vazio e semOPENAI_API_KEY, a app pede e guarda aqui.clean_outputs: limpar pastas de saída antes de correr (yes/no).run_subfolder: reservado; atualmente a app escreve sempre dentro deaudios/.use_llm_validation: usar LLM para validar “degeneração” (yes/no).log_path: caminho do log (por omissão dentro deaudios/logs/).
-
[llm]
enabled: ativa/desativa validação LLM.model_name: p.ex.gpt-5-nano(curto e barato, formato JSON).temperature,max_tokens: parâmetros da validação.
Dica sobre modelos de transcrição:
gpt-4o-transcribe-diarize: separa falantes, com timestamps; ideal p/ entrevistas/reuniões.gpt-4o-transcribe: texto simples, alta qualidade.gpt-4o-mini-transcribe: mais leve/rápido.whisper-1: económico e fiável; sem diarização.
Se usares um modelo “-diarize”, a saída tenta formatar por falante: SPEAKER_X: texto….
Como usar
- Coloca os teus ficheiros áudio/vídeo na pasta
audios/(ou ajustainput_folderno INI). - Define a variável de ambiente
OPENAI_API_KEYou deixa a app pedir e gravar no INI. - Corre:
- Windows:
run.bat(oupython run.pydentro do VS Code). - Direto em Python:
python main.pyoupython transcribe.py(com venv ativo e deps instaladas).
No fim, consulta:
audios/Transcrits/<ficheiro>.txtaudios/transcricao_AGREGADA.txtaudios/logs/run_transcricao.log
Execução manual (macOS/Linux)
- Garante Python 3.10+ e FFmpeg (
ffmpeg/ffprobeno PATH). - Cria e ativa venv, instala deps:
python -m venv .venv source .venv/bin/activate pip install -r requirements.txt - Exporta a API key (ou deixa em branco e a app pedirá):
export OPENAI_API_KEY="sk-..."
- Corre a app:
python main.py
Estrutura do código (sumário)
main.py– arranque; carrega config e chamaOrchestrator.orchestrator.py– valida FFmpeg, resolve API key, gere fluxo e reporting.processing/–chunker.py(FFmpeg split),transcriber.py,whisper_client.py(OpenAI),degeneracy_analyzer.py(heurísticas+LLM).input/–config_manager.py(INI),media_scanner.py,user_interactor.py.output/–reporter.py,logger.py,notifier.py,report_aggregator.py.constants.py– defaults e nomes de pastas/ficheiros.
Resolução de problemas
- FFmpeg não encontrado: instala e garante
ffmpeg/ffprobeno PATH. No Windows, usarun.bat(winget). - API key inválida: define
OPENAI_API_KEYou colocaapi_keynotranscribe.ini. A chave deve começar porsk-. - Permissões de escrita: verifica permissões na pasta
audios/e subpastas. - Winget indisponível: instala “App Installer” (Microsoft Store) ou faz setup manual (Python/FFmpeg) e corre
python main.py.
Licença
Sem licença explícita. Se precisares de uma licença específica, abre um issue/solicitação.