{"id":31936919,"url":"https://github.com/thisloke/transcript-diarize-video","last_synced_at":"2025-10-14T07:53:48.055Z","repository":{"id":317529570,"uuid":"989023732","full_name":"thisloke/transcript-diarize-video","owner":"thisloke","description":null,"archived":false,"fork":false,"pushed_at":"2025-10-01T12:31:15.000Z","size":16,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-01T14:36:05.419Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thisloke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-23T12:44:41.000Z","updated_at":"2025-10-01T12:31:20.000Z","dependencies_parsed_at":"2025-10-01T14:36:09.008Z","dependency_job_id":"8865d31b-2b60-4c63-a5b7-185b993691e0","html_url":"https://github.com/thisloke/transcript-diarize-video","commit_stats":null,"previous_names":["thisloke/transcript-diarize-video"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/thisloke/transcript-diarize-video","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisloke%2Ftranscript-diarize-video","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisloke%2Ftranscript-diarize-video/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisloke%2Ftranscript-diarize-video/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisloke%2Ftranscript-diarize-video/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thisloke","download_url":"https://codeload.github.com/thisloke/transcript-diarize-video/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thisloke%2Ftranscript-diarize-video/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279018199,"owners_count":26086307,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-14T07:53:43.627Z","updated_at":"2025-10-14T07:53:48.049Z","avatar_url":"https://github.com/thisloke.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Transcription Runner con Multi-Chunk Processing e GPU Parallela\n\nQuesto pacchetto ti consente di:\n- Creare un'istanza EC2 GPU su AWS (g4dn.12xlarge)\n- Suddividere e trascrivere un file video `.mp4` in più chunk\n- Generare automaticamente transcript + speaker diarization\n- Scaricare i file di output\n- Terminare l'istanza per risparmiare costi\n- Applicare spostamento temporale ai timestamp delle trascrizioni\n- Configurare facilmente le opzioni tramite file `.env`\n\n---\n\n## ✅ Prerequisiti\n\n### 1. **Installare AWS CLI**\nSe non hai ancora installato AWS CLI:\n- Su macOS con Homebrew:\n```bash\nbrew install awscli\n```\n- Su Linux (Debian/Ubuntu):\n```bash\nsudo apt update\nsudo apt install awscli\n```\n\n### 2. **Configurare AWS CLI**\nUna volta installato, esegui:\n```bash\naws configure\n```\nInserisci:\n- Access key ID\n- Secret access key\n- Regione predefinita (es: `eu-south-1`)\n- Formato output: `json`\n\n### 3. **Creare una chiave SSH per EC2**\nNel terminale, esegui:\n```bash\naws ec2 create-key-pair --key-name whisper-key --query 'KeyMaterial' --output text \u003e ~/.ssh/whisper-key.pem\nchmod 400 ~/.ssh/whisper-key.pem\n```\n\n### 4. **Installa netcat**\n- Su macOS con Homebrew:\n```bash\nbrew install netcat\n```\n- Su Linux (Debian/Ubuntu):\n```bash\nsudo apt install netcat\n```\n\n### 5. **Registrarsi su Hugging Face e ottenere token**\nVai su: https://huggingface.co/settings/tokens\nCrea un token con accesso ai modelli (read access) e copia il valore.\n\n### 6. **IAM role \"WhisperS3Profile\" con accesso S3**\nAssicurati che il tuo account AWS abbia un ruolo IAM chiamato \"WhisperS3Profile\" con permessi di accesso S3.\n\n### 7. **Configurare il file .env**\nCopia il file `.env.sample` in `.env` e modifica i valori secondo le tue esigenze:\n```bash\ncp .env.sample .env\nnano .env  # o usa l'editor che preferisci\n```\n\n---\n\n## ▶️ Come usare\n\n### Metodo Base\n```bash\nchmod +x whisper_parallel.sh\n./whisper_parallel.sh\n```\n\n### Configurazione tramite file .env\nModifica il file `.env` con i tuoi parametri e poi esegui:\n```bash\n./whisper_parallel.sh\n```\n\n### Specificare i parametri tramite variabili d'ambiente (sovrascrive .env)\n```bash\nVIDEO_FILE=\"mia_intervista.mp4\" START_MIN=5 END_MIN=15 GPU_COUNT=4 ./whisper_parallel.sh\n```\n\n### Parametri disponibili\nQuesti parametri possono essere specificati nel file `.env` o tramite variabili d'ambiente:\n\n| Parametro | Descrizione | Default |\n|-----------|-------------|---------|\n| VIDEO_FILE | Il file video/audio da trascrivere | mio_video.mp4 |\n| START_MIN | Minuto di inizio per il crop | 0 |\n| END_MIN | Minuto di fine per il crop | 0 (fino alla fine) |\n| SHIFT_SECONDS | Sposta i timestamp di X secondi | 0 |\n| GPU_COUNT | Numero di chunk in cui dividere l'audio | 4 |\n| NUM_SPEAKERS | Numero di speaker se conosciuto in anticipo | (auto) |\n| DIARIZATION_ENABLED | Attiva/disattiva riconoscimento speaker | true |\n| INSTANCE_TYPE | Tipo di istanza EC2 | g4dn.12xlarge |\n| REGION | Regione AWS | eu-south-1 |\n| BUCKET_NAME | Nome del bucket S3 | whisper-video-transcripts |\n| HF_TOKEN | Token Hugging Face per Pyannote | (richiesto) |\n| FIX_START | Aggiunge silenzio all'inizio per migliorare la cattura | true |\n| SHIFT_ONLY | Applica solo lo spostamento timestamp a file esistenti | false |\n| INPUT_PREFIX | Prefisso per i file di input quando si usa SHIFT_ONLY | \"\" |\n| WHISPER_MODEL | Modello Whisper da utilizzare | large |\n\n---\n\n## 📦 Output\n\nAl termine troverai questi file nella cartella corrente:\n- `{nome-file}_{start}_{end}_{random}.txt` → transcript grezzo\n- `{nome-file}_{start}_{end}_{random}_final.txt` → transcript con speaker\n- `{nome-file}_{start}_{end}_{random}.srt` → file SRT per i sottotitoli\n- `{nome-file}_{start}_{end}_{random}.vtt` → file VTT per i sottotitoli web\n\n---\n\n## 🚀 Modalità Multi-Chunk\n\nLa versione attuale dello script divide automaticamente l'audio in più parti e le elabora in parallelo su GPU. Questo:\n1. Migliora l'utilizzo della memoria per file lunghi\n2. Accelera il processo di trascrizione di file estesi\n3. Ottimizza l'utilizzo delle risorse hardware\n\n### Suggerimenti per le prestazioni\n\n1. **Instanza ideale**: g4dn.xlarge è sufficiente per file brevi, g4dn.12xlarge per file lunghi con multi-GPU\n2. **Numero di chunk**: Per file lunghi, suddividere in più chunk aiuta a gestire meglio la memoria\n3. **Modello**: Per file molto lunghi, considerare l'uso del modello \"medium\" o \"base\" invece di \"large\"\n\n---\n\n## 🧪 Esempi di utilizzo\n\n### Configurazione tramite .env\nModifica il file `.env` con i tuoi parametri e poi esegui:\n```bash\n./whisper_parallel.sh\n```\n\n### Trascrivere un intero file\n```bash\nVIDEO_FILE=\"conferenza.mp4\" ./whisper_parallel.sh\n```\n\n### Trascrivere una porzione specifica\n```bash\nVIDEO_FILE=\"lezione.mp4\" START_MIN=10 END_MIN=20 ./whisper_parallel.sh\n```\n\n### Suddividere un file lungo in più chunk\n```bash\nVIDEO_FILE=\"intervista.mp4\" GPU_COUNT=6 ./whisper_parallel.sh\n```\n\n### Disabilitare la diarizzazione (solo trascrizione)\n```bash\nVIDEO_FILE=\"audio.mp4\" DIARIZATION_ENABLED=false ./whisper_parallel.sh\n```\n\n### Specificare il numero di speaker\n```bash\nVIDEO_FILE=\"intervista.mp4\" NUM_SPEAKERS=2 ./whisper_parallel.sh\n```\n\n### Spostare i timestamp di una trascrizione esistente\n```bash\nSHIFT_ONLY=true SHIFT_SECONDS=30 INPUT_PREFIX=\"mia_trascrizione\" ./whisper_parallel.sh\n```\n\n---\n\n## 🔄 Funzionalità avanzate\n\n### Spostamento dei timestamp\nLo script può spostare i timestamp nei file di trascrizione, utile quando:\n- Hai tagliato una porzione iniziale del video\n- Devi sincronizzare i sottotitoli con un video modificato\n- Lavori con segmenti estratti da un video più lungo\n\n### Tipi di file supportati per lo spostamento\n- `.srt` (SubRip Text)\n- `.vtt` (WebVTT)\n- `.txt` (Transcript con timestamp)\n\n---\n\n## ☁️ Note\n\n- L'istanza EC2 viene **distrutta automaticamente** al termine.\n- I file audio vengono rimossi dal bucket S3 dopo il download.\n- I nomi dei file di output includono un suffisso casuale per evitare conflitti.\n- In caso di interruzione dello script, il sistema eseguirà comunque la pulizia delle risorse AWS.\n- Richiede il file companion `parallel_transcript.py` per l'elaborazione su EC2.\n\n## Dettagli tecnici\n\n- Utilizza FFmpeg per l'estrazione audio\n- Crea automaticamente security group AWS e utilizza la VPC predefinita se disponibile\n- Implementa un cleanup automatico alla terminazione dello script\n- Supporta diarizzazione di alta qualità tramite Pyannote/WhisperX\n- Fornisce funzionalità di spostamento timestamp per tutti i formati di output\n\n## Sicurezza\n\n- Lo script crea un security group che consente l'accesso SSH da qualsiasi IP (0.0.0.0/0)\n- Sono necessarie credenziali AWS con permessi EC2 e S3\n- Le chiavi SSH vengono utilizzate per l'accesso sicuro all'istanza\n- Il file `.env` contiene dati sensibili e non dovrebbe essere aggiunto al controllo di versione (è già incluso in `.gitignore`)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisloke%2Ftranscript-diarize-video","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthisloke%2Ftranscript-diarize-video","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthisloke%2Ftranscript-diarize-video/lists"}