Veo 3.1 Fast vs Veo 3.1
Cuál usar y cuándo
Misma generación y misma ficha técnica - 720p/1080p, 4/6/8 s a 24 fps, hasta dos imágenes guía, audio nativo - así que la diferencia es puramente la tarifa: la variante fast cobra $0.15 por segundo de salida con audio y $0.1 en silencio, frente a $0.4 y $0.2, unas 2.7x y 2x menos. Ambas exponen la tarifa silenciosa, el camino más barato si piensas ponerle sonido tú mismo. Con esta paridad de especificaciones, la variante fast es la opción por defecto.
Benchmarks
Veo 3.1 Fast: el proveedor no ha publicado resultados de benchmarks.
Veo 3.1: 12 publicados, pero ningún benchmark compartido con suficientes modelos para comparar.
Publicado por los proveedores: ByteDance
Precios
| Veo 3.1 Fast | Veo 3.1 | Δ | |
|---|---|---|---|
| Por segundo de salida (con audio) | $0.15 | $0.4 | 0.37× |
| Por segundo de salida (sin audio) | $0.1 | $0.2 | 0.5× |
Tarifas tomadas del catálogo en vivo al generar el sitio; la página de cada modelo tiene la ficha de precios actualizada.
Dónde queda cada uno: precio por segundo de salida entre los 7 modelos de generación de vídeo que se facturan en esta unidad (escala logarítmica)
Capacidades
| Veo 3.1 Fast | Veo 3.1 | |
|---|---|---|
| Audio nativo | sí | sí |
Especificaciones
| Veo 3.1 Fast | Veo 3.1 | |
|---|---|---|
| Modalidades de entrada | texto imagen | texto imagen |
| Modalidades de salida | vídeo | vídeo |
| Lanzamiento | 2025-10 | 2025-10 |
| Resolución | 720p / 1080p (conjunto fijo) | 720p / 1080p (conjunto fijo) |
| Duración del clip | 4 / 6 / 8 s (conjunto fijo) | 4 / 6 / 8 s (conjunto fijo) |
| Fotogramas por segundo | 24 fps | 24 fps |
| Relaciones de aspecto |
|
|
| Modos de entrada |
|
|
| Formato | .mp4 | .mp4 |
Las especificaciones se transcriben de la documentación de cada proveedor; si un proveedor no publica un dato, la fila se omite en vez de deducirlo. Fuentes completas: Veo 3.1 Fast · Veo 3.1
Un mismo prompt en los dos modelos, medido a través de la pasarela
Devuelto por el modelo 1280×720 Duración 8s latencia 63 s
Devuelto por el modelo 1280×720 Duración 8s latencia 63 s
Un prompt y una solicitud por modelo, sin reintentos y sin escoger el mejor resultado: lo que ves es lo primero que devolvió cada modelo. No fijamos ni el tamaño ni la duración; cada modelo usó sus valores por defecto, porque una solicitud hecha a la medida de todos no dejaría en buen lugar a ninguno. Los archivos se han recodificado para la web, así que fíjate en la composición y en la fidelidad al prompt, no en la compresión.
Cambia de uno a otro con una sola línea
Los dos ids aparecen en todas las pestañas de abajo; lo único que cambia es el par de líneas resaltadas. El endpoint, la clave y la estructura de la solicitud son los mismos.
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", # descomenta esta línea, comenta la de arriba
"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", // descomenta esta línea, comenta la de arriba
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", # descomenta esta línea, comenta la de arriba
"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", // descomenta esta línea, comenta la de arriba
"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", // descomenta esta línea, comenta la de arriba
"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).Preguntas frecuentes
¿Cuál es más barato, Veo 3.1 Fast o Veo 3.1?
Veo 3.1 Fast es más barato en Por segundo de salida (con audio) ($0.15 frente a $0.4, una diferencia de 2.7×). En otras filas puede ser al revés: la tabla de arriba recoge todas las tarifas, y el coste real depende de tu combinación de uso.
¿Puedo hacer pruebas A/B de Veo 3.1 Fast frente a Veo 3.1 sin dos integraciones?
Sí. Los dos se sirven desde el mismo endpoint compatible con OpenAI y con una sola clave API. Para cambiar de uno a otro basta con tocar una línea, el nombre del modelo, así que puedes mandar una parte del tráfico a cada uno y comparar directamente las facturas.
¿Qué duraciones de clip y resoluciones admiten?
La tabla de especificaciones de arriba recoge las resoluciones y duraciones de clip que publica cada modelo, e indica si un valor es un conjunto fijo de opciones o un rango continuo. Parecen lo mismo, pero no cuestan igual, porque al facturarse por segundo el precio crece con la duración.