Drone Pilots Team APS

EDITING VIDEO MONTAGGIO

Intermedio

Montaggio Video automatico con LLM - DaVinci Resolve, FinalCut, Premiere

Guida pratica: da zero al montaggio con LLM, Python e DaVinci Resolve o Final Cut (anche Adobe Premiere, ma limitato) — nVidia 24 GB · Qwen3.8 27B · Ollama · FFmpeg

Silvio · 2 ottobre 2026 · 11 min di lettura
Montaggio Video automatico con LLM - DaVinci Resolve, FinalCut, Premiere

Per seguire questo articolo non vi servirà alcuna conoscenza di linguaggi di programmazione, poiché ogni passaggio è descritto partendo da zero e gli script sono già pre-impostati. Se notate qualche log di errore, basterà darlo in pasto ad una IA come Claude per farvi indirizzare a correggerli.

Ho testato la procedura utilizzando una scheda nVidia con 24 GB di RAM e modello qwen3.8 27B. Se usate schede AMD, qualche variabile potrebbe dover essere settata diversamente.


Per comodità ho inserito gli script in un file zip scaricabile da qui: script_montaggio_qwen3.5_9b.zip

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Introduzione: cos'è un LLM

Un LLM (Large Language Model) è un modello di intelligenza artificiale addestrato su enormi quantità di testo per prevedere la parola successiva. Da questo meccanismo semplice nascono capacità sorprendenti: riassumere, ragionare, scrivere codice.

La sua "potenza" dipende molto dal numero di parametri appresi durante l'addestramento. Quando senti parlare di un modello "9B" o "27B", significa 9 o 27 miliardi di parametri: più parametri significano più capacità, ma anche più memoria necessaria.

Dimensioni e requisiti di memoria

 Qwen3.5 9B   Multimodale (testo + immagini), contesto 262K token   ~7 GB VRAM 

 Qwen3.8 27B   Visione avanzata, Q4_K_M   ~19 GB VRAM 

 Qwen3.8 2.4T   Fuori portata per PC domestico   ≥450 GB RAM 

La quantizzazione comprime i pesi del modello per ridurre la memoria, con una piccola perdita di qualità. È ciò che rende possibile usare questi modelli su una scheda video normale.

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Perché in locale?

🔒 Privacy — I tuoi video restano sul computer e non vengono caricati su server di terzi.
💰 Costi — Lo script analizza centinaia o migliaia di fotogrammi. Con un servizio cloud ogni immagine si paga; in locale il costo marginale è la corrente elettrica.
⚙️ Controllo — Nessun limite di utilizzo, nessun abbonamento, funziona offline. Il modello non cambia: i risultati sono ripetibili.

Compromesso: i modelli cloud più grandi sono generalmente più capaci, ma per un compito circoscritto come valutare i fotogrammi, un modello locale da 9B o 27B è più che sufficiente.

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Prerequisiti hardware

Scheda video

  1. 12 GB (RTX 3060, RTX 4070, RTX 5070) — Qwen3.5 9B
  2. 16 GB (RTX 5060 Ti, RTX 5070 Ti, RTX 5080) — 9B con più margine; il 27B entra solo a 3 bit
  3. 24 GB+ (RTX 3090, RTX 4090, RTX 5090) — Qwen3.8 27B, più preciso

Nota: Nvidia è la scelta più semplice. AMD e Intel funzionano ma richiedono più configurazione. Processore: 6 core o più, 32 GB di RAM consigliati (16 GB minimo), SSD veloce.

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Prerequisiti software

  1. Python 3.10 — python.org/downloads (Windows: spunta "Add Python to PATH"). Gli script sono stati provati con la 3.10.6: se con una versione più recente l'installazione di librosa dà errori, usa la 3.10
  2. Ollama — ollama.com/download (Windows, macOS, Linux). Serve una versione recente: se hai un'installazione vecchia, aggiornala
  3. FFmpeg — ffmpeg.org — winget install ffmpeg / brew install ffmpeg / sudo apt install ffmpeg. Comprende anche ffprobe, usato dagli script
  4. Driver NVIDIA aggiornati — servono a Ollama e alla decodifica dei video sulla GPU; senza, tutto gira sulla CPU, molto più lentamente
  5. DaVinci Resolve — blackmagicdesign.com (gratuito per importare; script 7 richiede Studio) oppure Final Cut (Mac)

