Veo 3.1 Fast vs Veo 3.1
Welches und wann — kuratiertes Fazit, keine Benchmark-Tabelle
Gleiche Generation und gleiches Datenblatt — 720p/1080p, 4/6/8 s bei 24 fps, bis zu zwei Führungsbilder, nativer Ton — also ist der Unterschied rein der Tarif: Die fast-Variante berechnet $0.15 pro Ausgabesekunde mit Ton und $0.1 stumm, gegenüber $0.4 und $0.2, also rund 2.7x und 2x weniger. Beide weisen den stummen Tarif aus, der günstigere Weg, wenn Sie den Clip selbst vertonen wollen. Bei dieser Spezifikationsgleichheit ist die fast-Variante die Standardwahl.
Preise
| Veo 3.1 Fast | Veo 3.1 | Δ | |
|---|---|---|---|
| Pro Output-Sekunde (mit Audio) | $0.15 | $0.4 | 0.37× |
| Pro Output-Sekunde (lautlos) | $0.1 | $0.2 | 0.5× |
Preise aus dem Live-Katalog zum Zeitpunkt des Builds; jede Modellseite enthält die aktuelle Übersicht.
Wo sie stehen — Preis pro Ausgabesekunde über alle 7 Videogenerierung-Modelle mit dieser Abrechnungseinheit (logarithmische Skala)
Fähigkeiten
| Veo 3.1 Fast | Veo 3.1 | |
|---|---|---|
| Natives Audio | ja | ja |
Spezifikationen
| Veo 3.1 Fast | Veo 3.1 | |
|---|---|---|
| Input-Modalitäten | Text Bild | Text Bild |
| Ausgabemodalitäten | Video | Video |
| Veröffentlicht | 2025-10 | 2025-10 |
| Auflösung | 720p / 1080p (feste Auswahl) | 720p / 1080p (feste Auswahl) |
| Cliplänge | 4 / 6 / 8 s (feste Auswahl) | 4 / 6 / 8 s (feste Auswahl) |
| Bildrate | 24 fps | 24 fps |
| Seitenverhältnisse |
|
|
| Eingabemodi |
|
|
| Format | .mp4 | .mp4 |
Die Spezifikationen sind aus der Dokumentation der jeweiligen Anbieter übernommen; eine Zeile, die ein Anbieter nicht veröffentlicht, wird weggelassen und nicht abgeleitet. Vollständige Quellen: Veo 3.1 Fast · Veo 3.1
Ein Prompt, beide Modelle — gemessen über das Gateway
Vom Modell zurückgegeben 1280×720 Dauer 8s Latenz 63 s
Vom Modell zurückgegeben 1280×720 Dauer 8s Latenz 63 s
Ein Prompt, ein Request pro Modell, keine Retries und kein Cherry-Picking — das erste Ergebnis, das jedes Modell zurückgegeben hat. Weder Größe noch Dauer wurden festgelegt: Jedes Modell verwendete seinen eigenen Standardwert, da ein auf alle zugeschnittener Request keinem gerecht werden würde. Die Dateien hier wurden für das Web neu kodiert, beurteilen Sie also Komposition und Prompt-Treue, nicht die Komprimierung.
Mit einer Zeile zwischen ihnen wechseln
Beide IDs befinden sich in jedem Tab unten — das hervorgehobene Zeilenpaar ist die einzige Änderung. Gleicher Endpunkt, gleicher Schlüssel, gleiche Request-Struktur.
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", # diese Zeile einkommentieren, die darüberliegende auskommentieren
"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", // diese Zeile einkommentieren, die darüberliegende auskommentieren
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", # diese Zeile einkommentieren, die darüberliegende auskommentieren
"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", // diese Zeile einkommentieren, die darüberliegende auskommentieren
"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", // diese Zeile einkommentieren, die darüberliegende auskommentieren
"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
Welches ist günstiger, Veo 3.1 Fast oder Veo 3.1?
Veo 3.1 Fast ist günstiger bei pro output-sekunde (mit audio) ($0.15 vs. $0.4, 2.7× Unterschied). Andere Zeilen können in die andere Richtung deuten — die obige Tabelle enthält alle Daten, und die tatsächlichen Kosten hängen von Ihrem Mix ab.
Kann ich Veo 3.1 Fast gegen Veo 3.1 ohne zwei Integrationen A/B-testen?
Ja. Beide werden über denselben OpenAI-kompatiblen Endpunkt mit einem API-Schlüssel bereitgestellt — der Wechsel ist eine einzeilige Änderung des Modell-Strings, sodass Sie einen Bruchteil des Traffics an jedes Modell leiten und die Rechnungen direkt vergleichen können.
Welche Cliplängen und Auflösungen unterstützen sie?
Die obige Spezifikationstabelle listet die von jedem Modell veröffentlichten Auflösungen und Cliplängen auf und markiert, ob es sich bei einem Wert um eine feste Auswahl an Optionen oder einen kontinuierlichen Bereich handelt — beide sehen ähnlich aus und sind unterschiedlich bepreist, da sich die sekundenbasierte Abrechnung mit der Länge multipliziert.