Guida #6

Motion graphics gratis: video animati senza After Effects

Motion graphics gratis per Reels e TikTok: titoli animati e recap con una pagina HTML, Chrome e ffmpeg, senza After Effects. Prompt provati e kit pronto.

Fabio De Giovine · 35 min lettura · PREMIUM

Motion graphics gratis: cosa puoi fare (e il video di prova da 15 secondi)

Le motion graphics sono scritte, numeri e forme che si muovono a tempo di musica: i titoli che entrano lettera per lettera, il video che si vede dentro una parola, i numeri che salgono. Si fanno gratis anche senza After Effects: prepari una pagina web che si disegna in base al tempo, Chrome la fotografa fotogramma per fotogramma e ffmpeg monta le foto in un video verticale con la musica. Un'IA ti scrive la pagina; tre programmi gratuiti (Chrome, Node e ffmpeg) fanno il resto, senza abbonamenti né crediti.

Se ti basta un video con una persona che parla e due scritte, usa CapCut o Canva. Questa strada serve quando vuoi un video «da agenzia» che rifai ogni settimana, o ogni mese, cambiando solo i testi.

Ecco cosa esce. È il recap di 15 secondi del bar «Da Rosa» di Palermo, fatto con il kit di questa guida partendo da zero. Il bar è inventato, e lo sono anche le «riprese»: sono disegni fatti in codice che prendono il posto dei video girati col telefono. Numeri e testi sono finti.

Cinque secondi del recap animato del bar Da Rosa: il mosaico di tessere che si apre, la parola CAFFÈ con il video dentro le lettere, i tagli a ritmo sulle clip del bar e il cartello arancione GRAZIE
Cinque secondi del recap, da 2,3 a 7,3 s, in piccolo e a 15 fotogrammi al secondo: il video vero è più nitido e più fluido.

E qui il video intero in un colpo d'occhio: un fotogramma ogni secondo, con il tempo scritto sotto. È il «foglio di controllo», lo strumento che userai anche tu per vedere un video senza guardarlo dieci volte.

Foglio di controllo del recap: quindici fotogrammi da 0,5 a 14,5 secondi. Il mosaico di tessere che forma 2026 con IL NOSTRO OTTOBRE e DA ROSA, la tazza di caffè, UN MESE DI CAFFÈ, l'insegna al neon Da Rosa con il contatore 02 su 11, il cartello GRAZIE, la finestra I MOMENTI, i numeri 1.240 caffè serviti e 86 cornetti al giorno, la chiusura GRAZIE CI VEDIAMO A NOVEMBRE
Il foglio di controllo del recap da 15 secondi: mosaico, titolo con il video dentro le lettere, tagli a ritmo, finestra, numeri e chiusura.

Le misure, prese da noi il 31/10/2026 su un PC Windows 11 con processore AMD Ryzen 7 5800X3D (8 core) e 32 GB di memoria: il video dura 15,000 secondi, è 1080×1920 a 60 fotogrammi al secondo, pesa 20,9 MB e ha l'audio a −14,1 LUFS (è la misura del volume percepito: più avanti trovi perché proprio quella). Il kit l'ha fatto in circa un minuto e mezzo e ha trovato da solo 28 punti di taglio sui colpi della musica. Su un portatile meno potente ci vuole di più: non l'abbiamo misurato.

Con questo metodo ottieni:

  • titoli cinetici (in inglese kinetic typography): lettere che arrivano una dopo l'altra, sfocate, e si fermano con una curva;
  • il video dentro le lettere: la parola «CAFFÈ» riempita dalla clip del cornetto;
  • tagli a tempo di musica, con transizioni come la frusta, le strisce, il cerchio, il lampo;
  • numeri che salgono, con il punto delle migliaia;
  • una chiusura con l'invito o l'indirizzo, e nei modelli del kit anche un telefono con dentro una pagina vera e il trailer del tuo sito.

E After Effects? Resta lo strumento dei professionisti, ma si usa solo in abbonamento: sulla pagina ufficiale di Adobe l'app singola costa 26,64 euro al mese IVA inclusa, con piano annuale e addebito mensile (verificato a ottobre 2026). Per i video social di un bar, di un negozio o di una parrucchiera, quasi tutto quello che serve si fa senza.

Quando serve e quando basta CapCut o Canva

La domanda giusta non è «quale programma», è «quante volte lo rifaccio». Se il video è uno e parla una persona, l'app del telefono vince. Se la grafica è la stessa ogni settimana e cambiano solo testi e clip, scrivere la pagina una volta conviene.

Sì, ha sensoNo, basta altro
Il recap del mese del bar di Palermo: le clip del mese, «UN MESE DI CAFFÈ», i caffè serviti, «ci vediamo a novembre».Il video parlato: tu davanti al bancone che spieghi il menù, con due sottotitoli. Lì bastano CapCut o Canva.
Le novità della settimana del negozio di abbigliamento di Bari, con la stessa grafica ogni lunedì.Chi non vuole installare niente sul computer, o lavora solo dal telefono.
I numeri dell'anno della palestra («1.240 allenamenti», «38 nuovi iscritti») che salgono a tempo.Un video al volo per oggi pomeriggio: un modello dell'app fa prima.
I titoli animati da mettere sopra un video girato col telefono dalla parrucchiera di Bologna.Chi cerca il video che si «inventa» da solo da una frase: questo metodo anima testi e clip tue, non genera filmati.
Una mini serie: tre puntate con la stessa sigla, lo stesso ritmo, la stessa chiusura.Chi vuole imparare il motion design come mestiere: meglio un programma vero (vedi Cavalry qui sotto).

