|

Sora 2 Character API Tutorial Completo: 2 Métodos para Crear Personajes Reutilizables y Lograr Consistencia de Personajes entre Videos

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:

  1. Extraer personajes del video: Especificar un personaje que aparece en cierto período del video y extraer sus características
  2. Obtener ID de personaje: El sistema devuelve un identificador único de personaje (character_id)
  3. Reutilizar entre videos: Invocar ese personaje mediante @character_id en generaciones posteriores
  4. 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.

sora-2-character-api-tutorial-create-reusable-characters-es 图示


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:

  1. La URL del video debe ser públicamente accesible: Los servidores de OpenAI necesitan poder leer el video
  2. 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
  3. 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

sora-2-character-api-tutorial-create-reusable-characters-es 图示

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

  1. Elige fragmentos donde el personaje sea claramente visible: El personaje debe aparecer completo en la escena, sin obstrucciones
  2. Evita segmentos con movimiento rápido: Selecciona intervalos donde el personaje esté relativamente estático o en movimiento lento
  3. Asegúrate de que haya buena iluminación: Los fragmentos bien iluminados permiten extraer características del personaje más precisas
  4. 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:

  1. Accesible desde Internet pública: No puede ser una dirección de red interna ni un enlace que requiera inicio de sesión
  2. Aceleración global CDN: Si usas Alibaba Cloud OSS, AWS S3, etc., debes habilitar la aceleración global o usar un CDN global
  3. URL no vencida: Si es una URL con firma temporal, asegúrate de que tenga un período de validez suficientemente largo
  4. Formatos compatibles: Se recomienda usar formato MP4

P2: ¿Cómo manejar errores con el parámetro timestamps?

Errores comunes y soluciones:

  1. Rango de tiempo superior a 3 segundos: Reduce el rango a 1-3 segundos, por ejemplo "5,8""5,7"
  2. Rango de tiempo inferior a 1 segundo: Asegúrate de que haya al menos 1 segundo de diferencia entre inicio y fin
  3. Error de formato: Debe ser formato string "5,8", no puede ser array o número
  4. 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:

  1. 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
  2. Parámetro timestamps: Rango de tiempo de 1-3 segundos, selecciona fragmentos donde el personaje sea claramente visible
  3. Reutilización de personajes: Crea una vez, úsalo múltiples veces en diferentes videos, mantén la consistencia del personaje
  4. 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.

  1. 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
  2. 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
  3. 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
  4. 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

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

Publicaciones Similares