first commit

This commit is contained in:
Lorenzo Iovino 2025-05-23 14:45:22 +02:00
commit b6d47982c7
8 changed files with 1353 additions and 0 deletions

215
README.md Normal file
View file

@ -0,0 +1,215 @@
# Transcription Runner con Multi-Chunk Processing e GPU Parallela
Questo pacchetto ti consente di:
- Creare un'istanza EC2 GPU su AWS (g4dn.12xlarge)
- Suddividere e trascrivere un file video `.mp4` in più chunk
- Generare automaticamente transcript + speaker diarization
- Scaricare i file di output
- Terminare l'istanza per risparmiare costi
- Applicare spostamento temporale ai timestamp delle trascrizioni
- Configurare facilmente le opzioni tramite file `.env`
---
## ✅ Prerequisiti
### 1. **Installare AWS CLI**
Se non hai ancora installato AWS CLI:
- Su macOS con Homebrew:
```bash
brew install awscli
```
- Su Linux (Debian/Ubuntu):
```bash
sudo apt update
sudo apt install awscli
```
### 2. **Configurare AWS CLI**
Una volta installato, esegui:
```bash
aws configure
```
Inserisci:
- Access key ID
- Secret access key
- Regione predefinita (es: `eu-south-1`)
- Formato output: `json`
### 3. **Creare una chiave SSH per EC2**
Nel terminale, esegui:
```bash
aws ec2 create-key-pair --key-name whisper-key --query 'KeyMaterial' --output text > ~/.ssh/whisper-key.pem
chmod 400 ~/.ssh/whisper-key.pem
```
### 4. **Installa netcat**
- Su macOS con Homebrew:
```bash
brew install netcat
```
- Su Linux (Debian/Ubuntu):
```bash
sudo apt install netcat
```
### 5. **Registrarsi su Hugging Face e ottenere token**
Vai su: https://huggingface.co/settings/tokens
Crea un token con accesso ai modelli (read access) e copia il valore.
### 6. **IAM role "WhisperS3Profile" con accesso S3**
Assicurati che il tuo account AWS abbia un ruolo IAM chiamato "WhisperS3Profile" con permessi di accesso S3.
### 7. **Configurare il file .env**
Copia il file `.env.sample` in `.env` e modifica i valori secondo le tue esigenze:
```bash
cp .env.sample .env
nano .env # o usa l'editor che preferisci
```
---
## ▶️ Come usare
### Metodo Base
```bash
chmod +x whisper_parallel.sh
./whisper_parallel.sh
```
### Configurazione tramite file .env
Modifica il file `.env` con i tuoi parametri e poi esegui:
```bash
./whisper_parallel.sh
```
### Specificare i parametri tramite variabili d'ambiente (sovrascrive .env)
```bash
VIDEO_FILE="mia_intervista.mp4" START_MIN=5 END_MIN=15 GPU_COUNT=4 ./whisper_parallel.sh
```
### Parametri disponibili
Questi parametri possono essere specificati nel file `.env` o tramite variabili d'ambiente:
| Parametro | Descrizione | Default |
|-----------|-------------|---------|
| VIDEO_FILE | Il file video/audio da trascrivere | mio_video.mp4 |
| START_MIN | Minuto di inizio per il crop | 0 |
| END_MIN | Minuto di fine per il crop | 0 (fino alla fine) |
| SHIFT_SECONDS | Sposta i timestamp di X secondi | 0 |
| GPU_COUNT | Numero di chunk in cui dividere l'audio | 4 |
| NUM_SPEAKERS | Numero di speaker se conosciuto in anticipo | (auto) |
| DIARIZATION_ENABLED | Attiva/disattiva riconoscimento speaker | true |
| INSTANCE_TYPE | Tipo di istanza EC2 | g4dn.12xlarge |
| REGION | Regione AWS | eu-south-1 |
| BUCKET_NAME | Nome del bucket S3 | whisper-video-transcripts |
| HF_TOKEN | Token Hugging Face per Pyannote | (richiesto) |
| FIX_START | Aggiunge silenzio all'inizio per migliorare la cattura | true |
| SHIFT_ONLY | Applica solo lo spostamento timestamp a file esistenti | false |
| INPUT_PREFIX | Prefisso per i file di input quando si usa SHIFT_ONLY | "" |
| WHISPER_MODEL | Modello Whisper da utilizzare | large |
---
## 📦 Output
Al termine troverai questi file nella cartella corrente:
- `{nome-file}_{start}_{end}_{random}.txt` → transcript grezzo
- `{nome-file}_{start}_{end}_{random}_final.txt` → transcript con speaker
- `{nome-file}_{start}_{end}_{random}.srt` → file SRT per i sottotitoli
- `{nome-file}_{start}_{end}_{random}.vtt` → file VTT per i sottotitoli web
---
## 🚀 Modalità Multi-Chunk
La versione attuale dello script divide automaticamente l'audio in più parti e le elabora in parallelo su GPU. Questo:
1. Migliora l'utilizzo della memoria per file lunghi
2. Accelera il processo di trascrizione di file estesi
3. Ottimizza l'utilizzo delle risorse hardware
### Suggerimenti per le prestazioni
1. **Instanza ideale**: g4dn.xlarge è sufficiente per file brevi, g4dn.12xlarge per file lunghi con multi-GPU
2. **Numero di chunk**: Per file lunghi, suddividere in più chunk aiuta a gestire meglio la memoria
3. **Modello**: Per file molto lunghi, considerare l'uso del modello "medium" o "base" invece di "large"
---
## 🧪 Esempi di utilizzo
### Configurazione tramite .env
Modifica il file `.env` con i tuoi parametri e poi esegui:
```bash
./whisper_parallel.sh
```
### Trascrivere un intero file
```bash
VIDEO_FILE="conferenza.mp4" ./whisper_parallel.sh
```
### Trascrivere una porzione specifica
```bash
VIDEO_FILE="lezione.mp4" START_MIN=10 END_MIN=20 ./whisper_parallel.sh
```
### Suddividere un file lungo in più chunk
```bash
VIDEO_FILE="intervista.mp4" GPU_COUNT=6 ./whisper_parallel.sh
```
### Disabilitare la diarizzazione (solo trascrizione)
```bash
VIDEO_FILE="audio.mp4" DIARIZATION_ENABLED=false ./whisper_parallel.sh
```
### Specificare il numero di speaker
```bash
VIDEO_FILE="intervista.mp4" NUM_SPEAKERS=2 ./whisper_parallel.sh
```
### Spostare i timestamp di una trascrizione esistente
```bash
SHIFT_ONLY=true SHIFT_SECONDS=30 INPUT_PREFIX="mia_trascrizione" ./whisper_parallel.sh
```
---
## 🔄 Funzionalità avanzate
### Spostamento dei timestamp
Lo script può spostare i timestamp nei file di trascrizione, utile quando:
- Hai tagliato una porzione iniziale del video
- Devi sincronizzare i sottotitoli con un video modificato
- Lavori con segmenti estratti da un video più lungo
### Tipi di file supportati per lo spostamento
- `.srt` (SubRip Text)
- `.vtt` (WebVTT)
- `.txt` (Transcript con timestamp)
---
## ☁️ Note
- L'istanza EC2 viene **distrutta automaticamente** al termine.
- I file audio vengono rimossi dal bucket S3 dopo il download.
- I nomi dei file di output includono un suffisso casuale per evitare conflitti.
- In caso di interruzione dello script, il sistema eseguirà comunque la pulizia delle risorse AWS.
- Richiede il file companion `parallel_transcript.py` per l'elaborazione su EC2.
## Dettagli tecnici
- Utilizza FFmpeg per l'estrazione audio
- Crea automaticamente security group AWS e utilizza la VPC predefinita se disponibile
- Implementa un cleanup automatico alla terminazione dello script
- Supporta diarizzazione di alta qualità tramite Pyannote/WhisperX
- Fornisce funzionalità di spostamento timestamp per tutti i formati di output
## Sicurezza
- Lo script crea un security group che consente l'accesso SSH da qualsiasi IP (0.0.0.0/0)
- Sono necessarie credenziali AWS con permessi EC2 e S3
- Le chiavi SSH vengono utilizzate per l'accesso sicuro all'istanza
- Il file `.env` contiene dati sensibili e non dovrebbe essere aggiunto al controllo di versione (è già incluso in `.gitignore`)