Le alternative, dette oneste (tutte verificate a ottobre 2026):

  • CapCut: il piano Free ha modelli gratuiti e strumenti di base; modelli premium e crediti IA sono a pagamento (prezzi di CapCut). La funzione Auto Cut taglia a tempo di musica su telefono e computer, non nella versione web (guida di CapCut). È la strada più veloce per il video parlato.
  • Canva Gratis: l'editor video ha animazioni, transizioni e sottotitoli animati, ed esporta in MP4 senza filigrana se usi solo elementi gratuiti (editor video di Canva).
  • Cavalry: un programma vero di motion design, gratis per le persone singole su Mac e Windows con un account Canva (sito di Cavalry). Se vuoi imparare il mestiere, è da lì che parti.
  • Claude Motion: Claude fa animazioni brevi scrivendo codice e le esporta in MP4, senza un modello che genera video; oggi è in beta solo sui piani Team ed Enterprise (centro assistenza di Claude). È la stessa idea di questa guida, ma non per chi usa Claude da solo o con il piano gratuito.
  • Remotion e HyperFrames: progetti per fare video con il codice, pensati per chi programma. Remotion è gratis per le persone singole e per le aziende fino a 3 dipendenti, oltre serve una licenza a pagamento (licenza di Remotion); HyperFrames ha licenza Apache 2.0 e usa anche lui Node, Chrome senza finestra e ffmpeg (HyperFrames su GitHub). Il kit di questa guida segue lo stesso principio, con file più semplici da cambiare.

Prima del come, il perché: se non hai ancora deciso dove pubblicare, leggi TikTok per le aziende, spiegato per chi parte da zero. E il video è il come: cosa pubblicare e con quale copione lo prepari con la guida alla strategia social con l'IA.

Come funziona: una pagina che si muove con il tempo, Chrome che la fotografa, ffmpeg che monta

Pensa a un cartone animato vecchio stile: tanti disegni fermi, uno diverso dall'altro, che passati veloci sembrano muoversi. Qui i disegni li fa una pagina web. La pagina sa disegnare «il secondo 2,35» quando glielo chiedi: è una funzione che si chiama render(t), dove t sono i secondi.

  1. La pagina: grande 1080×1920 pixel, con i tuoi testi, colori e clip. Per ogni istante calcola dove sta ogni cosa: al secondo 0,5 il titolo è ancora in basso e trasparente, al secondo 1 è arrivato.
  2. Chrome senza finestra: Chrome può girare senza interfaccia visibile, la modalità che si chiama headless (documentazione di Chrome, verificato a ottobre 2026). Un piccolo programma lo guida attraverso il suo «telecomando», il DevTools Protocol, che ha un comando apposta per fotografare la pagina (DevTools Protocol). Chiede il secondo 0 e scatta, chiede 1/60 di secondo dopo e scatta, e così via. Il kit riprende a 60 fotogrammi al secondo: 15 secondi fanno 900 foto.
  3. ffmpeg: un programma gratuito che lavora sui video da terminale (licenza LGPL 2.1 per la maggior parte dei file, licenza di ffmpeg). Legge le foto numerate in ordine (formato image2), le monta in un MP4 e ci mette sotto la musica.

Perché tutto dipende da t. Le animazioni normali del web (quelle scritte in CSS, o con i timer) partono da sole e vanno con l'orologio del computer. Ma Chrome, quando fotografa, va piano: ci mette più di un sessantesimo di secondo per ogni foto. Un'animazione che parte da sola, ripresa così, viene storta: salti, scatti, velocità sbagliate. Se invece la pagina disegna ogni istante solo quando glielo chiedi, ogni foto è esatta, sempre uguale, e puoi rifare un solo istante per controllarlo. Il kit, nella nostra prova, ha usato 6 Chrome insieme, ognuno su un pezzo del video: funziona proprio perché ogni fotogramma dipende solo da t.

Cosa ti serve, tutto gratis:

  • Google Chrome, per Windows e Mac dal sito ufficiale.
  • Node.js 22 o più recente: a ottobre 2026 la versione LTS (quella stabile, da scegliere) più recente è la 26 (versioni di Node.js). La 22 è il minimo perché il kit parla con Chrome usando WebSocket, che dentro Node è stabile dalla 22.4 (documentazione di Node.js).
  • ffmpeg: il sito ufficiale distribuisce solo il codice sorgente e per Windows rimanda alle versioni pronte di gyan.dev e BtbN (download di ffmpeg). Su Windows il modo più rapido è winget install Gyan.FFmpeg in PowerShell; su Mac, con Homebrew, brew install ffmpeg.

Gli strumenti sono gli stessi della pagina che scorre come l'iPhone: se l'hai seguita, Chrome e ffmpeg li hai già.

Il formato. Facciamo tutto in 1080×1920, verticale 9:16. È una scelta nostra, coerente con le pagine ufficiali: Instagram accetta reel con proporzioni da 1,91:1 a 9:16, almeno 30 fotogrammi al secondo e almeno 720 pixel (aiuto di Instagram); TikTok consiglia il verticale 9:16 per le inserzioni video (specifiche di TikTok); YouTube tratta come Short i video verticali o quadrati fino a 3 minuti (aiuto di YouTube) e li accetta fino a 1080p (aiuto di YouTube). Nessuna di queste pagine dice «1080×1920 obbligatorio»: è la misura che va bene ovunque.