Dopo l'installazione chiudi e riapri il terminale e controlla che questi comandi vengano riconosciuti (altrimenti il programma non è nel PATH):

python --version
ffmpeg -version
ollama --version

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Installazione

Python e librerie

python -m venv venv
venv\Scripts\activate # Windows
source venv/bin/activate # macOS / Linux
pip install numpy librosa requests pillow

Ogni volta che apri un nuovo terminale, riattiva l'ambiente con la seconda riga prima di lanciare gli script.

Su Windows, in PowerShell, il comando di attivazione può fermarsi con un errore sugli script disabilitati: lancia una volta Set-ExecutionPolicy -Scope CurrentUser RemoteSigned e riprova, oppure usa il Prompt dei comandi. Su macOS e Linux al posto di python usa di solito python3.

Struttura delle cartelle

Le sottocartelle vengono create automaticamente. I video possono stare dove preferisci: il percorso si indica in avvia_montaggio.py.

progetto/
avvia_montaggio.py + script 1-7
frames/ <- script 1
movimento/ <- script 2
punteggi/ <- script 3
musica/ <- script 4 (facoltativo)
montaggio/ <- script 5
colore/ <- script 6 (facoltativo)
musica.mp3

Modelli su Ollama

Il modello predefinito è Qwen3.5 9B, adatto a schede da 12 GB in su (il download pesa circa 7 GB):

ollama pull qwen3.5:9b

Con 24 GB puoi usare invece Qwen3.8 27B, più preciso: scaricalo, verifica il nome con ollama list e scrivilo nella variabile MODEL della CONFIG.

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

La configurazione centrale: avvia_montaggio.py

A differenza della versione precedente, non è più necessario modificare i singoli script. Tutte le variabili principali sono nella sezione CONFIG di avvia_montaggio.py e vengono passate automaticamente tramite variabili d'ambiente.

Modifica almeno CLIPS_DIR con la cartella dei tuoi video. La r davanti alle virgolette evita problemi con i backslash di Windows.

# =============================== IMPOSTAZIONI ===============================
CONFIG = {
# ---- Dove sono i file ------------------------------------------------
"CLIPS_DIR": r"D:\Cartella\Video", # cartella dei video
"MUSICA": "musica.mp3", # file musicale (nome o percorso completo)

# ---- Modello e scheda video -------------------------------------------
"MODEL": "qwen3.5:9b", # nome ESATTO del modello (vedi "ollama list")
"CHUNK": 10, # fotogrammi per richiesta (6-8 se manca VRAM)
"GESTISCI_OLLAMA": True, # True = avvia Ollama se e' spento e lo chiude a fine lavoro
"USE_CUDA": True, # decodifica su GPU (se non riesce, CPU)

# ---- Estrazione dei fotogrammi ----------------------------------------
"STEP": 2, # secondi tra un fotogramma e l'altro
"WIDTH": 768, # larghezza dei fotogrammi in pixel

# ---- Durata del video e della musica ----------------------------------
"DURATA_VIDEO": 60.0, # durata del video finale in secondi
"DURATA_MUSICA": 65.0, # brano da generare (passo 4): qualche secondo in piu' del video
"MUSICA_INIZIO": "auto", # "auto" = parte sul primo battito forte; oppure un secondo (es. 12.5)

# ---- Tagli -------------------------------------------------------------
"BEAT_PER_TAGLIO": "auto", # "auto" oppure un numero (es. 4 = un taglio ogni 4 battiti)
"DURATA_MIN_TAGLIO": 2.0, # secondi: in modalita' auto, taglio non piu' corto di cosi'
"DURATA_MAX_TAGLIO": 8.0, # secondi: nessun taglio piu' lungo di cosi' (0 = nessun limite)
"RIUSO_PENALITA": 0.6, # piu' alto = piu' varieta' tra clip diversi
"SCARTA_INIZIO": 4.0, # secondi scartati all'inizio di ogni clip (drone fermo, decollo)
"SCARTA_FINE": 2.0, # secondi scartati alla fine di ogni clip (atterraggio)
"MOVIMENTO_MIN": 0.4, # sotto questa frazione del movimento tipico = "fermo"; 0 = off
"ANTEPRIMA": False, # True = crea anche un video di anteprima a 720p

# ---- Musica da generare (passo 4) -------------------------------------
"BPM_MIN": 90, # intervallo di BPM che il modello puo' proporre
"BPM_MAX": 124,
"STILE_EXTRA": "", # opzionale, in inglese: es. "cinematic, warm pads, no drums"

# ---- Colore (passi 6 e 7) ---------------------------------------------
"ESPOSIZIONE_FORZA": 0.8, # 0 = nessuna correzione, 1 = allinea del tutto la luminosita'
"WB_FORZA": 0.3, # 0 = nessuna correzione, 1 = allinea del tutto il colore
"CLIP_RIFERIMENTO": None, # es. "DJI_0146": usa i tagli di quel clip come riferimento
"METODO": "cdl", # passo 7: "cdl" (consigliato) oppure "lut" (usa i file .cube)
}

