Veo 3.1 Fast vs Veo 3.1
Lequel, quand — verdict de synthèse, pas un tableau de benchmarks
Même génération et même fiche technique — 720p/1080p, 4/6/8 s à 24 fps, jusqu'à deux images de guidage, audio natif — donc l'écart est purement tarifaire : la variante fast facture $0.15 par seconde de sortie avec audio et $0.1 en silencieux, contre $0.4 et $0.2, soit environ 2.7x et 2x moins. Les deux exposent le tarif silencieux, la voie la moins chère si vous comptez sonoriser vous-même. À parité de specs, la variante fast est le choix par défaut.
Tarification
| Veo 3.1 Fast | Veo 3.1 | Δ | |
|---|---|---|---|
| Par seconde de sortie (avec audio) | $0.15 | $0.4 | 0.37× |
| Par seconde de sortie (silencieux) | $0.1 | $0.2 | 0.5× |
Tarifs issus du catalogue en direct au moment de la compilation ; chaque page de modèle présente la fiche actuelle.
Où ils se situent — prix par seconde en sortie sur l'ensemble des 7 modèles génération de vidéos pour cette unité de facturation (échelle logarithmique)
Capacités
| Veo 3.1 Fast | Veo 3.1 | |
|---|---|---|
| Audio natif | oui | oui |
Spécifications
| Veo 3.1 Fast | Veo 3.1 | |
|---|---|---|
| Modalités d'entrée | texte image | texte image |
| Modalités de sortie | vidéo | vidéo |
| Sortie | 2025-10 | 2025-10 |
| Résolution | 720p / 1080p (ensemble fixe) | 720p / 1080p (ensemble fixe) |
| Durée du clip | 4 / 6 / 8 s (ensemble fixe) | 4 / 6 / 8 s (ensemble fixe) |
| Fréquence d'images | 24 fps | 24 fps |
| Ratios d'aspect |
|
|
| Modes d'entrée |
|
|
| Format | .mp4 | .mp4 |
Les spécifications sont transcrites à partir de la documentation de chaque fournisseur ; une ligne qu'un fournisseur ne publie pas est omise plutôt que déduite. Sources complètes : Veo 3.1 Fast · Veo 3.1
Un prompt, deux modèles — mesurés via la passerelle
Renvoyé par le modèle 1280×720 Durée 8s latence 63 s
Renvoyé par le modèle 1280×720 Durée 8s latence 63 s
Un prompt, une requête par modèle, aucun nouvel essai et aucune sélection sur le volet — le premier résultat renvoyé par chaque modèle. Ni la taille ni la durée n'ont été fixées : chaque modèle a utilisé sa propre valeur par défaut, car une requête conçue pour s'adapter à tous n'en mettrait aucun en valeur. Les fichiers ici sont réencodés pour le web, jugez donc la composition et le respect du prompt, pas la compression.
Basculez de l'un à l'autre avec une seule ligne
Les deux ids sont dans chaque onglet ci-dessous — la paire de lignes en surbrillance est la seule modification. Même endpoint, même clé, même structure de requête.
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-fast-generate-001",
# "model": "veo-3.1-generate-001", # décommentez cette ligne, commentez celle du dessus
"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-fast-generate-001",
// model: "veo-3.1-generate-001", // décommentez cette ligne, commentez celle du dessus
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-fast-generate-001",
# "model": "veo-3.1-generate-001", # décommentez cette ligne, commentez celle du dessus
"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-fast-generate-001",
// "model": "veo-3.1-generate-001", // décommentez cette ligne, commentez celle du dessus
"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-fast-generate-001",
// {"model": "veo-3.1-generate-001", // décommentez cette ligne, commentez celle du dessus
"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).FAQ
Lequel est le moins cher, Veo 3.1 Fast ou Veo 3.1 ?
Veo 3.1 Fast est moins cher sur par seconde de sortie (avec audio) ($0.15 contre $0.4, avec un écart de 2.7×). D'autres lignes peuvent indiquer l'inverse — le tableau ci-dessus contient la fiche complète, et le coût réel dépend de votre combinaison.
Puis-je faire un test A/B de Veo 3.1 Fast par rapport à Veo 3.1 sans deux intégrations ?
Oui. Les deux sont servis via le même endpoint compatible OpenAI avec une seule clé API — le basculement est un changement de chaîne de modèle en une ligne, vous pouvez donc diriger une fraction du trafic vers chacun et comparer les factures directement.
Quelles durées de clip et résolutions prennent-ils en charge ?
Le tableau des spécifications ci-dessus dresse la liste des résolutions et des durées de clip publiées pour chaque modèle, et indique si une valeur est un ensemble fixe d'options ou une plage continue — les deux se ressemblent mais ont un prix différent, car la facturation à la seconde se multiplie par la durée.