Was macht nio-video-extractor?
Pipeline locale per trasformare uno o piu' video in testo + frame chiave + sintesi. Il "capire il video" lo fa il modello leggendo le trascrizioni e i fotogrammi come immagini — gli script servono solo a preparare quel materiale. Nessun servizio esterno.
Gli script stanno nella cartella scripts/ di questa skill. Nei comandi qui sotto,
SKILL_DIR = la cartella di questa skill (es. ~/.claude/skills/nio-video-extractor).
Requisiti
- ffmpeg + ffprobe (Windows:
winget install Gyan.FFmpeg· macOS:brew install ffmpeg· Linux:apt install ffmpeg) - Python 3.9+ con
faster-whisper(pip install faster-whisper) - yt-dlp solo per gli URL (
pip install --upgrade yt-dlp). Per i file locali non serve. - GPU opzionale (NVIDIA):
pip install nvidia-cublas-cu12 nvidia-cudnn-cu12→ trascrizione ~10x piu' veloce. Senza GPU funziona su CPU (piu' lento; valuta--model smallomedium).
Workflow
1. Controlla l'ambiente
python "SKILL_DIR/scripts/setup_check.py"
Se manca qualcosa, mostra all'utente i comandi di installazione e fermati finche' non e' risolto.
2. Estrai audio→testo e i frame
Passa quello che ha dato l'utente: file, cartella oppure URL (anche misti, anche piu' di uno).
python "SKILL_DIR/scripts/scrub.py" "<video-o-cartella-o-URL>" [altri...]
Con un URL il video viene scaricato in <outdir>/source/ e poi trattato come un file
locale qualunque: da li' in poi il flusso e' identico. Rilanciare lo stesso link non
riscarica nulla.
Con soli URL non esiste una cartella di partenza, quindi l'output finisce in _scrub
dentro la directory corrente. Se vuoi che stia altrove passa --outdir, e falla
sempre esplicita quando lavori per un progetto specifico.
Opzioni utili: --lang it (o auto), --model large-v3|medium|small, --grid-interval 12,
--no-frames, --no-transcribe, --cpu, --keep-audio, --outdir,
--download-dir (dove finiscono i video scaricati), --no-subs.
Output creato in <cartella>/_scrub/: transcripts/*.txt e *.srt, frames/<id>/grid_*.jpg, manifest.txt.
3. Leggi le trascrizioni
Leggi i file transcripts/*.txt. Riassumi la sostanza; se il parlato e' colloquiale o volgare,
estrai solo il contenuto utile riscritto in forma pulita.
4. Individua i momenti visivi chiave
Leggi le griglie frames/<id>/grid_*.jpg (contact-sheet, 1 frame ogni 12 s, 4x4).
Trova le schermate importanti (grafici, diagrammi, slide).
Mappa griglia→tempo: per grid_00G.jpg (G da 0) e la cella C (0..15, per righe):
secondi = (G*16 + C) * intervallo (intervallo = 12 di default).
5. Estrai i frame chiave in alta risoluzione
Per ogni schermata utile, al timestamp calcolato:
python "SKILL_DIR/scripts/keyframe.py" "<video>" <secondi> "<cartella>/_scrub/frames/key/<nome>.jpg"
Poi rileggi i frame estratti per verificarne il contenuto e scegliere i migliori.
6. Scrivi la sintesi
Crea <cartella>/_scrub/SINTESI.md: sintesi per video + i frame chiave incorporati
(), un indice video con durate, e riferimenti alle trascrizioni.
Note
- Privacy/costi: tutto in locale, nessun upload, nessuna API key.
- Copyright: se i video sono di un corso/opera altrui, il materiale estratto (testo, frame, sintesi) e' per studio personale — non pubblicarlo/redistribuirlo senza permesso.
- Sorgenti iPad/full-range: gli script gestiscono gia' il caso YUV full-range (
format=yuvj420p). - URL supportati via yt-dlp: si scarica al massimo 1080p, che per leggere le interfacce nei tutorial e' abbondante e va molto piu' veloce. Un link = un video: le playlist non vengono seguite.
- Sottotitoli: per gli URL vengono salvati anche i sottotitoli disponibili (inclusi gli
automatici) accanto al video. NON sostituiscono la trascrizione Whisper, che resta la
fonte usata dalla pipeline: sono una rete di sicurezza quando Whisper e' lento perche'
gira su CPU. Disattivabili con
--no-subs.