Le 6 regole del movimento

Sono le regole che il kit rispetta da solo e che ti conviene chiedere a qualunque IA ti scriva una pagina animata. Valgono anche se fai i video con CapCut.

  1. Tutto dipende dal tempo. Il video è una pagina che sa disegnarsi a qualunque secondo: «al secondo 1,3 la scritta è qui, al secondo 1,4 è lì». Niente animazioni che partono da sole. Così il risultato è sempre identico e puoi rifare un solo istante per controllarlo.
  2. Mai a scatto. Ogni cosa che entra o esce lo fa con una curva di velocità: parte decisa e frena, come una porta che si chiude piano. Per i movimenti di camera la curva accelera e frena; per i «pop» va un poco oltre e torna. Una scritta che compare dal nulla in un fotogramma sembra un errore, non una scelta.
  3. Sul ritmo. I cambi di scena cadono sui colpi della musica. Il kit li trova da solo ascoltando il brano; un taglio fuori tempo di un decimo di secondo si sente anche se non sai dire perché.
  4. Una cosa forte alla volta. Se il video sotto ha già scritte o è molto movimentato, la tua scritta va su una fascia scura o su uno sfondo sfocato. Una scritta grande per volta, una transizione per volta.
  5. Lascia libero il bordo. In alto ci sono il nome del profilo e i pulsanti, in basso la didascalia e la musica, a destra cuori e condivisioni. I modelli del kit tengono le scritte fra circa 250 px dall'alto e 400 px dal basso, su un video alto 1920, e lontane dal bordo destro. Per le inserzioni nei reel Meta chiede margini più larghi: niente testi e loghi nel 14% in alto, nel 35% in basso e nel 6% ai lati, cioè circa 269, 672 e 65 pixel su 1080×1920 (guida alle inserzioni di Meta, verificato a ottobre 2026). Se il video diventa una pubblicità, alza le scritte basse. TikTok, nelle specifiche delle sue inserzioni, avvisa che la zona libera cambia con la lunghezza della didascalia e sconsiglia gli sfondi bianchi, perché nome e didascalia sono scritti in bianco (aiuto di TikTok).
  6. Controlla prima di fare il video intero. Prima si fotografano una ventina di istanti e si guardano tutti insieme in un'immagine sola, il foglio di controllo. È lì che si vedono le scritte sovrapposte e le parole troppo lunghe. Per ogni cambio di scena si guardano due fotogrammi subito dopo il taglio.

moto.js in breve

Nel kit il movimento lo fa moto.js: una piccola libreria di 137 righe, senza dipendenze, che si carica nella pagina del video e si usa come M. Ogni funzione riceve il tempo t e calcola dove deve stare una cosa in quell'istante. Eccole tutte:

M.p(t, a, b)                                   // avanzamento da 0 a 1 fra i secondi a e b (0 prima, 1 dopo)
M.tra(t, t0, t1, da, a, M.e.outExpo)           // un valore che va da `da` ad `a` fra t0 e t1, con una curva
M.chiavi(t, [[0, 0], [1, 300, M.e.outBack], [2, 0]])   // fotogrammi chiave: [secondo, valore, curva per arrivarci]
M.muovi(el, {x, y, s, r, o, blur})             // sposta, ingrandisce, ruota, sfuma e sfoca un elemento in un colpo
M.lettere(el, 'TESTO')                         // divide un testo in lettere (o 'parole') e restituisce gli span
M.cascata(spans, t, {da, passo, y, s, r, blur, ordine: 'centro'|'caso', uscita: {da}})   // entrata (e uscita) a cascata
M.decifra(el, 'TESTO', t, da, dur)             // lettere a caso che si sistemano
M.contatore(el, t, da, dur, 120, {dopo: ' €'}) // numero che sale, con il punto delle migliaia
M.scrivi(el, 'testo', t, da, 22)               // macchina da scrivere con il cursore
M.tendina(p, 'sinistra'), M.cerchio(p), M.rombo(p), M.diagonale(p)   // maschere da 0 a 1
M.colpo(t, M.ritmo.battiti, .25)               // 1 sul battito della musica, poi scende a 0
M.scuoti(t, forza)                             // camera a mano, tremolio morbido e ripetibile
new M.Clip('clip', voce).url(tl)               // il fotogramma di una clip video al secondo tl
M.mostra(div, url, true)                       // un fotogramma come sfondo: così il video sta dentro le lettere
M.scene([{da, a, el, disegna(t, tl, p)}])      // divide il video in scene e restituisce render(t)
M.adatta(el, 1000)                             // rimpicciolisce un testo che non ci sta e lo segnala

Detto a parole, le più usate:

  • M.tra porta un valore da A a B con una curva: «il titolo sale da 120 pixel più in basso fino al suo posto, fra 0,2 e 0,8 secondi».
  • M.lettere più M.cascata fanno entrare le lettere una dopo l'altra, anche dal centro verso i lati o in ordine casuale.
  • M.contatore è il numero che sale; M.scrivi la riga scritta a macchina.
  • M.mostra mette un fotogramma di una clip come sfondo di una parola: è il trucco del video dentro le lettere.
  • M.colpo vale 1 sul battito della musica e poi scende: serve per i «pugni» di zoom e i lampi a tempo.
  • M.adatta rimpicciolisce un testo troppo lungo invece di farlo uscire dallo schermo, e te lo dice.
