Transcreva vídeos do YouTube, Vimeo ou ficheiros locais com inteligência artificial
Deteção automática de idioma • Resumo inteligente • Chat contextual
- Sobre o Projeto
- Funcionalidades
- Requisitos
- Instalação
- Como Usar
- Arquitetura
- Configuração Avançada
- API Reference
- Troubleshooting
- Roadmap
- Contribuir
Este sistema oferece uma solução completa e profissional para transcrição automática de conteúdo audiovisual, combinando o poder do Whisper (OpenAI) para transcrição precisa com Claude AI (Anthropic) para análise inteligente do conteúdo.
- ✅ Múltiplas fontes: Suporta YouTube, Vimeo e ficheiros locais
- ✅ Deteção automática: Identifica o idioma do áudio automaticamente
- ✅ IA integrada: Resumos e chat inteligente sobre o conteúdo
- ✅ Flexível: Interface web bonita OU linha de comando
- ✅ Exportação: TXT, JSON, SRT (legendas)
- ✅ Open source: Código livre para usar e modificar
📚 Educação: Transcrever aulas e criar materiais de estudo
🎙️ Podcasts: Converter episódios em artigos escritos
💼 Corporativo: Documentar reuniões e webinars
🎬 Produção: Gerar legendas profissionais (SRT)
📊 Pesquisa: Analisar entrevistas e focus groups
♿ Acessibilidade: Tornar conteúdo acessível a todos
| Fonte | Suporte | Formatos |
|---|---|---|
| YouTube | ✅ Completo | Qualquer URL válido |
| Vimeo | ✅ Completo | Qualquer URL válido |
| Ficheiros Locais | ✅ Completo | MP3, MP4, WAV, M4A, WebM, AVI, MKV |
- Motor: OpenAI Whisper (state-of-the-art)
- Precisão: 95%+ em condições ideais
- Idiomas: Suporta 99 idiomas
- Timestamps: Precisos ao milissegundo
- Modelos: 5 tamanhos (tiny → large)
- Análise semântica inteligente
- Extração de pontos-chave
- Formatação estruturada
- Adaptação ao contexto
- Sempre em português
- Perguntas sobre o conteúdo transcrito
- Respostas baseadas APENAS na transcrição
- Sem adicionar informação externa
- Histórico de conversa mantido
- Interface natural e fluida
- Design moderno e responsivo
- Drag & drop de ficheiros
- Progress bar em tempo real
- Tabs organizados (Transcrição/Resumo/Chat)
- Copiar texto com um clique
- Funciona offline (após setup)
- Perfeito para automação
- Batch processing
- Scripts e pipelines
- Sem dependências de browser
- Ideal para servidores
- ✅ Linux (Ubuntu 20.04+, Debian 11+)
- ✅ macOS (10.15+)
- ✅ Windows 10/11 (com WSL recomendado)
Python 3.8 ou superior
FFmpeg (para processamento de áudio/vídeo)
pip (gestor de pacotes Python)
| Componente | Mínimo | Recomendado | Ideal |
|---|---|---|---|
| CPU | 2 cores | 4 cores | 8+ cores |
| RAM | 4 GB | 8 GB | 16+ GB |
| Disco | 2 GB livre | 5 GB livre | 10+ GB livre |
| GPU | Não requerida | CUDA opcional | RTX série |
💡 Nota: GPU acelera transcrição mas não é obrigatória
Todas incluídas em requirements.txt:
- Flask & Flask-CORS (web server)
- openai-whisper (transcrição)
- yt-dlp (download de vídeos)
- anthropic (Claude AI)
- torch & torchaudio (ML)
- langdetect (deteção de idioma)
# 1. Clonar ou descompactar o projeto
cd video-transcription-project
# 2. Executar script de instalação
chmod +x install.sh
./install.sh
# 3. Ativar ambiente virtual
source venv/bin/activate
# 4. (Opcional) Configurar Claude AI
export ANTHROPIC_API_KEY="sua-chave-aqui"Ubuntu/Debian:
sudo apt update
sudo apt install ffmpegmacOS (Homebrew):
brew install ffmpegWindows:
- Download: https://ffmpeg.org/download.html
- Extrair e adicionar ao PATH
- Ou usar:
choco install ffmpeg
# Criar ambiente virtual
python3 -m venv venv
# Ativar ambiente
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# Atualizar pip
pip install --upgrade pip
# Instalar dependências
pip install -r requirements.txtPara usar resumos e chat:
# Obter chave em: https://console.anthropic.com/
export ANTHROPIC_API_KEY="sk-ant-..."
# Ou criar ficheiro .env
echo 'ANTHROPIC_API_KEY=sk-ant-...' > .env# Testar backend
python backend.py
# Testar CLI
python transcribe.py --help
# Verificar FFmpeg
ffmpeg -version# Ativar ambiente virtual (se necessário)
source venv/bin/activate
# Iniciar servidor Flask
python backend.pySaída esperada:
==================================================
Servidor de Transcrição iniciado!
==================================================
Modelo Whisper: base
Claude API: Ativada
==================================================
* Running on http://0.0.0.0:5000
Opção A - Abrir diretamente:
# Abrir no navegador
open index.html # macOS
xdg-open index.html # Linux
start index.html # WindowsOpção B - Servir com Python:
# Em outro terminal
python -m http.server 8080
# Aceder a: http://localhost:8080- Escolher fonte: YouTube / Vimeo / Ficheiro Local
- Inserir dados: URL ou upload de ficheiro
- Clicar "Transcrever": Aguardar processamento
- Explorar resultados:
- 📝 Tab "Transcrição": Texto completo
- 📋 Tab "Resumo": Pontos-chave
- 💬 Tab "Chat": Fazer perguntas
python transcribe.py [OPTIONS]
Opções:
-u, --url URL URL do vídeo (YouTube/Vimeo)
-f, --file FILE Ficheiro local
-m, --model MODEL Modelo Whisper (tiny/base/small/medium/large)
-o, --output NAME Nome base dos ficheiros de saída
-h, --help Mostrar ajudaTranscrever vídeo do YouTube:
python transcribe.py -u "https://youtube.com/watch?v=dQw4w9WgXcQ" -o resultadoTranscrever ficheiro local:
python transcribe.py -f podcast.mp3 -o podcastUsar modelo maior (melhor qualidade):
python transcribe.py -f entrevista.mp4 -m large -o entrevistaEspecificar output customizado:
python transcribe.py -u "URL_VIDEO" -o "reuniao_$(date +%Y%m%d)"Cada transcrição gera 3 ficheiros:
nome.txt → Transcrição em texto simples
nome.json → Dados completos (texto + timestamps + metadados)
nome.srt → Legendas no formato SubRip (para editores de vídeo)
Exemplo de conteúdo:
resultado.txt:
Idioma: Português
==================================================
Esta é a transcrição do vídeo...
resultado.json:
{
"text": "Esta é a transcrição...",
"language": "Português",
"language_code": "pt",
"segments": [
{
"start": 0.0,
"end": 3.5,
"text": "Esta é a transcrição..."
}
]
}resultado.srt:
1
00:00:00,000 --> 00:00:03,500
Esta é a transcrição...
2
00:00:03,500 --> 00:00:08,200
...do vídeo completo.
video-transcription-project/
├── 📄 backend.py # Servidor Flask + API REST
├── 🌐 index.html # Interface web (frontend)
├── 🖥️ transcribe.py # CLI standalone
├── 📦 requirements.txt # Dependências Python
├── 🔧 install.sh # Script instalação automática
├── 📖 README.md # Documentação completa
├── 🚀 QUICKSTART.md # Guia início rápido
└── 📂 venv/ # Ambiente virtual (após instalação)
graph TB
A[Utilizador] --> B{Escolha de Interface}
B -->|Web| C[Frontend HTML/JS]
B -->|CLI| D[transcribe.py]
C --> E[Backend Flask API]
D --> F[Whisper Engine]
E --> F
F --> G{Fonte?}
G -->|YouTube/Vimeo| H[yt-dlp Download]
G -->|Ficheiro| I[Ficheiro Local]
H --> J[Áudio Processado]
I --> J
J --> K[Whisper Transcrição]
K --> L[Texto + Idioma + Timestamps]
L --> M[Claude AI]
M --> N[Resumo]
L --> O[Resultados]
N --> O
O --> P[Exibição/Export]
- Framework: Flask
- Endpoints: REST API
- Funções:
- Download de vídeos (yt-dlp)
- Transcrição (Whisper)
- Resumo (Claude)
- Chat contextual
- Porta: 5000 (default)
- Tech: HTML5, CSS3, JavaScript vanilla
- Features:
- Tabs para fontes diferentes
- Upload de ficheiros
- Progress tracking
- Resultados interativos
- Responsive: Mobile-friendly
- Tipo: Script Python standalone
- Funções:
- Transcrição direta
- Export automático (TXT/JSON/SRT)
- Sem servidor necessário
- Uso: Automação e batch
Editar backend.py linha 20:
WHISPER_MODEL = "base" # Alterar aqui| Modelo | Parâmetros | RAM Necessária | Velocidade Relativa | Precisão | Ideal Para |
|---|---|---|---|---|---|
| tiny | 39M | ~1 GB | ⚡⚡⚡⚡⚡ (5x) | ⭐⭐ (70%) | Testes rápidos |
| base | 74M | ~1 GB | ⚡⚡⚡⚡ (4x) | ⭐⭐⭐ (78%) | Uso geral ✅ |
| small | 244M | ~2 GB | ⚡⚡⚡ (3x) | ⭐⭐⭐⭐ (85%) | Qualidade superior |
| medium | 769M | ~5 GB | ⚡⚡ (2x) | ⭐⭐⭐⭐⭐ (92%) | Produção |
| large | 1550M | ~10 GB | ⚡ (1x) | ⭐⭐⭐⭐⭐ (95%) | Máxima qualidade |
Recomendações:
- 🏠 Uso pessoal:
baseousmall - 🏢 Produção:
mediumoularge - 🚀 Testes/Dev:
tiny
Criar ficheiro .env na raiz:
# API Anthropic (para resumos e chat)
ANTHROPIC_API_KEY=sk-ant-api03-...
# Modelo Whisper
WHISPER_MODEL=base
# Porta do servidor
FLASK_PORT=5000
# Debug mode
FLASK_DEBUG=false
# Diretório temporário
TEMP_DIR=/tmp/transcriptionsCarregar no código:
from dotenv import load_dotenv
load_dotenv()Para produção, restringir origins no backend.py:
from flask_cors import CORS
# Desenvolvimento (permitir todos)
CORS(app)
# Produção (restringir)
CORS(app, origins=[
'https://seu-dominio.com',
'https://app.seu-dominio.com'
])Instalar PyTorch com CUDA:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118Verificar no código:
import torch
print(f"CUDA disponível: {torch.cuda.is_available()}")Os modelos Whisper são cached automaticamente em:
- Linux/Mac:
~/.cache/whisper/ - Windows:
C:\Users\<user>\.cache\whisper\
Para múltiplos ficheiros, usar multiprocessing:
from multiprocessing import Pool
files = ['video1.mp4', 'video2.mp4', 'video3.mp4']
with Pool(processes=3) as pool:
results = pool.map(transcribe_file, files)Criar Dockerfile:
FROM python:3.10-slim
# Instalar FFmpeg
RUN apt-get update && \
apt-get install -y ffmpeg && \
rm -rf /var/lib/apt/lists/*
# Diretório de trabalho
WORKDIR /app
# Copiar ficheiros
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# Expor porta
EXPOSE 5000
# Comando
CMD ["python", "backend.py"]Build e run:
docker build -t video-transcription .
docker run -p 5000:5000 -e ANTHROPIC_API_KEY=... video-transcription- ✅ Linux (Ubuntu 20.04+, Debian 11+, Fedora 35+)
- ✅ macOS (10.15 Catalina ou superior)
- ✅ Windows 10/11 (com WSL2 recomendado para melhor performance)
| Software | Versão Mínima | Instalação |
|---|---|---|
| Python | 3.8+ | python.org |
| pip | 20.0+ | Incluído com Python |
| FFmpeg | 4.0+ | Ver instruções abaixo |
| Componente | Mínimo | Recomendado | Ideal | Notas |
|---|---|---|---|---|
| CPU | 2 cores | 4 cores | 8+ cores | Processamento paralelo |
| RAM | 4 GB | 8 GB | 16+ GB | Depende do modelo Whisper |
| Disco | 2 GB | 5 GB | 10+ GB | Para modelos + cache |
| GPU | Não req. | CUDA 8GB+ | RTX 3060+ | Acelera 5-10x (opcional) |
| Internet | 1 Mbps | 10 Mbps | 50+ Mbps | Para download de vídeos |
| Modelo | RAM Mínima | RAM Ideal | GPU VRAM | Tempo (10min áudio) |
|---|---|---|---|---|
| tiny | 1 GB | 2 GB | - | ~30 segundos |
| base | 1 GB | 2 GB | - | ~1 minuto |
| small | 2 GB | 4 GB | 2 GB | ~2 minutos |
| medium | 5 GB | 8 GB | 5 GB | ~5 minutos |
| large | 10 GB | 16 GB | 10 GB | ~10 minutos |
Todas as dependências estão especificadas em requirements.txt:
flask==3.0.0 # Web framework
flask-cors==4.0.0 # CORS para API
openai-whisper==20231117 # Motor de transcrição
yt-dlp==2024.3.10 # Download de vídeos
anthropic==0.18.1 # Claude AI
langdetect==1.0.9 # Deteção de idioma
torch==2.1.2 # PyTorch (ML)
torchaudio==2.1.2 # Áudio para PyTorch
ffmpeg-python==0.2.0 # Interface Python para FFmpegTamanho Total do Download: ~1.5 GB (inclui PyTorch)
Executar antes da instalação:
# Python
python3 --version # Deve ser >= 3.8
# pip
pip --version # Deve estar presente
# FFmpeg
ffmpeg -version # Deve mostrar versão
# Espaço em disco
df -h /tmp # Verificar espaço livreO script install.sh automatiza todo o processo:
# 1. Navegar para o diretório do projeto
cd video-transcription-project
# 2. Dar permissões de execução
chmod +x install.sh
# 3. Executar instalação
./install.sh
# 4. Ativar ambiente virtual
source venv/bin/activate
# 5. (Opcional) Configurar Claude AI
export ANTHROPIC_API_KEY="sua-chave-aqui"O script faz automaticamente:
- ✅ Verifica Python e FFmpeg
- ✅ Instala FFmpeg se necessário (Linux/Mac)
- ✅ Cria ambiente virtual Python
- ✅ Instala todas as dependências
- ✅ Valida a instalação
- ✅ Cria ficheiro .env de exemplo
Tempo estimado: 5-10 minutos (depende da internet)
Para quem prefere controlo total ou tem requisitos específicos.
sudo apt update
sudo apt install -y ffmpeg
# Verificar
ffmpeg -version# Instalar Homebrew se necessário
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Instalar FFmpeg
brew install ffmpeg
# Verificar
ffmpeg -versionOpção A - Chocolatey (Recomendado):
# PowerShell como Administrador
choco install ffmpeg
# Verificar
ffmpeg -versionOpção B - Manual:
- Download: https://ffmpeg.org/download.html#build-windows
- Extrair para
C:\ffmpeg - Adicionar ao PATH:
- Painel de Controlo → Sistema → Variáveis de Ambiente
- PATH → Editar → Novo →
C:\ffmpeg\bin
- Reiniciar terminal e verificar:
ffmpeg -version
# Verificar versão
python3 --version # Deve ser >= 3.8
# Se não tiver Python 3.8+, instalar:
# Ubuntu/Debian
sudo apt install python3.10 python3.10-venv
# macOS
brew install python@3.10
# Windows: Download de python.org# Navegar para o projeto
cd video-transcription-project
# Criar venv
python3 -m venv venv
# Ativar venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows PowerShell
venv\Scripts\activate.bat # Windows CMDConfirmar ativação (prompt muda para (venv)):
(venv) user@machine:~/video-transcription-project$# Atualizar pip
pip install --upgrade pip
# Instalar todas as dependências
pip install -r requirements.txt
# Verificar instalações críticas
python -c "import whisper; print('Whisper OK')"
python -c "import flask; print('Flask OK')"
python -c "import yt_dlp; print('yt-dlp OK')"Se houver erros com PyTorch, instalar manualmente:
# CPU only (mais leve)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
# CUDA 11.8 (para GPU NVIDIA)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# CUDA 12.1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121Para usar resumos e chat com Claude AI:
# Obter API key em: https://console.anthropic.com/
# Opção A - Export temporário
export ANTHROPIC_API_KEY="sk-ant-api03-..."
# Opção B - Ficheiro .env (permanente)
echo 'ANTHROPIC_API_KEY=sk-ant-api03-...' > .env
# Opção C - Adicionar ao .bashrc/.zshrc
echo 'export ANTHROPIC_API_KEY="sk-ant-api03-..."' >> ~/.bashrc
source ~/.bashrc# Testar imports Python
python << EOF
import whisper
import flask
import yt_dlp
import anthropic
import torch
print("✅ Todas as dependências importadas com sucesso!")
print(f"PyTorch: {torch.__version__}")
print(f"CUDA disponível: {torch.cuda.is_available()}")
EOF
# Testar CLI
python transcribe.py --help
# Testar servidor (CTRL+C para parar)
python backend.pyPara ambientes isolados ou deployment:
Já incluído no projeto, mas aqui está o conteúdo:
FROM python:3.10-slim
# Instalar FFmpeg e dependências do sistema
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ffmpeg \
git \
&& rm -rf /var/lib/apt/lists/*
# Diretório de trabalho
WORKDIR /app
# Copiar requirements e instalar dependências
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copiar código do projeto
COPY . .
# Porta da aplicação
EXPOSE 5000
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD python -c "import requests; requests.get('http://localhost:5000/api/health')"
# Comando de início
CMD ["python", "backend.py"]# Build da imagem
docker build -t video-transcription:latest .
# Run com API key
docker run -d \
--name transcription-service \
-p 5000:5000 \
-e ANTHROPIC_API_KEY="sk-ant-..." \
video-transcription:latest
# Ver logs
docker logs -f transcription-service
# Parar
docker stop transcription-serviceCriar docker-compose.yml:
version: '3.8'
services:
transcription:
build: .
ports:
- "5000:5000"
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
- WHISPER_MODEL=base
volumes:
- ./transcriptions:/app/transcriptions
restart: unless-stopped
healthcheck:
test: ["CMD", "python", "-c", "import requests; requests.get('http://localhost:5000/api/health')"]
interval: 30s
timeout: 10s
retries: 3
volumes:
transcriptions:Usar:
# Iniciar
docker-compose up -d
# Ver logs
docker-compose logs -f
# Parar
docker-compose down# Ativar ambiente (se ainda não ativado)
source venv/bin/activate
# Testar transcrição CLI (ficheiro pequeno)
python transcribe.py -u "https://www.youtube.com/watch?v=jNQXAC9IVRw" -m tiny -o teste
# Verificar outputs
ls -lh teste.*
# Deve criar: teste.txt, teste.json, teste.srt# Terminal 1 - Backend
python backend.py
# Terminal 2 - Frontend (opcional)
python -m http.server 8080
# Abrir browser: http://localhost:8080Criar ficheiro .env na raiz:
# APIs
ANTHROPIC_API_KEY=sk-ant-api03-...
# Whisper
WHISPER_MODEL=base # ou: tiny, small, medium, large
# Flask
FLASK_PORT=5000
FLASK_DEBUG=false
# Paths
TEMP_DIR=/tmp/transcriptions
OUTPUT_DIR=./transcriptions
# Limites
MAX_FILE_SIZE=500000000 # 500MB
MAX_VIDEO_LENGTH=7200 # 2 horas# Verificar CUDA
nvidia-smi
# Reinstalar PyTorch com CUDA
pip uninstall torch torchvision torchaudio
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# Testar
python -c "import torch; print(torch.cuda.is_available())"# Fazer download antecipado dos modelos
python << EOF
import whisper
whisper.load_model("tiny")
whisper.load_model("base")
whisper.load_model("small")
print("✅ Modelos cached")
EOFModelos são guardados em:
- Linux/Mac:
~/.cache/whisper/ - Windows:
C:\Users\<user>\.cache\whisper\
Instalação completa! Agora podes:
- 📖 Ler o Guia de Início Rápido
- 🌐 Explorar a interface web
- 💻 Experimentar a linha de comando
- 📚 Consultar a API Reference
- 🔧 Personalizar configurações avançadas
Existem duas formas de usar o sistema: através da interface web (mais visual e intuitiva) ou via linha de comando (mais rápido para automação).
Ideal para: Uso casual, exploração visual, chat interativo
# Ativar ambiente virtual (se não estiver ativado)
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# Iniciar servidor Flask
python backend.pySaída esperada:
==================================================
Servidor de Transcrição iniciado!
==================================================
Modelo Whisper: base
Claude API: Ativada
==================================================
* Running on http://0.0.0.0:5000
* Running on http://127.0.0.1:5000
💡 Dica: Deixar este terminal aberto enquanto usas a interface web
Tens três opções:
Opção A - Abrir Diretamente (Mais simples):
# No diretório do projeto
open index.html # macOS
xdg-open index.html # Linux
start index.html # WindowsOpção B - Servir com Python (Recomendado):
# Em outro terminal (o backend deve estar a correr)
python -m http.server 8080
# Aceder no browser:
# http://localhost:8080Opção C - Usar browser diretamente:
file:///caminho/completo/para/index.html
-
Cole o URL completo do vídeo
https://www.youtube.com/watch?v=dQw4w9WgXcQ ou https://youtu.be/dQw4w9WgXcQ -
Clica "Transcrever Vídeo"
- Progress bar mostra o progresso
- Status atualiza: Download → Transcrição → Resumo
-
Aguarda o processamento
- Vídeo de 10 min: ~2-3 minutos (modelo base)
- Vídeo de 1 hora: ~15-20 minutos
Igual ao YouTube, mas com URLs do Vimeo:
https://vimeo.com/123456789
-
Clica "Escolher Ficheiro"
- Formatos suportados: MP3, MP4, WAV, M4A, WebM, AVI, MKV
- Tamanho máximo: 500MB (ajustável)
-
Seleciona o ficheiro e aguarda upload
-
Clica "Transcrever Ficheiro"
Após processamento, três tabs ficam disponíveis:
- Idioma Detetado: Badge colorido no topo
- Texto Completo: Toda a transcrição
- Selecionável: Clique e arraste para copiar
- Scroll: Para textos longos
Exemplo de visualização:
🌐 Idioma: Português (pt-PT)
Esta é a transcrição completa do vídeo.
O conteúdo inclui todos os diálogos e
narrativas presentes no áudio original...
- Estruturado: Título, pontos-chave, conclusão
- Conciso: 3-5 parágrafos principais
- Formatado: Fácil de ler
Exemplo:
📌 Resumo do Vídeo:
O vídeo aborda...
Pontos principais:
• Ponto 1...
• Ponto 2...
• Ponto 3...
Conclusão: ...
- Mensagem inicial: IA apresenta-se
- Campo de input: Escrever perguntas
- Histórico mantido: Contexto preservado
- Enter para enviar: Ou botão "Enviar"
Exemplos de perguntas:
"Qual é o tema principal?"
"Resume os 3 pontos mais importantes"
"Que exemplos são dados?"
"Há alguma conclusão mencionada?"
"Quantas pessoas falam no vídeo?"
Nota importante: O chat responde APENAS com base na transcrição, sem adicionar informação externa.
Ideal para: Automação, scripts, batch processing, servidores
python transcribe.py [OPTIONS]
Opções Obrigatórias (escolher uma):
-u, --url URL URL do vídeo (YouTube/Vimeo/etc)
-f, --file FILE Caminho para ficheiro local
Opções Adicionais:
-m, --model MODEL Modelo Whisper (default: base)
Opções: tiny, base, small, medium, large
-o, --output NAME Nome base ficheiros saída (default: transcription)
-h, --help Mostrar ajuda completapython transcribe.py \
-u "https://youtube.com/watch?v=dQw4w9WgXcQ" \
-o resultadoCria:
resultado.txt- Transcrição textoresultado.json- Dados completosresultado.srt- Legendas
python transcribe.py \
-f ~/Videos/entrevista.mp4 \
-m large \
-o entrevista_transcritaQuando usar modelo large:
- Áudio de baixa qualidade
- Múltiplos speakers
- Termos técnicos ou específicos
- Necessidade de máxima precisão
Transcrever múltiplos ficheiros:
# Script bash
for video in ~/Videos/*.mp4; do
nome=$(basename "$video" .mp4)
python transcribe.py -f "$video" -o "output/$nome"
donepython transcribe.py \
-u "URL_DO_VIDEO" \
-o "reuniao_$(date +%Y%m%d_%H%M%S)"Cria: reuniao_20241215_143022.txt etc.
#!/bin/bash
# pipeline_transcricao.sh
URL=$1
NOME=$2
echo "📥 A fazer download..."
yt-dlp -x --audio-format mp3 "$URL" -o "temp.mp3"
echo "🎙️ A transcrever..."
python transcribe.py -f temp.mp3 -m medium -o "$NOME"
echo "🗑️ A limpar temporários..."
rm temp.mp3
echo "✅ Concluído! Ficheiros criados:"
ls -lh "${NOME}."*Usar:
chmod +x pipeline_transcricao.sh
./pipeline_transcricao.sh "URL_YOUTUBE" "resultado"Idioma: Português
==================================================
Esta é a transcrição completa do áudio.
Inclui todo o texto falado no vídeo,
processado pelo motor Whisper...
Uso:
- Copiar para documentos
- Análise de texto
- Base para artigos
{
"text": "Transcrição completa...",
"language": "Português",
"language_code": "pt",
"segments": [
{
"start": 0.0,
"end": 3.5,
"text": "Primeiro segmento..."
},
{
"start": 3.5,
"end": 7.2,
"text": "Segundo segmento..."
}
]
}Uso:
- Programação (parse fácil)
- Análise com timestamps
- Integração com outros sistemas
1
00:00:00,000 --> 00:00:03,500
Primeiro segmento de texto
2
00:00:03,500 --> 00:00:07,200
Segundo segmento de texto
3
00:00:07,200 --> 00:00:12,800
Terceiro segmento de textoUso:
- Editores de vídeo (Premiere, Final Cut, DaVinci)
- Plataformas de vídeo
- Players com suporte a legendas
Durante a transcrição, verás:
==================================================
🎥 SISTEMA DE TRANSCRIÇÃO DE VÍDEO/ÁUDIO
==================================================
🔄 A carregar modelo Whisper (base)...
✅ Modelo carregado com sucesso!
⬇️ A fazer download de: https://youtube.com/...
[youtube] Extracting URL: ...
[youtube] dQw4w9WgXcQ: Downloading webpage
[download] Destination: /tmp/temp_audio.mp3
[download] 100% of 5.20MiB in 00:02
✅ Download completo: Never Gonna Give You Up
🎙️ A transcrever: temp_audio.mp3
(Isto pode demorar alguns minutos...)
Detecting language using up to the first 30 seconds.
Detected language: Portuguese
[████████████████████] 100%
✅ Transcrição completa!
🌐 Idioma detetado: Português (pt)
==================================================
💾 A GUARDAR RESULTADOS
==================================================
💾 Transcrição guardada: resultado.txt
💾 Dados completos guardados: resultado.json
💾 Legendas SRT guardadas: resultado.srt
==================================================
✅ TRANSCRIÇÃO COMPLETA!
==================================================
📄 Ficheiros criados:
• resultado.txt - Transcrição em texto
• resultado.json - Dados completos (JSON)
• resultado.srt - Legendas (SRT)
# 1. Transcrever
python transcribe.py -f podcast_ep01.mp3 -m small -o ep01
# 2. Usar o texto para criar artigo
cat ep01.txt | head -n 50 # Primeiras linhas
# 3. Extrair quotes específicas do JSON
python << EOF
import json
with open('ep01.json') as f:
data = json.load(f)
for seg in data['segments'][:10]:
print(f"[{seg['start']:.1f}s] {seg['text']}")
EOF# 1. Transcrever
python transcribe.py -f video_sem_legendas.mp4 -o video
# 2. Usar video.srt no editor de vídeo
# Premiere Pro: Import → Captions → video.srt
# Final Cut: File → Import → Captions → video.srt
# DaVinci: File → Import → Subtitle → video.srt# Durante a reunião, gravar áudio
# Depois:
python transcribe.py -f reuniao.m4a -m medium -o "ata_$(date +%Y%m%d)"
# Usar interface web para fazer perguntas:
# "Quais foram as decisões tomadas?"
# "Que tarefas foram atribuídas?"
# "Há algum prazo mencionado?"# Transcrever aula
python transcribe.py -u "URL_AULA" -o aula_materia
# Usar o resumo automático (modo web)
# Ou criar resumo manual:
cat aula_materia.txt | head -100 > resumo_aula.txthttp://localhost:5000/api
POST /api/transcribe/youtube
Transcreve um vídeo do YouTube.
Request:
{
"url": "https://youtube.com/watch?v=dQw4w9WgXcQ"
}Response:
{
"transcription": "Texto completo da transcrição...",
"language": "Português",
"summary": "Resumo do conteúdo...",
"segments": [
{
"start": 0.0,
"end": 3.5,
"text": "Primeiro segmento..."
}
]
}Códigos de Status:
200- Sucesso400- URL inválido ou não fornecido500- Erro no processamento
POST /api/transcribe/vimeo
Transcreve um vídeo do Vimeo.
Request:
{
"url": "https://vimeo.com/123456789"
}Response: Igual ao endpoint YouTube
POST /api/transcribe/file
Transcreve um ficheiro de áudio/vídeo enviado.
Request:
Content-Type: multipart/form-data
file: [ficheiro binário]
Response: Igual aos endpoints acima
Formatos Suportados:
- Áudio: MP3, WAV, M4A, FLAC, OGG
- Vídeo: MP4, AVI, MKV, MOV, WebM
Limite de Tamanho: 500MB (ajustável)
POST /api/chat
Faz perguntas sobre o conteúdo transcrito.
Request:
{
"question": "Qual é o tema principal do vídeo?",
"transcription": "Texto completo da transcrição...",
"history": [
{
"role": "user",
"content": "Pergunta anterior"
},
{
"role": "assistant",
"content": "Resposta anterior"
}
]
}Response:
{
"response": "O tema principal é..."
}GET /api/health
Verifica o estado do serviço.
Response:
{
"status": "ok",
"whisper_model": "base",
"claude_enabled": true
}# Transcrever YouTube
curl -X POST http://localhost:5000/api/transcribe/youtube \
-H "Content-Type: application/json" \
-d '{"url": "https://youtube.com/watch?v=..."}'
# Upload de ficheiro
curl -X POST http://localhost:5000/api/transcribe/file \
-F "file=@audio.mp3"
# Chat
curl -X POST http://localhost:5000/api/chat \
-H "Content-Type: application/json" \
-d '{
"question": "Resumo?",
"transcription": "...",
"history": []
}'import requests
# Transcrever YouTube
response = requests.post(
'http://localhost:5000/api/transcribe/youtube',
json={'url': 'https://youtube.com/watch?v=...'}
)
data = response.json()
print(data['transcription'])
# Upload ficheiro
with open('audio.mp3', 'rb') as f:
response = requests.post(
'http://localhost:5000/api/transcribe/file',
files={'file': f}
)
data = response.json()
# Chat
response = requests.post(
'http://localhost:5000/api/chat',
json={
'question': 'Qual o tema?',
'transcription': data['transcription'],
'history': []
}
)
print(response.json()['response'])// Transcrever YouTube
const response = await fetch('http://localhost:5000/api/transcribe/youtube', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://youtube.com/watch?v=...'
})
});
const data = await response.json();
// Upload ficheiro
const formData = new FormData();
formData.append('file', fileInput.files[0]);
const response = await fetch('http://localhost:5000/api/transcribe/file', {
method: 'POST',
body: formData
});
// Chat
const response = await fetch('http://localhost:5000/api/chat', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
question: 'Resumo?',
transcription: transcriptionText,
history: []
})
});# Transcrever todas as entrevistas
for i in entrevista_*.m4a; do
python transcribe.py -f "$i" -m medium -o "${i%.m4a}"
done
# Consolidar todas as transcrições
cat entrevista_*.txt > todas_entrevistas.txt
# Usar ferramentas de análise de texto
# ou importar JSONs para análise qualitativaPara melhores resultados:
✅ Áudio limpo
# Limpar áudio antes (reduzir ruído)
ffmpeg -i input.mp3 \
-af "highpass=f=200,lowpass=f=3000,volume=1.5" \
-ar 16000 \
output_clean.mp3✅ Modelo adequado
- Voz clara, sem ruído →
baseousmall - Áudio com ruído →
mediumoularge - Múltiplos speakers →
large
✅ Formato correto
# Converter para MP3 (mais compatível)
ffmpeg -i video.mov -vn -ar 16000 -ac 1 audio.mp3❌ Evitar:
- Vídeos muito longos (>2h) sem dividir
- Áudio com muito ruído de fundo
- Múltiplas línguas no mesmo áudio
- Música alta sobre voz
Acelerar processamento:
- Modelo menor (mais rápido):
python transcribe.py -f audio.mp3 -m tiny -o resultado- Usar GPU (se disponível):
# Verificar
import torch
print(torch.cuda.is_available()) # Deve ser True- Processar em paralelo:
# Dividir vídeo longo
ffmpeg -i long_video.mp4 -ss 00:00:00 -t 00:30:00 part1.mp3
ffmpeg -i long_video.mp4 -ss 00:30:00 -t 00:30:00 part2.mp3
# Transcrever em paralelo
python transcribe.py -f part1.mp3 -o part1 &
python transcribe.py -f part2.mp3 -o part2 &
wait
# Juntar resultados
cat part1.txt part2.txt > full.txt- Pre-processar áudio:
# Reduzir para mono 16kHz (mais rápido)
ffmpeg -i input.mp4 -ar 16000 -ac 1 -vn output.wavPara sistemas com memória limitada:
# Usar modelo tiny
export WHISPER_MODEL=tiny
# Limitar tamanho de ficheiros
find . -name "*.mp4" -size -100M -exec python transcribe.py -f {} \;
# Limpar cache se necessário
rm -rf ~/.cache/whisper/*Criar serviço systemd (Linux):
# /etc/systemd/system/transcription.service
[Unit]
Description=Video Transcription Service
After=network.target
[Service]
Type=simple
User=youruser
WorkingDirectory=/path/to/video-transcription-project
ExecStart=/path/to/venv/bin/python backend.py
Restart=always
[Install]
WantedBy=multi-user.targetAtivar:
sudo systemctl enable transcription
sudo systemctl start transcription
sudo systemctl status transcriptionCron job para processar diretório:
# Editar crontab
crontab -e
# Adicionar (processar novos ficheiros a cada hora)
0 * * * * cd /path/to/project && find /path/to/videos -name "*.mp4" -mmin -60 -exec python transcribe.py -f {} \;Enviar para Google Drive:
# Após transcrição
rclone copy resultado.txt gdrive:Transcricoes/
# Ou usar API do Google DriveNotificação quando terminar:
# Linux (notify-send)
python transcribe.py -f video.mp4 -o resultado && \
notify-send "Transcrição completa!" "resultado.txt criado"
# macOS (terminal-notifier)
python transcribe.py -f video.mp4 -o resultado && \
terminal-notifier -title "Transcrição" -message "Completa!"
# Slack webhook
python transcribe.py -f video.mp4 -o resultado && \
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"Transcrição completa!"}' \
YOUR_SLACK_WEBHOOK_URLEstrutura de pastas recomendada:
transcricoes/
├── 2024/
│ ├── 01_janeiro/
│ │ ├── reuniao_01/
│ │ │ ├── audio.mp3
│ │ │ ├── transcricao.txt
│ │ │ ├── transcricao.json
│ │ │ └── transcricao.srt
│ │ └── entrevista_cliente_A/
│ │ └── ...
│ └── 02_fevereiro/
│ └── ...
└── templates/
└── script_processamento.sh
Script de organização:
#!/bin/bash
# organize_transcriptions.sh
DATA=$(date +%Y/%m_%B)
DESTINO="$HOME/transcricoes/$DATA"
mkdir -p "$DESTINO"
mv *.txt *.json *.srt "$DESTINO/" 2>/dev/null
echo "✅ Ficheiros organizados em: $DESTINO"O index.html usa CSS inline que podes personalizar:
Mudar cores:
/* Procurar e alterar estas variáveis no <style> */
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
/* Mudar para tuas cores preferidas */
background: linear-gradient(135deg, #FF6B6B 0%, #4ECDC4 100%);Adicionar logo:
<!-- Adicionar no .header -->
<img src="logo.png" alt="Logo" style="height: 60px; margin-bottom: 10px;">
<h1>Teu Sistema de Transcrição</h1>Adicionar webhook após transcrição:
# No backend.py, após @app.route('/api/transcribe/...')
import requests
def notify_webhook(transcription_data):
webhook_url = os.environ.get('WEBHOOK_URL')
if webhook_url:
requests.post(webhook_url, json=transcription_data)
# Chamar após transcrever
notify_webhook({'status': 'complete', 'text': result['text']})Adicionar autenticação:
from flask import request
from functools import wraps
def require_api_key(f):
@wraps(f)
def decorated(*args, **kwargs):
api_key = request.headers.get('X-API-Key')
if api_key != os.environ.get('API_KEY'):
return jsonify({'error': 'Invalid API key'}), 401
return f(*args, **kwargs)
return decorated
@app.route('/api/transcribe/youtube', methods=['POST'])
@require_api_key
def transcribe_youtube():
# ...// Adicionar seletor de tema no index.html
const themes = {
dark: {
bg: '#1a1a1a',
text: '#ffffff',
primary: '#667eea'
},
light: {
bg: '#ffffff',
text: '#333333',
primary: '#764ba2'
}
};
function applyTheme(themeName) {
const theme = themes[themeName];
document.body.style.backgroundColor = theme.bg;
document.body.style.color = theme.text;
// ... aplicar outras cores
}Adicionar ao backend.py:
import logging
from datetime import datetime
# Configurar logging
logging.basicConfig(
filename='transcription.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
# Usar nos endpoints
logging.info(f"Nova transcrição iniciada: {url}")
logging.info(f"Idioma detetado: {result['language']}")
logging.info(f"Duração: {duration}s")# Criar contador de transcrições
import json
from pathlib import Path
STATS_FILE = 'stats.json'
def update_stats(language, duration, source):
stats = {}
if Path(STATS_FILE).exists():
with open(STATS_FILE) as f:
stats = json.load(f)
stats.setdefault('total', 0)
stats.setdefault('by_language', {})
stats.setdefault('by_source', {})
stats['total'] += 1
stats['by_language'][language] = stats['by_language'].get(language, 0) + 1
stats['by_source'][source] = stats['by_source'].get(source, 0) + 1
with open(STATS_FILE, 'w') as f:
json.dump(stats, f, indent=2)Ver stats:
cat stats.json
# {
# "total": 47,
# "by_language": {"pt": 30, "en": 15, "es": 2},
# "by_source": {"youtube": 20, "file": 27}
# }NUNCA transcrever:
- Informação médica privada sem consentimento
- Dados financeiros confidenciais
- Conversas pessoais sem autorização
- Material protegido por NDA
# 1. Limpar ficheiros temporários
rm /tmp/temp_audio_*
# 2. Não partilhar transcrições sem permissão
# 3. Usar HTTPS em produção
# 4. Não logar API keys
# ❌ Errado:
logging.info(f"Using key: {api_key}")
# ✅ Correto:
logging.info("API key configured")
# 5. Limitar acesso ao servidor
# Usar firewall, autenticação, rate limitingSe operas na UE ou com dados de cidadãos EU:
- ✅ Informar utilizadores sobre processamento
- ✅ Obter consentimento para guardar transcrições
- ✅ Permitir eliminar dados
- ✅ Cifrar dados em repouso
- ✅ Logs de auditoria
O Whisper suporta 99 idiomas automaticamente. Alguns exemplos:
| Idioma | Código | Qualidade |
|---|---|---|
| Português | pt | ⭐⭐⭐⭐⭐ |
| Inglês | en | ⭐⭐⭐⭐⭐ |
| Espanhol | es | ⭐⭐⭐⭐⭐ |
| Francês | fr | ⭐⭐⭐⭐⭐ |
| Alemão | de | ⭐⭐⭐⭐⭐ |
| Italiano | it | ⭐⭐⭐⭐ |
| Russo | ru | ⭐⭐⭐⭐ |
| Japonês | ja | ⭐⭐⭐⭐ |
| Chinês | zh | ⭐⭐⭐⭐ |
| Árabe | ar | ⭐⭐⭐ |
Forçar idioma específico:
# Em backend.py ou transcribe.py, alterar:
result = model.transcribe(
audio_path,
language='pt', # Forçar português
task="transcribe"
)Quando forçar idioma:
- Deteção automática falha
- Múltiplos idiomas misturados
- Sotaques fortes
- Termos técnicos de outro idioma
def executive_summary(text, max_sentences=3):
"""Criar sumário ultra-curto"""
sentences = text.split('.')
return '. '.join(sentences[:max_sentences]) + '.'def detect_emotion(text):
"""Análise básica de sentimento"""
positive_words = ['ótimo', 'excelente', 'fantástico']
negative_words = ['mau', 'péssimo', 'horrível']
text_lower = text.lower()
pos_count = sum(word in text_lower for word in positive_words)
neg_count = sum(word in text_lower for word in negative_words)
if pos_count > neg_count:
return 'Positivo'
elif neg_count > pos_count:
return 'Negativo'
return 'Neutro'from collections import Counter
import re
def extract_keywords(text, top_n=10):
"""Extrair palavras-chave mais frequentes"""
words = re.findall(r'\b\w+\b', text.lower())
# Remover stop words
stop_words = set(['o', 'a', 'de', 'para', 'com', 'em'])
words = [w for w in words if w not in stop_words and len(w) > 3]
return Counter(words).most_common(top_n)- Whisper: https://github.com/openai/whisper
- Claude API: https://docs.anthropic.com/
- yt-dlp: https://github.com/yt-dlp/yt-dlp
- Flask: https://flask.palletsprojects.com/
- Whisper: "Speech Recognition with OpenAI Whisper"
- Claude: "Building with Claude API"
- Flask REST API: "Flask RESTful API Tutorial"
- GitHub Issues: Para bugs e features
- Stack Overflow: Tag
whisperouopenai-whisper - Reddit: r/MachineLearning, r/learnpython
No projeto estão incluídos:
- ✅ Script de instalação automática
- ✅ Guia de início rápido (QUICKSTART.md)
- ✅ Exemplos de uso
- ✅ Troubleshooting completo
- ✅ Interface moderna e responsiva
- ✅ CLI poderoso e flexível
- ✅ Documentação extensa
Funcionalidades ocultas:
# Ver informação detalhada
python transcribe.py -f audio.mp3 -o resultado --verbose
# Modo debug
FLASK_DEBUG=true python backend.py
# Estatísticas de performance
time python transcribe.py -f audio.mp3 -o resultadoCausa: FFmpeg não está instalado ou não está no PATH
Solução:
# Ubuntu/Debian
sudo apt update && sudo apt install ffmpeg
# macOS
brew install ffmpeg
# Windows (PowerShell admin)
choco install ffmpeg
# Verificar instalação
ffmpeg -versionCausa: Modelo Whisper muito grande para a RAM disponível
Soluções:
- Usar modelo menor:
# Em backend.py, mudar de:
WHISPER_MODEL = "large"
# Para:
WHISPER_MODEL = "base" # ou "tiny"-
Processar ficheiros menores (dividir vídeo)
-
Fechar outras aplicações
-
Aumentar swap:
# Linux
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfileCausas possíveis:
- Vídeo privado ou bloqueado geograficamente
- URL incorreto
- yt-dlp desatualizado
Soluções:
# Atualizar yt-dlp
pip install -U yt-dlp
# Verificar se o vídeo é acessível
yt-dlp --list-formats "URL_DO_VIDEO"
# Testar download manual
yt-dlp -f "bestaudio" "URL_DO_VIDEO"Causa: API key não configurada ou inválida
Solução:
# Verificar se a chave está definida
echo $ANTHROPIC_API_KEY
# Se vazia, configurar:
export ANTHROPIC_API_KEY="sk-ant-api03-..."
# Ou adicionar a .env
echo 'ANTHROPIC_API_KEY=sk-ant-...' > .env
# Obter chave em: https://console.anthropic.com/Alternativa sem Claude:
- Resumo básico será gerado automaticamente
- Chat não estará disponível
Causa: Outra aplicação está a usar a porta 5000
Solução:
# Encontrar processo usando a porta
lsof -ti:5000 # Linux/Mac
netstat -ano | findstr :5000 # Windows
# Matar processo (Linux/Mac)
kill -9 $(lsof -ti:5000)
# Ou alterar porta em backend.py:
app.run(host='0.0.0.0', port=5001) # Usar porta diferentePossíveis causas:
- Áudio de má qualidade
- Ruído de fundo elevado
- Idioma não detetado corretamente
- Modelo muito pequeno
Soluções:
- Melhorar qualidade do áudio:
# Usar FFmpeg para limpar áudio
ffmpeg -i input.mp4 -af "highpass=f=200,lowpass=f=3000" -ar 16000 output.wav- Usar modelo maior:
WHISPER_MODEL = "medium" # ou "large"- Forçar idioma (se deteção automática falhar):
result = model.transcribe(
audio_path,
language='pt', # Forçar português
task="transcribe"
)Causa: Dependência não instalada
Solução:
# Ativar ambiente virtual
source venv/bin/activate
# Reinstalar dependências
pip install -r requirements.txt
# Se persistir, instalar manualmente
pip install flask whisper yt-dlp anthropicOtimizações:
- Usar GPU (se disponível):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118- Usar modelo menor:
WHISPER_MODEL = "tiny" # Mais rápido- Converter para MP3 antes:
ffmpeg -i video.mp4 -vn -ar 16000 -ac 1 audio.mp3
python transcribe.py -f audio.mp3- Fechar browser durante processamento CLI
Se o problema persistir:
- Verificar logs:
python backend.py 2>&1 | tee logs.txt- Informação do sistema:
python --version
pip list
ffmpeg -version- Criar issue com:
- Descrição do erro
- Logs completos
- Sistema operativo
- Comando executado
- Transcrição multi-fonte (YouTube/Vimeo/Local)
- Deteção automática de idioma
- Resumo com IA (Claude)
- Chat contextual
- Interface web moderna
- CLI standalone
- Export TXT/JSON/SRT
- Suporte para mais idiomas na interface
- Editor de transcrições (correções inline)
- Timestamps clicáveis (sincronização com vídeo)
- Diarização (identificar múltiplos speakers)
- Tradução automática entre idiomas
- Integração com mais plataformas (Twitch, TikTok, Instagram)
- API de batch processing
- Dashboard de analytics
- Sistema de utilizadores e autenticação
- Workspace colaborativo
- Integração com Google Drive/Dropbox
- Export para formatos adicionais (DOCX, PDF)
- Mobile app (iOS/Android)
- Plugin para editores de vídeo
- Suporte para live streams
Tens uma ideia? Abre um issue com:
- Título: Feature Request - [Tua Ideia]
- Descrição: Explicação detalhada
- Caso de uso: Como ajudaria
- Prioridade: Alta/Média/Baixa
Contribuições são bem-vindas!
- Fork do repositório
- Clone o teu fork:
git clone https://github.com/teu-user/video-transcription.git- Criar branch para a feature:
git checkout -b feature/minha-feature- Fazer commits:
git commit -m "Adiciona feature X"- Push para o teu fork:
git push origin feature/minha-feature- Abrir Pull Request
- ✅ Código limpo e comentado
- ✅ Testes para novas features
- ✅ Documentação atualizada
- ✅ Commits descritivos
- ✅ Seguir estilo do projeto
- 🐛 Bug fixes
- ✨ Novas features
- 📝 Documentação
- 🌍 Traduções
- 🎨 Design/UI
- ⚡ Otimizações
- 🧪 Testes
Este projeto está sob a licença MIT.
MIT License
Copyright (c) 2024
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Este projeto utiliza tecnologias incríveis de:
- OpenAI Whisper - Motor de transcrição
- Anthropic Claude - IA para resumos e chat
- yt-dlp - Download de vídeos
- Flask - Framework web
- FFmpeg - Processamento multimédia
- 📧 Email: [teu@email.com]
- 💬 Discussions: [GitHub Discussions]
- 🐛 Issues: [GitHub Issues]
- 📖 Wiki: [GitHub Wiki]
Desenvolvido com ❤️ para transcrição inteligente de conteúdo multimédia
⭐ Se este projeto te ajudou, dá uma estrela no GitHub!
🏠 Home • 📖 Docs • 🚀 Quickstart • 🐛 Issues