Sora 2 Character API 核心要点
| 要点 | 说明 | 价值 |
|---|---|---|
| Extracción de personajes | Extrae características del personaje desde el video | Crea activos de personajes reutilizables |
| ID de personaje | Obtiene un identificador único del personaje | Invoca el mismo personaje en múltiples videos |
| Parámetro timestamps | Especifica el rango temporal donde aparece el personaje | Localiza con precisión el personaje objetivo |
| Dos métodos de creación | URL de video o ID de tarea | Se adapta flexiblemente a diferentes escenarios |
¿Qué es Sora 2 Character API?
Sora 2 Character API es la interfaz de gestión de personajes de OpenAI Sora 2, que permite a los desarrolladores:
- Extraer personajes del video: Especificar un personaje que aparece en cierto período del video y extraer sus características
- Obtener ID de personaje: El sistema devuelve un identificador único de personaje (character_id)
- Reutilizar entre videos: Invocar ese personaje mediante @character_id en generaciones posteriores
- Mantener consistencia: El mismo personaje mantiene su apariencia coherente en diferentes escenas y videos
Para creadores que necesitan producir series de videos, animaciones de IP de marca o contenido narrativo continuo, esta es una funcionalidad revolucionaria.

Método 1: Extracción de personaje desde URL de video
Este método te permite extraer un personaje directamente desde un video ya generado o existente mediante su URL.
Ejemplo de código completo
import requests
import json
url = "https://api.openai.com/v1/sora/v1/characters"
payload = json.dumps({
"model": "sora-2-character",
"url": "https://cdn.openai.com/sora/videos/generated-video.mp4",
"timestamps": "5,8"
})
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer TU_CLAVE_API_AQUI',
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Desglose de parámetros clave
| Parámetro | Tipo | Descripción | Ejemplo |
|---|---|---|---|
model |
string | Modelo fijo | "sora-2-character" |
url |
string | URL del video fuente | "https://cdn.openai.com/..." |
timestamps |
string | Rango temporal del personaje (segundos) | "5,8" (del segundo 5 al 8) |
Sobre el parámetro timestamps
El parámetro timestamps es fundamental para que el API sepa en qué parte del video extraer el personaje:
- Formato:
"inicio,fin"– dos números separados por coma - Unidad: segundos
- Ejemplo:
"5,8"significa extraer el personaje que aparece entre el segundo 5 y 8 - Recomendación: elige un segmento de 3-5 segundos donde el personaje sea claramente visible y esté bien iluminado
Casos de uso típicos:
# Personaje aparece al inicio del video (primeros 4 segundos)
"timestamps": "0,4"
# Personaje aparece en la mitad (del segundo 10 al 15)
"timestamps": "10,15"
# Personaje aparece al final (últimos 3 segundos de un video de 20s)
"timestamps": "17,20"
Ejemplo de respuesta exitosa
{
"id": "char_abc123xyz",
"object": "character",
"created": 1735747200,
"model": "sora-2-character",
"status": "completed",
"url": "https://cdn.openai.com/sora/videos/generated-video.mp4",
"timestamps": "5,8"
}
Punto clave: guarda el id devuelto (como char_abc123xyz), este es tu character_id que podrás usar en futuras generaciones.
Método 2: Extracción de personaje desde ID de tarea
Si ya has generado un video con Sora 2 y tienes el ID de tarea (task_id), puedes usarlo directamente para extraer el personaje sin necesidad de la URL.
Ejemplo de código completo
import requests
import json
url = "https://api.openai.com/v1/sora/v1/characters"
payload = json.dumps({
"model": "sora-2-character",
"from_task": "video_f751ab5e8d4c4a91b2e3f6d7c8a9b0c1",
"timestamps": "5,8"
})
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer TU_CLAVE_API_AQUI',
'User-Agent': 'Apifox/1.0.0 (https://apifox.com)',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Diferencia clave con el Método 1
| Aspecto | Método 1 (URL) | Método 2 (Task ID) |
|---|---|---|
| Parámetro de entrada | url |
from_task |
| Fuente del video | URL externa o CDN | ID de tarea de generación previa |
| Caso de uso típico | Video existente/descargado | Justo después de generar un video |
| Ventaja | Funciona con cualquier video accesible | Más directo, no requiere subir video |
¿Cuándo usar cada método?
Usa Método 1 (URL) cuando:
- Tienes un video ya almacenado en CDN o URL pública
- Quieres extraer personajes de videos antiguos
- Trabajas con videos de múltiples fuentes
Usa Método 2 (Task ID) cuando:
- Acabas de generar un video con Sora 2
- Quieres crear personajes inmediatamente después de la generación
- Tienes el task_id a mano (flujo de trabajo más eficiente)
Ejemplo de respuesta exitosa
{
"id": "char_def456uvw",
"object": "character",
"created": 1735747800,
"model": "sora-2-character",
"status": "completed",
"from_task": "video_f751ab5e8d4c4a91b2e3f6d7c8a9b0c1",
"timestamps": "5,8"
}
Usando el character_id en generación de videos
Una vez que tienes el character_id, puedes usarlo en la API de generación de videos de Sora 2:
import requests
import json
url = "https://api.openai.com/v1/sora/v1/generations"
payload = json.dumps({
"model": "sora-2",
"prompt": "@char_abc123xyz caminando por una playa al atardecer, estilo cinematográfico",
"duration": 10,
"resolution": "1080p"
})
headers = {
'Accept': 'application/json',
'Authorization': 'Bearer TU_CLAVE_API_AQUI',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Nota importante: simplemente incluye @character_id en tu prompt, y Sora 2 generará el video con ese personaje específico manteniendo su apariencia.
Mejores prácticas y consejos
1. Selección de timestamps óptimos
# ❌ Mal: rango demasiado corto (1 segundo)
"timestamps": "5,6"
# ✅ Bien: rango de 3-5 segundos
"timestamps": "5,8"
# ❌ Mal: rango demasiado largo (puede incluir múltiples personajes)
"timestamps": "0,30"
Regla de oro: elige un segmento de 3-5 segundos donde:
- El personaje sea claramente visible
- No haya otros personajes compitiendo
- La iluminación sea buena
- El personaje esté en primer plano o medio plano
2. Gestión de character_ids
# Guarda los character_ids en un diccionario
characters = {
"protagonista": "char_abc123xyz",
"villano": "char_def456uvw",
"amigo": "char_ghi789rst"
}
# Úsalos en prompts
prompt = f"@{characters['protagonista']} y @{characters['amigo']} conversando en un café"
3. Manejo de errores comunes
import requests
import json
def create_character(video_source, timestamps, auth_token):
url = "https://api.openai.com/v1/sora/v1/characters"
# Determina si es URL o task_id
if video_source.startswith("http"):
payload = {"model": "sora-2-character", "url": video_source, "timestamps": timestamps}
else:
payload = {"model": "sora-2-character", "from_task": video_source, "timestamps": timestamps}
headers = {
'Accept': 'application/json',
'Authorization': f'Bearer {auth_token}',
'Content-Type': 'application/json'
}
try:
response = requests.post(url, headers=headers, data=json.dumps(payload))
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
print(f"Error HTTP: {e}")
print(f"Respuesta: {response.text}")
return None
except Exception as e:
print(f"Error inesperado: {e}")
return None
# Uso
result = create_character(
video_source="https://cdn.openai.com/video.mp4",
timestamps="5,8",
auth_token="TU_CLAVE_API"
)
if result:
print(f"Personaje creado exitosamente: {result['id']}")
Comparación de métodos: tabla resumen
| Característica | Método 1: URL | Método 2: Task ID |
|---|---|---|
| Parámetro principal | url |
from_task |
| Velocidad | Depende de la accesibilidad de la URL | Generalmente más rápido |
| Flexibilidad | Alta (cualquier video con URL) | Media (solo videos generados por ti) |
| Caso ideal | Videos existentes, bibliotecas multimedia | Flujo de trabajo de generación continua |
| Requiere upload | No (si ya está en CDN) | No |
| Complejidad | Baja | Baja |
Casos de uso reales
Caso 1: Serie animada de un personaje de marca
# Paso 1: Generar video inicial con el personaje
initial_video = generate_video(prompt="Un chef robot con sombrero blanco cocinando")
# Paso 2: Crear character_id
character = create_character(
video_source=initial_video['task_id'],
timestamps="3,7"
)
# Paso 3: Generar serie de videos con el mismo personaje
scenes = [
f"@{character['id']} comprando ingredientes en el mercado",
f"@{character['id']} preparando pasta en la cocina",
f"@{character['id']} sirviendo platos en un restaurante elegante"
]
for scene in scenes:
video = generate_video(prompt=scene)
print(f"Video generado: {video['id']}")
Caso 2: Contenido educativo con presentador consistente
# Crear personaje del presentador desde video existente
presenter = create_character(
video_source="https://mi-cdn.com/presentador-base.mp4",
timestamps="0,5"
)
# Generar lecciones con el mismo presentador
lessons = [
"Introducción a Python",
"Variables y tipos de datos",
"Estructuras de control"
]
for lesson in lessons:
prompt = f"@{presenter['id']} explicando {lesson} frente a una pizarra digital"
video = generate_video(prompt=prompt, duration=30)
Conclusión
La Sora 2 Character API es una herramienta potente para mantener consistencia de personajes en tus proyectos de video generados por IA. Los dos métodos de creación (URL y Task ID) te dan flexibilidad según tu flujo de trabajo:
- Método URL: ideal para trabajar con videos existentes
- Método Task ID: perfecto para flujos de generación continua
El parámetro timestamps es tu mejor aliado para extraer el personaje correcto del segmento correcto. Con práctica y estas mejores prácticas, podrás crear series de videos con personajes que mantienen su identidad visual a través de múltiples escenas y contextos.
Próximo paso: prueba crear tu primer personaje con uno de estos métodos y experimenta usándolo en diferentes prompts. ¡La consistencia de personajes nunca fue tan accesible!
Recomendación: para trabajar con estas APIs de forma estable y económica, te sugerimos usar APIYI – una plataforma confiable de API de modelos de IA con precios competitivos y prueba gratuita. Ideal tanto para desarrollo como para producción.
Sora 2 Character API: dos métodos de creación
Método 1: Extracción de personaje desde URL de video
Esta es la forma más directa, ideal cuando ya tienes material de video disponible.
Descripción de parámetros de solicitud:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
model |
string | ✅ | Valor fijo sora-2-character |
url |
string | ✅ | URL públicamente accesible del video |
timestamps |
string | ✅ | Rango de tiempo donde aparece el personaje, formato "segundo_inicio,segundo_fin" |
Ejemplo completo de solicitud:
curl https://api.apiyi.com/sora/v1/characters \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-your-api-key" \
-d '{
"model": "sora-2-character",
"url": "https://your-cdn.com/video/character-source.mp4",
"timestamps": "5,8"
}'
⚠️ Consideraciones importantes:
- La URL del video debe ser públicamente accesible: Los servidores de OpenAI necesitan poder leer el video
- Configurar CDN globalmente: Si usas OSS/CDN, asegúrate de configurar aceleración global para evitar que los servidores de OpenAI (generalmente en el extranjero) no puedan acceder
- Rango de tiempo en timestamps:
- Diferencia mínima: 1 segundo
- Diferencia máxima: 3 segundos
- Ejemplo:
"5,8"significa del segundo 5 al segundo 8 del video
Método 2: Reutilizar personaje desde ID de tarea
Si previamente has generado videos a través de la API de Sora 2, puedes usar directamente el ID de tarea de ese video para extraer el personaje, sin necesidad de subir el video nuevamente.
Descripción de parámetros de solicitud:
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
model |
string | ✅ | Valor fijo sora-2-character |
from_task |
string | ✅ | ID de tarea del video generado previamente |
timestamps |
string | ✅ | Rango de tiempo donde aparece el personaje |
Ejemplo completo de solicitud:
curl https://api.apiyi.com/sora/v1/characters \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-your-api-key" \
-d '{
"model": "sora-2-character",
"from_task": "video_f751abfd-87a9-46e2-9236-1d94743c5e3e",
"timestamps": "5,8"
}'
Ventajas de este método:
- ✅ No requiere subir video adicional, ahorra ancho de banda
- ✅ Reutiliza directamente activos de video ya generados
- ✅ Flujo de trabajo más fluido, ideal para procesamiento por lotes
- ✅ Evita problemas de expiración o acceso a URLs de video
Recomendación: Llama a la API de Sora 2 Character a través de APIYI apiyi.com, la plataforma ofrece servicios de acceso estables y créditos de prueba gratuitos.
Comparación de los dos métodos de Sora 2 Character API

