Veo 2 est le modèle vidéo hérité de Google en disponibilité générale, annoncé en décembre 2024, avant l'arrivée de l'audio natif dans la gamme Veo.
- Entrée
- texte image
- Sortie
- vidéo
- Prix
- $0.5/s
Le prix en contexte
Position du prix parmi 5 modèles comparables
La barre montre où se situe le prix de ce modèle parmi tous les modèles du même type sur Synthorai. Le moins cher et le plus cher sont nommés à chaque extrémité. Ce sont des tarifs de base ; les remises lot, région et écriture en cache figurent sur la page des tarifs.
Spécifications et limites
Vidéo
| Résolution | 720p |
|---|---|
| Durée du clip | 5-8 s Une plage continue, pas un ensemble fixe. |
| Fréquence d'images | 24 fps |
| Formats d'image | 16:9 · 9:16 |
| Entrées vidéo | text-to-video · image-to-video à première image (image unique) |
| Format | .mp4 |
Modèle
| Modalités | texte + image → vidéo |
|---|
- Modèle vidéo Veo 2 de Google, en GA et désormais hérité (annoncé en décembre 2024, avant l'arrivée de l'audio natif dans la gamme Veo): sortie silencieuse 720p uniquement, text-to-video et image-to-video à première image unique, 24 fps, 5-8 s, 16:9 et 9:16
- pas de piste audio, pas d'entrée de dernière image ni d'image de référence (celles-ci arrivent avec les générations Veo 3.x). Google indique désormais Veo 3.1 comme remplacement recommandé. Synthorai le sert via l'API de jobs asynchrone /v1/videos et facture à la seconde de sortie (l'upstream ne renvoie aucun usage, la durée est donc mesurée depuis la requête)
Utilisez Veo 2 en 30 secondes
API de jobs asynchrone : créez une tâche puis interrogez-la, ou maintenez la requête ouverte avec 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-2.0-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-2.0-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-2.0-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-2.0-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-2.0-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).À propos de Veo 2
- Il génère des clips .mp4 muets à partir d'un prompt textuel ou d'une seule image de première image, en 720p, 24 fps, de 5 à 8 secondes, en 16:9 ou 9:16, et c'est le seul Veo dont la durée est une plage continue plutôt que les valeurs fixes de 4, 6 ou 8 secondes des générations ultérieures.
- Il précède aussi l'extension vidéo, qui arrive avec Veo 3.1, et c'est le seul modèle de la gamme dont le réécriveur de prompt peut être désactivé, de sorte que les prompts parviennent au modèle exactement tels qu'ils sont écrits au lieu d'être d'abord développés.
- Les contrôles de requête communs s'appliquent : jusqu'à quatre vidéos par appel, une graine pour la reproductibilité, un prompt négatif, la sélection du mouvement de caméra pour les clips pilotés par image, un choix entre remplissage et recadrage quand le format d'image de l'entrée ne correspond pas, et une compression optimisée ou sans perte, avec des Content Credentials intégrés à la sortie.
- Google indique désormais Veo 3.1 comme remplaçant recommandé, mais Veo 2 reste disponible pour les workflows existants et les sorties muettes sensibles au coût.
- Synthorai le sert via l'API de jobs asynchrone /v1/videos et facture à la seconde de sortie (l'amont ne renvoie pas d'usage, la durée est donc mesurée à partir de la requête).
- Créez une tâche et interrogez-la, ou utilisez Prefer: wait pour les travaux courts.
FAQ
Peut-on essayer l'API Veo 2 gratuitement ?
Oui : les nouveaux comptes reçoivent 10 appels d'essai et jusqu'à $1 de crédit gratuit, sans carte bancaire. De quoi essayer Veo 2 sur votre charge de travail réelle avant d'ajouter un moyen de paiement.
Quels sont les points forts de Veo 2 ?
Ancien modèle GA, sortie silencieuse en 720p ; text- et image unique-to-video ; 5-8 secondes à 24 fps. Voir la section À propos pour le tableau complet, tiré des notes de version officielles du fournisseur.
Combien coûte Veo 2 ?
Sur Synthorai, Veo 2 coûte $0.5 par seconde de vidéo générée. Seules les générations réussies sont facturées : paiement à l'usage, sans majoration de plateforme, sans abonnement.
Comment générer des vidéos avec l'API Veo 2 ?
Envoyez un POST à /v1/videos sur Synthorai avec model="veo-2.0-generate-001" pour créer un job asynchrone, puis interrogez la tâche (ou maintenez la requête ouverte avec l'en-tête Prefer: wait) jusqu'à obtenir l'URL de la vidéo. Aucun SDK du fournisseur n'est nécessaire.
Comment obtenir l'accès à Veo 2 ?
Pointez votre SDK OpenAI existant vers base_url="https://synthorai.io/v1", définissez model="veo-2.0-generate-001", et c'est tout. Une seule clé API couvre tous les modèles de la passerelle.
Modèles associés
Comparer
Chaque valeur de cette page est transcrite de la documentation du fournisseur, liée ci-dessus, et porte la date de sa vérification. Les prix sont comparés à l'échelle du catalogue ; les valeurs de spécification que les fournisseurs définissent différemment sont présentées avec la différence indiquée plutôt que mises en graphique. Rien ici n'est mesuré par nous, et rien n'est noté.