Fotogramma del recap a 3,6 secondi: la scritta UN MESE DI e sotto la parola CAFFÈ enorme, con dentro le lettere il video del cornetto, un contorno arancione sfalsato e la riga al bar Da Rosa, Palermo, su una tazza sfocata
Il video dentro le lettere: è M.mostra che riempie «CAFFÈ» con la clip del cornetto (secondo 3,6 del recap).

Non serve impararle a memoria: un assistente IA le usa per te. Ma sapere che esistono ti fa chiedere le cose giuste: «fai entrare il titolo a cascata dal centro», «metti il video dentro la parola», «fai salire il numero sul secondo colpo».

Se conosci già GSAP, la libreria di animazione più diffusa sul web, puoi usare quella: è gratuita per tutti, anche per uso commerciale, con la sua licenza standard (licenza di GSAP, verificato a ottobre 2026), e l'ultima versione è la 3.15.0 (registro npm). Costruisci l'animazione in pausa e dentro render(t) la porti al secondo giusto con seek(t). Il kit non la usa: in REGOLE.md trovi solo l'indirizzo per caricarla da internet, con la versione scritta per intero.

Passo 1: la pagina con un titolo che entra (a mano, senza kit)

Adesso lo fai tu, senza kit, così vedi che non c'è magia. Il risultato: una pagina 1080×1920 con il nome della tua attività che sale dal basso e frena, fra 0,2 e 1,0 secondi, e una riga sotto che arriva subito dopo. Sotto la pagina c'è un cursore per trascinare il tempo e provarla nel browser.

Crea una cartella, per esempio titolo-animato sul Desktop. Apri il Blocco note (o, meglio, Visual Studio Code, gratuito), incolla il codice qui sotto, cambia i testi e i colori, e salvalo nella cartella come titolo.html (nel Blocco note: Tipo «Tutti i file», Codifica «UTF-8»).