| Dimensión de comparación | Método URL de video | Método ID de tarea |
|---|---|---|
| Escenario de uso | Material de video existente | Reutilizar videos generados por Sora |
| Parámetro | url |
from_task |
| Requiere subida | Requiere URL de video públicamente accesible | No requiere, referencia directa al ID de tarea |
| Requisitos de red | CDN debe ser accesible globalmente | Sin requisitos adicionales |
| Flujo de trabajo | Procesamiento de material independiente | Se integra con el flujo de generación de video |
| Escenario recomendado | Importar personajes de videos externos | Generar videos en serie por lotes |
¿Cómo elegir?
Elige el método de URL de video cuando:
- Tienes material de video existente (como videos grabados con personas reales, videos descargados de otras plataformas)
- Necesitas extraer personajes de videos no generados por Sora
Elige el método de ID de tarea cuando:
- Estás usando la API de Sora 2 para generar videos por lotes
- Quieres extraer personajes de videos ya generados para usarlos en videos subsecuentes de la serie
- Buscas un flujo de trabajo automatizado más fluido
Explicación detallada del parámetro timestamps en la API de Character de Sora 2
timestamps es el parámetro más crucial de la Character API, ya que determina desde qué segmento temporal del video se extraerá el personaje.
Reglas de formato de timestamps
| Regla | Descripción | Ejemplo |
|---|---|---|
| Formato | "segundo_inicio,segundo_fin" |
"5,8" |
| Tipo | string (cadena de texto) | Debe ir entre comillas |
| Diferencia mínima | 1 segundo | "3,4" ✅ |
| Diferencia máxima | 3 segundos | "5,8" ✅ |
| Fuera de límites | Genera error | "1,10" ❌ |
Consejos para configurar timestamps
- Elige fragmentos donde el personaje sea claramente visible: El personaje debe aparecer completo en la escena, sin obstrucciones
- Evita segmentos con movimiento rápido: Selecciona intervalos donde el personaje esté relativamente estático o en movimiento lento
- Asegúrate de que haya buena iluminación: Los fragmentos bien iluminados permiten extraer características del personaje más precisas
- Prioriza tomas frontales: Si es posible, elige fragmentos donde el personaje mire hacia la cámara
Escenario de ejemplo:
Imagina que tienes un video de 10 segundos, donde el personaje aparece de frente en los segundos 2-4, y de perfil en movimiento en los segundos 6-9:
// Recomendado: selecciona el fragmento frontal y claro
{
"timestamps": "2,4"
}
// No recomendado: personaje de perfil en movimiento
{
"timestamps": "6,9"
}
Flujo de trabajo completo de la API de Character de Sora 2
Ejemplo de código en Python
import requests
import time
# Configuración de la interfaz APIYI
API_BASE = "https://api.apiyi.com/sora/v1"
API_KEY = "sk-your-api-key"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
def create_character_from_url(video_url: str, timestamps: str) -> dict:
"""Método 1: Crear personaje desde URL de video"""
response = requests.post(
f"{API_BASE}/characters",
headers=headers,
json={
"model": "sora-2-character",
"url": video_url,
"timestamps": timestamps
}
)
return response.json()
def create_character_from_task(task_id: str, timestamps: str) -> dict:
"""Método 2: Crear personaje desde ID de tarea"""
response = requests.post(
f"{API_BASE}/characters",
headers=headers,
json={
"model": "sora-2-character",
"from_task": task_id,
"timestamps": timestamps
}
)
return response.json()
# Ejemplo de uso
# Método 1: Crear desde URL de video
result1 = create_character_from_url(
video_url="https://your-cdn.com/video/hero.mp4",
timestamps="5,8"
)
print(f"Tarea de creación de personaje: {result1}")
# Método 2: Crear desde ID de tarea
result2 = create_character_from_task(
task_id="video_f751abfd-87a9-46e2-9236-1d94743c5e3e",
timestamps="2,4"
)
print(f"Tarea de creación de personaje: {result2}")
Ver código completo del flujo de creación y uso de personajes
import requests
import time
API_BASE = "https://api.apiyi.com/sora/v1"
API_KEY = "sk-your-api-key"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
def create_character(video_url: str, timestamps: str) -> str:
"""Crea un personaje y devuelve el ID del personaje"""
# 1. Iniciar solicitud de creación de personaje
response = requests.post(
f"{API_BASE}/characters",
headers=headers,
json={
"model": "sora-2-character",
"url": video_url,
"timestamps": timestamps
}
)
task_data = response.json()
task_id = task_data.get("task_id")
# 2. Polling hasta completar la tarea
while True:
status_response = requests.get(
f"{API_BASE}/characters/{task_id}",
headers=headers
)
status_data = status_response.json()
if status_data.get("status") == "completed":
return status_data.get("character_id")
elif status_data.get("status") == "failed":
raise Exception(f"Error al crear personaje: {status_data}")
time.sleep(5) # Verificar cada 5 segundos
def generate_video_with_character(prompt: str, character_id: str) -> str:
"""Genera video usando un personaje"""
# Referenciar el personaje en el prompt mediante @character_id
full_prompt = f"@{character_id} {prompt}"
response = requests.post(
f"{API_BASE}/videos",
headers=headers,
json={
"model": "sora-2",
"prompt": full_prompt,
"duration": 8,
"resolution": "1080p"
}
)
return response.json()
# Ejemplo de flujo completo
if __name__ == "__main__":
# Paso 1: Crear personaje
character_id = create_character(
video_url="https://your-cdn.com/video/hero.mp4",
timestamps="5,8"
)
print(f"Personaje creado exitosamente, ID: {character_id}")
# Paso 2: Usar el personaje para generar una serie de videos
scenes = [
"walking through a futuristic city at night",
"sitting in a coffee shop, reading a book",
"running on a beach at sunset"
]
for i, scene in enumerate(scenes):
result = generate_video_with_character(scene, character_id)
print(f"Tarea de generación de video {i+1}: {result}")
Consejo: Al conectarte a la API de Character de Sora 2 a través de APIYI (apiyi.com), la plataforma te ofrece funcionalidades completas de gestión de personajes y soporte técnico.
Preguntas frecuentes
P1: ¿Qué hacer si la URL del video no es accesible?
Asegúrate de que la URL del video cumpla con las siguientes condiciones:
- Accesible desde Internet pública: No puede ser una dirección de red interna ni un enlace que requiera inicio de sesión
- Aceleración global CDN: Si usas Alibaba Cloud OSS, AWS S3, etc., debes habilitar la aceleración global o usar un CDN global
- URL no vencida: Si es una URL con firma temporal, asegúrate de que tenga un período de validez suficientemente largo
- Formatos compatibles: Se recomienda usar formato MP4
P2: ¿Cómo manejar errores con el parámetro timestamps?
Errores comunes y soluciones:
- Rango de tiempo superior a 3 segundos: Reduce el rango a 1-3 segundos, por ejemplo
"5,8"→"5,7" - Rango de tiempo inferior a 1 segundo: Asegúrate de que haya al menos 1 segundo de diferencia entre inicio y fin
- Error de formato: Debe ser formato string
"5,8", no puede ser array o número - Excede la duración del video: Asegúrate de que el rango de tiempo esté dentro de la duración total del video
P3: ¿Cómo usar un personaje creado en la generación de videos?
Una vez que el personaje se crea exitosamente, obtendrás un character_id. En las solicitudes posteriores de generación de video, referencia al personaje en el prompt usando el formato @character_id. Por ejemplo:
@char_abc123xyz caminando por una ciudad futurista, luces de neón parpadeando
El sistema aplicará automáticamente las características de ese personaje al video generado, manteniendo una apariencia consistente del personaje.
Resumen
Puntos clave de la API de Character de Sora 2:
- Dos métodos de creación: Extracción desde URL de video y reutilización de ID de tarea, adaptándose flexiblemente a diferentes escenarios
- Parámetro timestamps: Rango de tiempo de 1-3 segundos, selecciona fragmentos donde el personaje sea claramente visible
- Reutilización de personajes: Crea una vez, úsalo múltiples veces en diferentes videos, mantén la consistencia del personaje
- Configuración CDN: Al usar el método de URL de video, asegúrate de que sea accesible globalmente
Una vez que domines la Character API, podrás:
- Crear personajes virtuales reutilizables para tu marca o IP
- Producir contenido de video en serie con personajes consistentes
- Lograr videos narrativos continuos a nivel profesional
Te recomendamos acceder a la API de Character de Sora 2 a través de APIYI apiyi.com, una plataforma que ofrece servicios estables y créditos de prueba gratuitos para ayudarte a dominar rápidamente la funcionalidad de creación de personajes.
📚 Referencias
⚠️ Nota sobre formato de enlaces: Todos los enlaces externos usan el formato
Nombre del recurso: domain.com, fácil de copiar pero sin redirección directa, evitando pérdida de autoridad SEO.
-
Lanzamiento oficial de OpenAI Sora 2: Introducción a funcionalidades y características de Sora 2
- Enlace:
openai.com/index/sora-2/ - Descripción: Información oficial sobre Sora 2 y sus funciones de personajes
- Enlace:
-
Centro de Ayuda OpenAI – Función Characters: Guía de creación y uso de personajes
- Enlace:
help.openai.com/en/articles/12435986-generating-content-with-characters - Descripción: Instrucciones oficiales para usar la función de personajes
- Enlace:
-
Documentación API OpenAI – Video Generation: Documentación técnica de la API Sora
- Enlace:
platform.openai.com/docs/guides/video-generation - Descripción: Especificaciones de interfaz API y explicación de parámetros
- Enlace:
-
Página OpenAI Sora Characters: Presentación del producto de personajes
- Enlace:
openai.com/sora/characters/ - Descripción: Posicionamiento del producto y casos de uso de la función de personajes
- Enlace:
Autor: Equipo Técnico
Intercambio técnico: Te invitamos a participar en la sección de comentarios. Para más recursos, visita la comunidad técnica APIYI apiyi.com