# numero del passo: (descrizione, attivo)
PASSI = {
1: ("Estrazione dei fotogrammi", True),
2: ("Misura del movimento", True),
3: ("Punteggi dei fotogrammi (modello vision)", True),
4: ("Prompt per generare la musica", False), # True solo se devi creare il brano
5: ("Montaggio a tempo di musica", True),
6: ("Correzione colore", True),
7: ("Applica le correzioni in DaVinci Resolve", False), # richiede Resolve Studio
}
FERMA_SE_ERRORE = True # True = al primo errore si ferma; False = prosegue con il passo dopo

▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

Gli script

Script 1 — Estrarre un frame ogni 2 secondi

1_estrai_fotogrammi.py usa FFmpeg per estrarre un fotogramma ogni 2 secondi, ridimensionato a WIDTH = 768 px. I risultati vanno in frames/nome_clip/ con un file meta.json. Se rilanci, elabora solo i clip nuovi. Con USE_CUDA = True usa la GPU; in caso di errore passa da solo alla CPU.

Script 2 — Riconoscere le scene statiche

Misura il movimento in ogni clip secondo per secondo, per evitare che le scene ferme — hovering, decollo, atterraggio — finiscano nel montaggio. Va eseguito dopo lo script 1.

Facoltativo ma consigliato: senza questi dati lo script 5 scarta comunque i primi 4 e gli ultimi 2 secondi, ma non rileva i tratti fermi a metà ripresa.

Script 3 — Dare un punteggio ai frame

Manda i frame al modello a blocchi (CHUNK = 10). Per ogni frame: voto 1–10, tipo di inquadratura, breve nota. Salva in punteggi/ schede riutilizzabili — se cambi musica non devi rifare questo passo. Con GESTISCI_OLLAMA = True avvia e chiude Ollama automaticamente, liberando la VRAM.

Script 4 (facoltativo) — Prompt per generare la musica

4_prompt_musica.py mostra al modello i frame migliori e propone descrizione musicale, BPM e tonalità. Il risultato va in musica/prompt.txt da incollare in un generatore (ACE-Step o simili). Nella CONFIG, DURATA_VIDEO è la durata del video (la usa anche lo script 5) e DURATA_MUSICA quella del brano da generare: conviene lasciare qualche secondo in più del video. Se attivi il passo 4, il processo si mette in pausa per farti copiare il brano come musica.mp3.

Script 5 — Il montaggio e il file per DaVinci Resolve

I tempi musicali e la selezione dei momenti li decide Python, non il modello. Lo script trova i battiti, decide i tagli e assegna alle parti più energetiche le inquadrature con il punteggio più alto.

Variabili principali

  1. DURATA_VIDEO — durata del video finale in secondi
  2. MUSICA_INIZIO — "auto" (predefinito): il video parte sul primo battito forte del brano, così i tagli cadono a tempo; oppure un secondo preciso, per esempio 12.5
  3. BEAT_PER_TAGLIO — "auto" oppure numero intero (es. 4 = un taglio ogni 4 battiti)
  4. DURATA_MIN_TAGLIO / DURATA_MAX_TAGLIO — lunghezza minima e massima dei tagli in secondi
  5. RIUSO_PENALITA — più alto = più varietà tra clip diversi
  6. SCARTA_INIZIO / SCARTA_FINE / MOVIMENTO_MIN — secondi scartati a inizio/fine e soglia movimento
  7. ANTEPRIMA — True per generare un video di anteprima a 720p

Lo script produce montaggio.fcpxml (consigliato, include la musica) e montaggio.edl (alternativa semplificata) nella cartella montaggio/.

