Sora 2 Pro es el nivel de mayor fidelidad de Sora 2 de OpenAI, presentado como su modelo más avanzado de generación de vídeo con audio sincronizado.
- Entrada
- texto imagen
- Salida
- vídeo
- Precio
- $0.3-$0.5/s
Benchmarks
Sora 2 Pro: 6 publicados, pero ningún benchmark compartido con suficientes modelos para comparar.
Publicado por los proveedores: ByteDance
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 Un conjunto fijo de opciones, no un rango. |
|---|---|
| Duración del clip | 4-12 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 (una sola imagen de referencia) |
| Audio nativo | Sí, genera sonido |
| Formato | .mp4 |
Modelo
| Modalidades | texto + imagen → vídeo |
|---|
El nivel de mayor fidelidad de Sora 2 de OpenAI, que usa más cómputo por generación para lograr un detalle más nítido y una mayor adherencia al prompt, con las mismas capacidades de texto a vídeo e imagen a vídeo con audio sincronizado. Synthorai lo sirve mediante la API asíncrona de trabajos /v1/videos a 720p, 24 fps, 4-12 s, 16:9 o 9:16, y lo factura por segundo de salida a una tarifa premium.
Un prompt, medido a través de la pasarela
Sora 2 Pro
Devuelto por el modelo 1280×720 Duración 4s latencia 130 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.
Usa Sora 2 Pro en 30 segundos
API asíncrona de tareas: crea una tarea y consulta su estado, o mantén la solicitud 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": "sora-2-pro",
"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: "sora-2-pro",
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": "sora-2-pro",
"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": "sora-2-pro",
"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": "sora-2-pro",
"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 Sora 2 Pro
- Dedica más cómputo por generación para lograr un detalle más nítido y una mayor adherencia al prompt, manteniendo las mismas capacidades de audio sincronizado, texto a vídeo e imagen a vídeo.
- La orientación de OpenAI es explícita sobre el compromiso: Pro tarda más en renderizar y cuesta más de ejecutar, pero produce resultados más pulidos y estables, y es el nivel que hay que elegir cuando se necesita una salida de calidad de producción en lugar de borradores exploratorios.
- En origen también ofrece un tamaño de salida por encima del par compartido de 720p - 1792x1024 en horizontal y 1024x1792 en vertical - con una tarifa por segundo más alta.
- Todo lo demás coincide con el nivel estándar: las imágenes de referencia deben coincidir con el tamaño de destino y llegar como JPEG, PNG o WebP, los flujos de extensión y edición están disponibles para continuar o ajustar un clip terminado, los personajes reutilizables mantienen un sujeto coherente con un límite de dos por vídeo, y se aplican las mismas reglas de contenido, con personas reales, rostros en las imágenes de entrada y personajes o música con derechos de autor todos rechazados.
- Synthorai lo sirve mediante la API asíncrona de jobs /v1/videos en 720p o 1024p, 24 fps, de 4 a 12 segundos, en 16:9 o 9:16, y factura por segundo de salida a una tarifa premium sobre la de Sora 2 estándar.
Preguntas frecuentes
¿Se puede probar gratis la API de Sora 2 Pro?
Sí: las cuentas nuevas reciben 10 llamadas de prueba y hasta $1 de crédito gratuito, sin tarjeta. Suficiente para probar Sora 2 Pro con tu carga de trabajo real antes de añadir un método de pago.
¿En qué destaca Sora 2 Pro?
Nivel Sora 2 de mayor fidelidad, más cómputo por clip; mayor detalle y adherencia al prompt; audio sincronizado, 720p o 1024p, 4-12 segundos. En la sección «Acerca de» tienes la visión completa, según las notas de lanzamiento del propio proveedor.
¿Cuánto cuesta Sora 2 Pro?
Sora 2 Pro cuesta $0.3-$0.5 por segundo de vídeo generado en Synthorai. Solo se facturan las generaciones completadas con éxito: pago por uso, sin recargo de plataforma, sin suscripción.
¿Cómo genero vídeos con la API de Sora 2 Pro?
Envía un POST a /v1/videos en Synthorai con model="sora-2-pro" para crear una tarea asíncrona y después consulta su estado (o mantén la solicitud abierta con la cabecera Prefer: wait) hasta que esté lista la URL del vídeo. No hace falta ningún SDK del proveedor.
¿Cómo obtengo acceso a Sora 2 Pro?
Apunta el SDK de OpenAI que ya usas a base_url="https://synthorai.io/v1", pon model="sora-2-pro" y listo. Una sola clave API sirve para todos los modelos de la pasarela.
Modelos relacionados
Comparar
Todos los valores de esta página están transcritos de la documentación del propio proveedor, enlazada arriba, e indican la fecha en que se comprobaron. Los precios se comparan con los de todo el catálogo; cuando los proveedores definen una especificación de forma distinta, se muestra el valor indicando la diferencia en lugar de llevarlo a un gráfico. Aquí no hay mediciones nuestras ni puntuaciones.