Veo 3.1 è l'attuale modello di punta di generazione video di Google, il più recente della linea Veo.
- Input
- testo immagine
- Output
- video
- Prezzo
- $0.4/s
Benchmark
Veo 3.1: 12 pubblicati, ma nessun benchmark in comune con abbastanza altri modelli per fare un confronto.
Dati pubblicati dai provider: ByteDance
Il prezzo a confronto
Dove si colloca il prezzo tra 5 modelli confrontabili
La barra mostra dove si colloca il prezzo di questo modello tra tutti i modelli dello stesso tipo su Synthorai. Alle due estremità sono indicati il più economico e il più caro. Sono tariffe base; gli sconti per batch, regione e scrittura in cache sono nella pagina dei prezzi.
Specifiche e limiti
Video
| Risoluzione | 720p / 1080p Un insieme fisso di opzioni, non un intervallo. |
|---|---|
| Durata della clip | 4 / 6 / 8 s Un insieme fisso di opzioni, non un intervallo. |
| Frame rate | 24 fps |
| Proporzioni | 16:9 · 9:16 |
| Input video | text-to-video · image-to-video con primo fotogramma e con primo/ultimo fotogramma (fino a 2 immagini guida) |
| Audio nativo | Sì, genera audio |
| Formato | .mp4 |
Modello
| Modalità | testo + immagine → video |
|---|
- Il modello video Veo 3.1 di Google, l'attuale flagship della linea Veo: text-to-video, image-to-video con primo fotogramma e interpolazione tra primo e ultimo fotogramma (fino a due immagini guida), tutti con audio sincronizzato nativo (dialoghi, suoni ambientali, musica)
- 720p/1080p, 24 fps, 4/6/8 s, 16:9 e 9:16
- un interruttore generateAudio seleziona l'output con audio o muto. Veo 3.1 affina la sincronizzazione audio-video e l'aderenza alle immagini di riferimento rispetto a Veo 3. Synthorai lo serve tramite l'API di job asincrona /v1/videos (crea un task, poi interrogalo, oppure tieni aperta la richiesta con Prefer: wait, finché l'URL firmato del video non è pronto) e lo fattura per secondo di output a tariffe distinte per output con audio e muto
Un solo prompt, misurato attraverso il gateway
Veo 3.1
Restituito dal modello 1280×720 Durata 8s latenza 63 s
Un prompt, una richiesta per modello, nessun nuovo tentativo e nessuna selezione: è il primo risultato restituito da ciascun modello. Non abbiamo fissato né le dimensioni né la durata: ogni modello ha usato il proprio default, perché una richiesta costruita per andare bene a tutti non avrebbe valorizzato nessuno. I file sono stati ricodificati per il web, quindi valuta la composizione e l'aderenza al prompt, non la compressione.
Usa Veo 3.1 in 30 secondi
API asincrona a job: crei un task e fai polling, oppure tieni aperta la richiesta con Prefer: wait. POST /v1/videos
import time
import requests
BASE = "https://synthorai.io/v1"
HEADERS = {"Authorization": "Bearer sk-syn-..."}
# 1) create the video generation job (POST /v1/videos)
task = requests.post(
f"{BASE}/videos",
headers=HEADERS,
json={
"model": "veo-3.1-generate-001",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5,
},
).json()
# 2) poll the job until it reaches a terminal state
while task["status"] in ("queued", "in_progress"):
time.sleep(5)
task = requests.get(f"{BASE}/videos/{task['id']}", headers=HEADERS).json()
# 3) completed → signed video URL (valid ~24h - download and store it promptly)
if task["status"] == "completed":
print(task["data"][0]["url"])
else:
print(task["error"])const HEADERS = {
Authorization: "Bearer sk-syn-...",
"Content-Type": "application/json",
};
interface VideoTask {
id: string;
status: "queued" | "in_progress" | "completed" | "failed" | "cancelled";
data?: Array<{ url: string }>;
error?: { code: string; message: string };
}
// 1) create the video generation job (POST /v1/videos)
const created = await fetch("https://synthorai.io/v1/videos", {
method: "POST",
headers: HEADERS,
body: JSON.stringify({
model: "veo-3.1-generate-001",
prompt: "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
resolution: "720p",
duration: 5,
}),
});
let task = (await created.json()) as VideoTask;
// 2) poll the job until it reaches a terminal state
while (task.status === "queued" || task.status === "in_progress") {
await new Promise((r) => setTimeout(r, 5000));
const res = await fetch(`https://synthorai.io/v1/videos/${task.id}`, { headers: HEADERS });
task = (await res.json()) as VideoTask;
}
// 3) completed → signed video URL (valid ~24h — download and store it promptly)
if (task.status === "completed") console.log(task.data?.[0]?.url);
else console.error(task.error);# Create the job; "Prefer: wait" holds the request up to 60s and returns the
# completed task when generation finishes in time (else the queued task).
curl https://synthorai.io/v1/videos \
-H "Authorization: Bearer sk-syn-..." \
-H "Content-Type: application/json" \
-H "Prefer: wait=60" \
-d '{
"model": "veo-3.1-generate-001",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5
}'
# Still queued / in_progress? Poll until completed → data[0].url (valid ~24h).
curl https://synthorai.io/v1/videos/vid_9f2e8c1a4b7d \
-H "Authorization: Bearer sk-syn-..."package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"time"
)
const base = "https://synthorai.io/v1"
type videoTask struct {
ID string `json:"id"`
Status string `json:"status"`
Data []struct {
URL string `json:"url"`
} `json:"data"`
}
func call(method, url string, body []byte) (t videoTask) {
req, _ := http.NewRequest(method, url, bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer sk-syn-...")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
json.NewDecoder(resp.Body).Decode(&t)
return t
}
func main() {
// 1) create the video generation job (POST /v1/videos)
payload, _ := json.Marshal(map[string]any{
"model": "veo-3.1-generate-001",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p",
"duration": 5,
})
task := call("POST", base+"/videos", payload)
// 2) poll the job until it reaches a terminal state
for task.Status == "queued" || task.Status == "in_progress" {
time.Sleep(5 * time.Second)
task = call("GET", base+"/videos/"+task.ID, nil)
}
// 3) completed → signed video URL (valid ~24h — download and store promptly)
if task.Status == "completed" {
fmt.Println(task.Data[0].URL)
}
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
// JDK built-in HttpClient — no extra dependency needed.
HttpClient http = HttpClient.newHttpClient();
// 1) create the job; "Prefer: wait=60" holds the request up to 60s and
// returns the completed task when generation finishes in time
HttpRequest create = HttpRequest.newBuilder(URI.create("https://synthorai.io/v1/videos"))
.header("Authorization", "Bearer sk-syn-...")
.header("Content-Type", "application/json")
.header("Prefer", "wait=60")
.POST(HttpRequest.BodyPublishers.ofString("""
{"model": "veo-3.1-generate-001",
"prompt": "a watercolor lighthouse at dawn, waves rolling in, camera pulling back",
"resolution": "720p", "duration": 5}"""))
.build();
String task = http.send(create, HttpResponse.BodyHandlers.ofString()).body();
System.out.println(task); // {"id":"vid_…","status":…} — completed → data[0].url
// 2) still queued / in_progress? Poll GET https://synthorai.io/v1/videos/{id} until the
// status turns completed, then download data[0].url (valid ~24h).Informazioni su Veo 3.1
- Genera clip .mp4 da un prompt testuale, da un'immagine di primo fotogramma o come interpolazione primo-e-ultimo fotogramma tra due immagini guida, tutte con audio nativo sincronizzato: dialogo con sincronizzazione labiale, suono ambientale e musica.
- L'output è in 720p, 1080p o 4K, 24 fps, di 4, 6 o 8 secondi, in 16:9 o 9:16, e un interruttore generateAudio seleziona output sonoro o silenzioso.
- Oltre a Veo 3 aggiunge fino a tre immagini di riferimento degli asset per portare un personaggio, un prodotto o un luogo attraverso più inquadrature, con le clip guidate da riferimento fissate a 8 secondi, e l'estensione video, che prende una clip esistente da 1 a 30 secondi e la prosegue di 7 secondi per chiamata, così le sequenze più lunghe si costruiscono per concatenamento anziché chiedendo una generazione più lunga.
- Google ha anche quintuplicato la quota di richieste per questa generazione.
- Le richieste accettano fino a quattro video per chiamata, un seed, un prompt negativo, la selezione del movimento di camera e compressione ottimizzata o lossless, con le Content Credentials incorporate nell'output.
- Synthorai lo serve tramite l'API di job asincrona /v1/videos e fattura al secondo di output, con tariffe separate per le generazioni sonore e silenziose.
- Crea un task, poi interrogalo (o tieni aperta la richiesta con Prefer: wait) finché l'URL firmato del video non è pronto.
FAQ
L'API di Veo 3.1 si può provare gratis?
Sì: i nuovi account ricevono 10 chiamate di prova e fino a $1 di credito gratuito, senza bisogno di carta. Abbastanza per provare Veo 3.1 sul tuo carico di lavoro reale prima di aggiungere un metodo di pagamento.
In cosa eccelle Veo 3.1?
Attuale punta di diamante Veo con audio nativo; image-to-video primo/ultimo fotogramma, fino a due guide; output sonoro o silenzioso a tariffe separate. Il quadro completo è nella sezione «Informazioni», ripreso dalle note di rilascio ufficiali del provider.
Quanto costa Veo 3.1?
Su Synthorai Veo 3.1 costa $0.4 al secondo di video generato. Si pagano solo le generazioni riuscite: a consumo, senza sovrapprezzo di piattaforma e senza abbonamento.
Come genero video con l'API di Veo 3.1?
Invia una POST a /v1/videos su Synthorai con model="veo-3.1-generate-001" per creare un job asincrono, poi fai polling sul task (o tieni aperta la richiesta con l'header Prefer: wait) finché l'URL del video non è pronto. Non serve alcun SDK del provider.
Come ottengo l'accesso a Veo 3.1?
Fai puntare l'SDK OpenAI che usi già a base_url="https://synthorai.io/v1", imposta model="veo-3.1-generate-001" e hai finito: una sola chiave API vale per tutti i modelli del gateway.
Modelli correlati
Confronta
Ogni valore di questa pagina è ripreso dalla documentazione del provider (il link è qui sopra) e riporta la data dell'ultima verifica. I prezzi sono confrontati sull'intero catalogo; per le specifiche che ogni provider definisce a modo suo indichiamo la differenza invece di metterle in un grafico. Qui non c'è nulla di misurato da noi e non assegniamo punteggi.