<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8">
<title>Titolo animato</title>
<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=DM+Sans:wght@500&display=block" rel="stylesheet">
<style>
  body { margin: 0; background: #000; }
  #video { position: relative; width: 1080px; height: 1920px; overflow: hidden; background: #1a1210; color: #fff4e6; }
  .anteprima #video { zoom: 0.4; }                 /* nel browser lo vedi rimpicciolito */
  #nome { position: absolute; top: 760px; width: 100%; text-align: center; font: 240px/1 'Bebas Neue', sans-serif; }
  #riga { position: absolute; top: 1020px; width: 100%; text-align: center; font: 500 56px 'DM Sans', sans-serif; color: #ff8a3d; }
  #prova { width: 432px; margin: 12px; }
</style>
</head>
<body>
<div id="video">
  <div id="nome">DA ROSA</div>
  <div id="riga">il bar di quartiere, a Palermo</div>
</div>
<input id="prova" type="range" min="0" max="3" step="0.01" value="0">
<script>
  const p = (t, a, b) => Math.min(1, Math.max(0, (t - a) / (b - a)));   // da 0 a 1 fra i secondi a e b
  const frena = x => 1 - Math.pow(1 - x, 4);                            // parte decisa e frena all'arrivo
  const nome = document.getElementById('nome');
  const riga = document.getElementById('riga');

  window.render = t => {                          // disegna il video al secondo t, tutto dipende da t
    const a = frena(p(t, 0.2, 1.0));              // il nome entra fra 0,2 e 1,0 secondi
    nome.style.opacity = a;
    nome.style.transform = `translateY(${(1 - a) * 220}px) scale(${0.85 + 0.15 * a})`;
    const b = frena(p(t, 0.9, 1.5));              // la riga sale fra 0,9 e 1,5 secondi
    riga.style.opacity = b;
    riga.style.transform = `translateY(${(1 - b) * 60}px)`;
  };
  window.ready = document.fonts.ready;            // chi fotografa aspetta i caratteri

  const prova = document.getElementById('prova');
  if (location.search.includes('cattura')) prova.remove();
  else document.body.classList.add('anteprima');
  prova.oninput = () => render(Number(prova.value));
  render(Number(prova.value));
</script>
</body>
</html>

Le righe che contano sono tre:

  • p(t, a, b) dice «a che punto sono» fra due istanti: 0 prima di a, 1 dopo b, in mezzo un valore che cresce.
  • frena è la curva: trasforma quell'avanzamento in un movimento che parte veloce e rallenta all'arrivo. Con l'esponente 4 frena molto; prova 2 per un movimento più morbido.
  • window.render usa solo t per decidere posizione, grandezza e trasparenza. Niente transition CSS, niente setTimeout: è la regola 1.

Come provarla. Doppio clic su titolo.html: si apre nel browser, rimpicciolita, con il cursore sotto. Trascinalo da sinistra a destra: il nome sale e si ferma, poi arriva la riga. Vuoi che entri più tardi o più piano? Cambia 0.2, 1.0 (inizio e fine) e 220 (da quanto in basso parte). I caratteri arrivano da Google Fonts: serve la connessione.

Questa pagina l'abbiamo provata il 31/10/2026 in Chrome: con il cursore a 0, 0,6, 1,2 e 3 secondi il nome è invisibile, quasi arrivato, fermo e fermo; la riga compare solo dopo il secondo 0,9. Nessun errore nella pagina.

I colori del tuo logo, e una scritta che si legge

I codici dei colori (come #ff8a3d) li ricavi dal logo con l'estrattore di colori dei tool gratuiti per immagini del sito: carichi il logo nel browser, senza mandarlo da nessuna parte, e copi i codici. Poi controlla che testo e fondo si leggano con il test di contrasto dei colori: sul telefono, al sole, una scritta grigia su marrone sparisce.

Se preferisci fartela scrivere su misura, usa questo prompt. L'abbiamo provato con il caso del bar di Palermo: alla prima prova la pagina funzionava ma aveva 16 pixel di margine grigio in cima, che finivano in ogni fotogramma; abbiamo aggiunto la riga sul riquadro «attaccato all'angolo» e alla seconda prova la pagina, fotografata con lo script del passo 2, era pulita.

Prompt: la pagina con il titolo che entra

Contesto: ho un'attività: [COSA FAI E DOVE, es. un bar di quartiere a Palermo]. Faccio da solo i video per Instagram e TikTok. Voglio un titolo animato di [SECONDI, es. 3] secondi da mettere all'inizio dei miei reel, fatto come pagina web che poi trasformo in video fotografandola fotogramma per fotogramma con Chrome. Testi: titolo "[TITOLO]", riga sotto "[RIGA SOTTO]". Colori del mio logo: fondo [CODICE], testo [CODICE], accento [CODICE]. Caratteri: [UN CARATTERE DI GOOGLE FONTS PER IL TITOLO E UNO PER LA RIGA, oppure "scegli tu: alto e stretto per il titolo"]. So copiare e incollare file, non so programmare. Compito: scrivimi una pagina HTML unica (titolo.html) con un riquadro video grande esattamente 1080x1920 pixel. Il codice deve: - esporre una funzione window.render(t) che disegna il riquadro al secondo t: ogni posizione, trasparenza e grandezza si calcola solo da t; - non usare animazioni CSS, transizioni CSS, setTimeout, setInterval né requestAnimationFrame, perché la pagina verrà fotografata un fotogramma alla volta; - far entrare il titolo dal basso fra 0,2 e 1,0 secondi, con una curva che parte decisa e frena all'arrivo (scritta a mano, senza librerie), e far salire la riga sotto fra 0,9 e 1,5 secondi; - tenere le scritte nella fascia centrale, ad almeno 250 px dall'alto e 400 px dal basso, perché sopra e sotto l'app copre lo schermo; - caricare i caratteri da Google Fonts con display=block ed esporre window.ready = document.fonts.ready; - quando l'indirizzo contiene ?cattura: riquadro a grandezza piena, attaccato all'angolo in alto a sinistra della pagina (nessun margine, nessuna barra di scorrimento), e niente altro visibile; - senza ?cattura: riquadro rimpicciolito così sta nello schermo, e sotto un cursore (input range da 0 a [SECONDI], passo 0,01) per provare l'animazione trascinando il tempo. La risposta deve contenere: il file completo in un solo blocco di codice, commentato in italiano; poi come lo provo aprendolo con doppio clic; poi quali numeri cambio per far entrare il titolo più piano o più tardi. Vincoli: in italiano; niente librerie esterne oltre ai caratteri di Google Fonts; al massimo 70 righe.

Passo 2: fotografarla e montarla in un MP4 con la musica

Ora la pagina diventa un video. Serve un piccolo programma che apre la pagina in Chrome senza finestra, chiede render(0), scatta, chiede render(1/30), scatta, e così via; poi ffmpeg monta le foto. Per la prova usiamo 30 fotogrammi al secondo (il kit ne usa 60: più fluido, il doppio delle foto).

Per pilotare Chrome usiamo Puppeteer, una libreria gratuita con licenza Apache 2.0 che guida Chrome senza finestra attraverso il DevTools Protocol (sito di Puppeteer, versione 25.16.0 sul registro npm, verificato a ottobre 2026). Nella versione «core» usa il Chrome che hai già, senza scaricarne un altro: nella nostra prova l'installazione ha preso 4 secondi e 32 MB.

  1. Installa Node.js da nodejs.org (la versione «LTS») e ffmpeg (Windows: winget install Gyan.FFmpeg in PowerShell; Mac: brew install ffmpeg). Chiudi e riapri il terminale, poi controlla: node --version deve dire v22 o più, ffmpeg -version deve rispondere con una riga che comincia per «ffmpeg version».
  2. Apri il terminale nella cartella di titolo.html. Windows: apri la cartella, clic nella barra dell'indirizzo, scrivi powershell, Invio. Mac: tasto destro sulla cartella, «Nuovo Terminale nella cartella».
  3. Prepara la cartella con due comandi: npm init -y e poi npm install puppeteer-core. Se PowerShell risponde che l'esecuzione di script è disabilitata, scrivi npm.cmd al posto di npm.
  4. Salva lo script qui sotto come riprendi.mjs nella stessa cartella e lancialo con node riprendi.mjs.
// riprendi.mjs: apre titolo.html in Chrome senza finestra e la fotografa fotogramma per fotogramma
import puppeteer from 'puppeteer-core';
import { mkdirSync } from 'node:fs';
import { resolve } from 'node:path';
import { pathToFileURL } from 'node:url';

const PAGINA = 'titolo.html';
const DURATA = 3;   // secondi di video
const FPS = 30;     // fotogrammi al secondo

mkdirSync('fotogrammi', { recursive: true });
const browser = await puppeteer.launch({ channel: 'chrome' });   // usa il Chrome che hai già
const page = await browser.newPage();
await page.setViewport({ width: 1080, height: 1920 });
await page.goto(pathToFileURL(resolve(PAGINA)).href + '?cattura', { waitUntil: 'networkidle0' });
await page.evaluate(() => window.ready);                          // aspetta i caratteri

const totale = Math.round(DURATA * FPS);
for (let i = 0; i < totale; i++) {
  await page.evaluate(t => window.render(t), i / FPS);              // porta la pagina al secondo i/FPS
  const file = 'fotogrammi/f' + String(i + 1).padStart(4, '0') + '.png';
  await page.screenshot({ path: file, clip: { x: 0, y: 0, width: 1080, height: 1920 } });
}
await browser.close();
console.log(`Fatto: ${totale} fotogrammi nella cartella fotogrammi`);

Alla fine scrive «Fatto: 90 fotogrammi». Prima di montare, guarda tre foto nella cartella fotogrammi: f0001.png (deve essere vuota, il titolo non è ancora entrato), f0015.png (a metà strada), f0090.png (tutto fermo al suo posto). Se i caratteri sono sbagliati, mancava la connessione; se vedi bordi o il cursore, la pagina non nasconde il cursore con ?cattura.

Poi metti nella cartella la musica (musica.mp3) e monta:

ffmpeg -framerate 30 -i fotogrammi/f%04d.png -i musica.mp3 -c:v libx264 -pix_fmt yuv420p -crf 18 -c:a aac -b:a 192k -shortest titolo.mp4
  • -framerate 30 -i fotogrammi/f%04d.png: le foto, lette in ordine, 30 al secondo.
  • -c:v libx264 -pix_fmt yuv420p -crf 18: video H.264 in un formato di colore che si apre ovunque, di buona qualità (più basso il numero dopo crf, più qualità e più peso).
  • -c:a aac -b:a 192k -shortest: la musica in AAC, tagliata alla durata del video.

E il foglio di controllo, un fotogramma ogni 10 messi in fila in un'immagine sola:

ffmpeg -i titolo.mp4 -vf "select='not(mod(n\,10))',scale=216:-1,tile=9x1" -frames:v 1 -fps_mode vfr foglio.png

Tutto provato il 31/10/2026 sullo stesso PC delle misure in alto: 90 fotogrammi in 9 secondi, Chrome compreso, e un MP4 di 3 secondi, 1080×1920 con l'audio, da 167 KB. Il foglio mostrava il nome che sale e si ferma e la riga arancione che arriva dopo, con i caratteri giusti.

La musica. Usa solo musica che hai il diritto di usare: un brano tuo, uno con licenza per i social, oppure niente, e la aggiungi dopo dentro l'app scegliendola dalla sua libreria. Per i dubbi sui diritti, chiedi a un professionista. Il kit, per non avere problemi, genera da solo una base musicale in codice.

Il limite onesto. Così ottieni un titolo animato con la musica sotto, in un pomeriggio. Tagli agganciati ai colpi della musica, transizioni, clip dentro le lettere, effetti sonori sugli stacchi e volume giusto sono il lavoro del kit. Sul volume, una nota: il kit porta il video finito a −14 LUFS con il picco sotto −1 dB. È una nostra scelta, lo stesso livello a cui Spotify porta la musica (Spotify, verificato a ottobre 2026): TikTok e Instagram non pubblicano un valore ufficiale.

Anche questo passo te lo puoi far spiegare su misura. Il prompt qui sotto l'abbiamo provato con il caso del bar, su Windows 11: lo script e i comandi usciti, copiati così com'erano, hanno dato 90 fotogrammi, un MP4 1080×1920 con l'audio e il foglio di controllo.

Prompt: dalla pagina al video con la musica

Contesto: ho una pagina HTML, titolo.html, con un riquadro video grande 1080x1920 pixel in alto a sinistra, che espone window.render(t) (disegna la pagina al secondo t) e window.ready (una promessa che si risolve quando i caratteri sono pronti). Se l'indirizzo contiene ?cattura, il cursore di prova sparisce e il riquadro si vede a grandezza piena. Voglio trasformarla in un video verticale di [SECONDI] secondi per Reels e TikTok, con sotto la musica [NOME DEL FILE, es. musica.mp3], che ho il diritto di usare. Il mio computer è [WINDOWS 11 / MAC], ho Google Chrome installato. Non so usare il terminale. Compito: spiegami passo per passo come fotografare la pagina un fotogramma alla volta e montare le foto in un MP4 con la musica. La risposta deve contenere: 1. come installo Node.js (versione LTS) e ffmpeg sul mio sistema, e come controllo che funzionino; 2. come apro il terminale nella cartella di titolo.html e preparo la cartella con npm init -y e npm install puppeteer-core; 3. uno script riprendi.mjs che apre la pagina con Puppeteer usando il Chrome che ho già (channel: 'chrome'), senza finestra, a 1080x1920, aggiunge ?cattura all'indirizzo, aspetta window.ready, e per ogni fotogramma chiama window.render(i / 30) e salva un PNG numerato fotogrammi/f0001.png, f0002.png... (30 fotogrammi al secondo per la prova); 4. come controllo 3 fotogrammi (inizio, metà, fine) prima di fare il video; 5. il comando ffmpeg che monta le foto in MP4 H.264 con pix_fmt yuv420p e aggiunge la musica tagliata alla durata del video; 6. un comando ffmpeg che fa un foglio di controllo: un'immagine sola con un fotogramma ogni 10, in fila; 7. le 3 cose da controllare se il video è nero, se i caratteri sono sbagliati o se manca l'audio. Formato: passi numerati, ogni comando in un blocco di codice da copiare, sotto ogni comando una riga che spiega cosa fa. Vincoli: in italiano; niente programmi a pagamento né siti online; se ti manca un dato, chiedimelo prima di rispondere.

Domande frequenti sulle motion graphics

Cosa sono le motion graphics?

Sono grafiche in movimento: scritte, numeri, forme e loghi animati, spesso a tempo di musica. Nei video dei social sono i titoli che entrano lettera per lettera, le transizioni fra una clip e l'altra, i numeri che salgono e le chiusure con l'indirizzo. Non sono cartoni animati con personaggi: animano informazioni.

Si possono fare motion graphics gratis, senza After Effects?

Sì. Per cose semplici bastano le versioni gratuite di CapCut e Canva. Per un video «da agenzia» da rifare ogni mese si scrive una pagina web animata in funzione del tempo, la si fa fotografare fotogramma per fotogramma da Chrome senza finestra e si montano le foto con ffmpeg. Chrome, Node.js e ffmpeg sono gratuiti e il codice lo può scrivere un assistente IA.

Si possono creare video con Claude o ChatGPT?

Non come un generatore di filmati: Claude e ChatGPT scrivono il codice della pagina animata e i comandi per trasformarla in MP4, e il video lo fanno Chrome e ffmpeg sul tuo computer. Claude Motion, che esporta animazioni in MP4 scrivendo codice, a ottobre 2026 è in beta solo sui piani Team ed Enterprise. Con Claude Code, che parte dal piano Pro, l'assistente può anche lanciare i comandi al posto tuo.

Come si fa un video recap per Instagram?

Scegli da 6 a 10 clip brevi del mese girate col telefono, un titolo, due o tre numeri veri e una chiusura, poi monti tutto in verticale con i tagli a tempo di musica. Con CapCut si parte da un modello; con il metodo di questa guida scrivi i testi in un file e il kit fa tagli, transizioni, numeri e volume da solo. Prima di pubblicare guarda qualche fotogramma, controlla i numeri e i diritti della musica.

Come si fanno le scritte animate per i video?

Nelle app come CapCut e Canva scegli il testo e un'animazione di entrata dall'elenco. Per scritte su misura (lettere che arrivano una alla volta, il video dentro le lettere, una curva di velocità tua) si scrive una piccola pagina web in cui la posizione di ogni lettera dipende dal tempo, e la si trasforma in video con Chrome e ffmpeg. In tutti e due i casi ogni scritta deve entrare con una curva, mai a scatto, e stare lontana dai bordi che l'app copre.

Che misura deve avere un video per Reels, TikTok e Shorts?

Verticale 9:16: noi usiamo 1080x1920 perché va bene per tutte e tre. Secondo le pagine di aiuto ufficiali, verificate a ottobre 2026, Instagram accetta i reel fra 1,91:1 e 9:16 con almeno 30 fotogrammi al secondo, TikTok consiglia il 9:16 per le inserzioni e YouTube tratta come Short i video verticali o quadrati fino a 3 minuti. Tieni le scritte lontane dai bordi, dove l'app mette nome, didascalia e pulsanti.

L'assaggio del kit: il video più piccolo possibile

Con i due passi fatti a mano hai un titolo animato. Il kit della guida fa il resto: quattro modelli pronti (recap a ritmo, puntata con il telefono, sigla, trailer di un sito), moto.js, gli strumenti per riprendere, montare e controllare, la base musicale e 14 effetti sonori fatti in codice, gli esempi completi del bar Da Rosa e un agente per Claude Code.

Ecco un file vero del kit, intero: esempi/primo-titolo/timeline.html, il video più piccolo possibile. «BUON COMPLEANNO» entra lettera per lettera, poi una riga, un numero che sale fino a «10 ANNI» con un piccolo pop e una barra che si disegna, in 4 secondi. Guarda quanto è corto il render(t) con moto.js rispetto al passo 1. Funziona dentro la cartella del kit, perché carica /strumenti/moto.js e si fotografa con lo strumento del kit: il comando è nella terza riga. Nella prova da zero ha dato 240 fotogrammi in 13 secondi e un video di 158 KB.

Dal kit: il video più piccolo possibile

<!doctype html> <!-- Il primo video del kit: un titolo che entra lettera per lettera, una riga e un numero che sale. 4 secondi, 1080×1920. La regola è una sola: la pagina espone window.render(t) e disegna TUTTO in base a t (secondi). Niente animazioni CSS, niente timer. Così render.js può chiedere qualunque istante, in qualunque ordine, e ottenere sempre lo stesso fotogramma. Prova: node strumenti/render.js esempi/primo-titolo/timeline.html --durata 4 --video esempi/primo-titolo/primo-titolo.mp4 Kit «Video animati senza After Effects» - DG Designed, versione 1.0 (31/10/2026). --> <html lang="it"><head><meta charset="utf-8"><title>Primo titolo</title> <link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=DM+Sans:wght@500;700&display=block" rel="stylesheet"> <style> html, body { margin: 0; background: #000; } #v { position: relative; width: 1080px; height: 1920px; overflow: hidden; background: #0f1115; color: #f2f2f2; font-family: 'DM Sans', sans-serif; } .riga { position: absolute; left: 0; width: 1080px; text-align: center; white-space: nowrap; } #titolo { top: 720px; font: 400 160px/.9 'Bebas Neue', sans-serif; } #sotto { top: 960px; font-size: 52px; font-weight: 500; } #numero { top: 1100px; font: 400 160px/1 'Bebas Neue', sans-serif; color: #ffd166; } #barra { position: absolute; left: 140px; top: 1290px; width: 800px; height: 12px; border-radius: 6px; background: #4cc9f0; transform-origin: 0 50%; } </style></head><body> <div id="v"><div id="titolo" class="riga"></div><div id="sotto" class="riga">il bar Da Rosa ha compiuto</div><div id="numero" class="riga"></div><div id="barra"></div></div> <script src="/strumenti/moto.js"></script> <script> const { e: E } = M; const lettere = M.lettere(document.getElementById('titolo'), 'BUON COMPLEANNO'); // un <span> per lettera const sotto = document.getElementById('sotto'), numero = document.getElementById('numero'), barra = document.getElementById('barra'); // render.js aspetta window.ready prima della prima foto: qui i font, poi il titolo rimpicciolito se non ci sta in 980 px window.ready = document.fonts.ready.then(() => M.adatta(document.getElementById('titolo'), 980)); window.render = t => { // 1. le lettere arrivano dal basso una dopo l'altra (0,04 s di distanza), sfocate, e si fermano con una curva decisa M.cascata(lettere, t, { da: .2, passo: .04, dur: .6, y: 120, blur: 14, e: E.outExpo }); // 2. la riga sotto sale e compare fra 0,9 e 1,4 s M.muovi(sotto, { y: M.tra(t, .9, 1.4, 40, 0, E.out3), o: M.p(t, .9, 1.2) }); // 3. il numero sale da 0 a 10 fra 1,3 e 2,5 s, poi un piccolo «pop» M.contatore(numero, t, 1.3, 1.2, 10, { dopo: ' ANNI' }); M.muovi(numero, { s: 1 + .15 * E.outBack(M.p(t, 2.5, 2.8)) - .15 * M.p(t, 2.8, 3.1), o: M.p(t, 1.3, 1.5) }); // 4. la barra si disegna da sinistra a destra barra.style.transform = `scaleX(${E.io3(M.p(t, 1.6, 2.6))})`; }; </script> </body></html>

A mano arrivi a un titolo che entra con una curva e a un video con la musica sotto. Il kit aggiunge tagli agganciati ai colpi della musica, sette transizioni e il telefono con pagine vere, e fa da solo le parti noiose e facili da sbagliare: trova il punto giusto del brano, prepara le clip a misura, mette gli effetti sonori sugli stacchi, sistema il volume e ti avvisa se una scritta non ci sta. Ed è ripetibile: il recap del mese prossimo è lo stesso comando con un file di testo diverso, e con l'agente per Claude Code basta descrivere il video a parole. Il riquadro qui sotto elenca tutto il contenuto, cosa serve e quanto pesa.

Da fare oggi: scrivi il nome della tua attività nella pagina del passo 1, aprila e trascina il cursore. Se il titolo ti piace, fai il passo 2 e guarda il tuo primo MP4 sul telefono. Se ti blocchi su un comando, scrivi a Fabio: raccontagli a che punto sei e cosa leggi nel terminale.

Kit da scaricare

Video animati per i social, senza After Effects

Quattro modelli pronti (recap a ritmo, puntata con il telefono, sigla, trailer di un sito) e gli strumenti per trasformare una pagina animata in un video verticale con musica ed effetti, sul tuo computer, cambiando solo un file di testo.

  • LEGGIMI.mdCosa serve e i passi dal download al primo video di 15 secondi, per Windows e Mac
  • REGOLE.mdCome funziona il metodo, le 6 regole del movimento e moto.js in breve
  • strumenti/moto.jsLa libreria del movimento: curve, testo cinetico, maschere, ritmo, clip, scene
  • strumenti/render.jsDa pagina animata a video a 60 fotogrammi al secondo, con Chrome senza finestra e ffmpeg
  • strumenti/suono.jsMusica, effetti sonori e volume finale uniforme (-14 LUFS, una scelta del kit)
  • strumenti/battiti.jsTrova battiti e punti di taglio di un brano, per montare a tempo di musica
  • strumenti/genera_base.jsGenera una base musicale in codice, senza diritti di terzi
  • strumenti/telefono/Un telefono disegnato in HTML con dentro pagine web vere
  • modelli/Quattro video a stampo: recap a ritmo, puntata, sigla, vetrina di un sito
  • suoni/effetti/14 effetti sonori fatti in codice: whoosh, pop, colpo, tick, ding, salite, sigle
  • esempi/Primo titolo, sigla e recap, puntata e vetrina di un bar inventato, con 6 clip d'esempio
  • agenti/motion-design.mdAgente per Claude Code che costruisce i video con il kit al posto tuo

Ti serve: Node 22 o più (gratis) · Google Chrome (gratis) · ffmpeg (gratis) · Connessione a internet per i font · Facoltativo: un assistente IA che lavora sui file del computer (per esempio Claude Code) per usare l'agente · Zero crediti, nessun abbonamento

zip · 64 file · 3,1 MB · versione 1.0 Si sblocca con la donazione

Supporta il progetto

Con una donazione libera sblocchi il resto della guida e il kit da scaricare, e per 30 giorni tutte le altre guide e i loro kit. Quello che scarichi resta tuo.

Tutte le guide IA Prompt copiabili Kit da scaricare Accesso 30 giorni
Supporta con PayPal

Donazione libera · Importo a tua scelta · Sblocco immediato