Importazione in DaVinci Resolve

  1. File → Import → Timeline → scegli montaggio.fcpxml.
  2. I dischi con i video devono essere collegati. La musica è già nella timeline.
  3. Se l'audio è vuoto, trascina musica.mp3 sulla timeline dal secondo indicato dallo script nel messaggio "Partenza automatica" (o da MUSICA_INIZIO, se l'hai impostato a mano).
  4. Usa l'EDL solo se l'FCPXML dà problemi (clip già nel Media Pool).

Importazione in Final Cut Pro (non testato)

  1. File → Import → XML

Importazione in Abobe Premiere Pro* (non testato)

  1. File → Import

*purtroppo su premiere funziona solo il file .EDL, quindi bisognerà importare a mano le clip e la musica all'interno del progetto

    Limiti da conoscere: il rilevamento battiti può sbagliare su ritmi irregolari — prova BEAT_PER_TAGLIO = 4. Su ambient o jazz può servire un aggiustamento manuale. Video non raggiungibili (disco scollegato) vengono segnalati e ignorati.

    Script 6 (facoltativo) — Uniformare esposizione e bilanciamento del bianco

    6_correzione_colore.py misura luminosità e dominante di colore di ogni taglio e calcola un guadagno per canale (R, G, B). ESPOSIZIONE_FORZA e WB_FORZA regolano l'intensità (0–1); CLIP_RIFERIMENTO permette di usare un clip specifico invece della mediana.

    Avvertenza Resolve: applica la correzione sul nodo del clip, prima della conversione a Rec.709 (che va sul nodo della timeline).

    Script 7 (facoltativo) — Applicare le correzioni in Resolve

    Richiede DaVinci Resolve Studio. Copia il file in

    %APPDATA%\Blackmagic Design\DaVinci Resolve\Support\Fusion\Scripts\Edit

    , poi in Resolve: Workspace → Scripts → Edit → 7_applica_resolve. Lanciato dal menu di Resolve, lo script non riceve le impostazioni di avvia_montaggio.py: se serve, apri il file e modifica CORREZIONI (percorso di correzioni.json) e METODO. Con METODO = "lut" usa i file .cube invece dei valori CDL. Resolve lo esegue con il Python installato sul PC (non con l'ambiente virtuale) e non servono librerie aggiuntive.

    ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

    Ordine di esecuzione

    Il modo più semplice è un solo comando dalla cartella di progetto:

    python avvia_montaggio.py
    python avvia_montaggio.py --da 3 # riprende dal passo 3
    python avvia_montaggio.py --solo 5 # esegue solo il passo 5

    Oppure i singoli script manualmente:

    python 1_estrai_fotogrammi.py
    python 2_movimento.py
    python 3_punteggi_qwen.py
    python 4_prompt_musica.py # facoltativo
    python 5_montaggio_musica.py
    python 6_correzione_colore.py # facoltativo

    Lo script 7 si lancia dall'interno di DaVinci Resolve dopo aver importato la timeline.

    ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

    Conclusioni

    Il punto di forza è la divisione dei compiti: Python gestisce musica, tempi e selezione dei tagli (dove serve precisione); il modello guarda le immagini e ne giudica la qualità (dove serve giudizio).

    Con 12 GB di VRAM e un modello da 9B il risultato è già utilizzabile come prima bozza da rifinire in DaVinci. Potete fare tutto in background mentre usate il PC per altro (no gaming ovviamente!).

    Tempi di riferimento

    Test su ~10 GB di video DJI Mini 4 Pro, modello qwen3.8:27B, usando scheda video con 24GB onboard:

    1. Passo 1 — Estrazione fotogrammi: 1 min 57 s
    2. Passo 2 — Misura del movimento: 2 min 5 s
    3. Passo 3 — Punteggi fotogrammi: 7 min 56 s
    4. Passo 5 — Montaggio: 4 s
    5. Passo 6 — Correzione colore: 1 s
    6. Totale: 12 min 4 s

    Fondamentale è la scelta musicale o la generazione della stessa in base alle scene. Lo vedremo in un articolo successivo.


    Scarica gli script: script_montaggio_qwen3.5_9b.zip

    Consiglia

    Ricevi i prossimi articoli

    Novità sui droni, normativa ENAC, eventi e contest: una mail ogni tanto, niente spam.

    Condividi: Facebook WhatsApp Telegram

    Commenti (0)

    Caricamento commenti...

    Articoli correlati