Veo 2 es el modelo de vídeo heredado en disponibilidad general de Google, anunciado en diciembre de 2024, antes de que el audio nativo llegara a la línea Veo.
- Entrada
- texto imagen
- Salida
- vídeo
- Precio
- $0.5/s
El precio en contexto
Posición del precio entre 5 modelos comparables
La barra muestra dónde queda el precio de este modelo entre todos los modelos del mismo tipo en Synthorai. En cada extremo se nombra el más barato y el más caro. Son tarifas base; los descuentos por lote, región y escritura en caché están en la página de precios.
Especificaciones y límites
Vídeo
| Resolución | 720p |
|---|---|
| Duración del clip | 5-8 s Un rango continuo, no un conjunto fijo. |
| Fotogramas por segundo | 24 fps |
| Relaciones de aspecto | 16:9 · 9:16 |
| Entradas de vídeo | texto a vídeo · imagen a vídeo con primer fotograma (una sola imagen) |
| Formato | .mp4 |
Modelo
| Modalidades | texto + imagen → vídeo |
|---|
- Modelo de vídeo heredado Veo 2 de Google en GA (anunciado en diciembre de 2024, antes de que el audio nativo se incorporara a la línea Veo): solo salida muda a 720p, texto a vídeo más imagen a vídeo con un único primer fotograma, 24 fps, 5-8 s, 16:9 y 9:16
- sin pista de audio y sin entrada de último fotograma ni de imagen de referencia (eso llega en las generaciones Veo 3.x). Google indica ahora Veo 3.1 como sustituto recomendado. Synthorai lo sirve mediante la API asíncrona de trabajos /v1/videos y lo factura por segundo de salida (el upstream no devuelve uso, así que la duración se mide a partir de la solicitud)
Use Veo 2 en 30 segundos
API de jobs asíncrona: crea una tarea y consúltala, o mantén la petición abierta 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-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).Acerca de Veo 2
- Genera clips .mp4 silenciosos a partir de un prompt de texto o de una sola imagen de primer fotograma en 720p, 24 fps, de 5 a 8 segundos, en 16:9 o 9:16, y es el único Veo cuya duración es un rango continuo en lugar de los valores fijos de 4, 6 u 8 segundos de las generaciones posteriores.
- Es también anterior a la extensión de vídeo, que llega con Veo 3.1, y es el único modelo de la línea cuyo reescritor de prompts puede desactivarse, de modo que los prompts llegan al modelo exactamente como se escriben en lugar de expandirse primero.
- Se aplican los controles de solicitud compartidos: hasta cuatro vídeos por llamada, una semilla para la reproducibilidad, un prompt negativo, selección de movimiento de cámara para los clips dirigidos por imagen, una elección entre relleno y recorte cuando la relación de aspecto de entrada no coincide, y compresión optimizada o sin pérdidas, con Content Credentials incrustados en la salida.
- Google indica ahora Veo 3.1 como el reemplazo recomendado, pero Veo 2 sigue disponible para flujos existentes y salida silenciosa sensible al coste.
- Synthorai lo sirve mediante la API asíncrona de jobs /v1/videos y factura por segundo de salida (el proveedor no devuelve uso, así que la duración se mide desde la solicitud).
- Crea una tarea y consúltala, o usa Prefer: wait para trabajos cortos.
Preguntas frecuentes
¿Se puede probar gratis la API de Veo 2?
Sí: las cuentas nuevas reciben 10 llamadas de prueba y hasta $1 de crédito gratuito, sin tarjeta. Suficiente para probar Veo 2 con su carga de trabajo real antes de añadir un método de pago.
¿En qué destaca Veo 2?
Modelo GA heredado, salida silenciosa en 720p; texto e imagen única a vídeo; 5-8 segundos a 24 fps. Consulte la sección Acerca de para el panorama completo según las notas de lanzamiento del propio proveedor.
¿Cuánto cuesta Veo 2?
Veo 2 cuesta $0.5 por segundo de vídeo generado en Synthorai. Solo se facturan las generaciones exitosas: pago por uso, sin margen de plataforma, sin suscripción.
¿Cómo genero vídeos con la API de Veo 2?
Envíe un POST a /v1/videos en Synthorai con model="veo-2.0-generate-001" para crear un job asíncrono y luego consulte la tarea (o mantenga la petición abierta con la cabecera Prefer: wait) hasta obtener la URL del vídeo. No hace falta ningún SDK del proveedor.
¿Cómo obtengo acceso a Veo 2?
Apunte su SDK de OpenAI existente a base_url="https://synthorai.io/v1", configure model="veo-2.0-generate-001" y listo. Una sola clave API cubre todos los modelos del gateway.
Modelos relacionados
Comparar
Cada valor de esta página está transcrito de la documentación del proveedor, enlazada arriba, y lleva la fecha en que se comprobó. Los precios se comparan en todo el catálogo; los valores de especificación que los proveedores definen de forma distinta se muestran indicando la diferencia en lugar de representarse en un gráfico. Nada aquí lo medimos nosotros, y nada se puntúa.