Generación de vídeo con Sora

Nivel
OpenAI
OpenAI
Actualizado: 23/11/2025

Generación de vídeo

La generación de vídeo con OpenAI se basa en los modelos de la familia Sora, que permiten crear clips a partir de descripciones en lenguaje natural y, opcionalmente, con audio sincronizado. El objetivo práctico es pasar de una idea expresada en un prompt a un archivo de vídeo listo para integrarse en una web, una presentación o una aplicación interna.

En la API de OpenAI, el flujo gira en torno al recurso videos, que gestiona todo el ciclo de vida: creación de tareas de renderizado, consulta de su estado y descarga del contenido final. Este modelo encaja bien en arquitecturas de backend asíncronas, donde el servidor lanza el trabajo de vídeo y el cliente sólo necesita consultar resultados cuando están listos.

Flujo de trabajo con la API de vídeos

Desde un punto de vista de diseño de software, la generación de vídeo con Sora se puede entender como una cola de trabajos de renderizado. Tú defines qué quieres generar, la API programa el procesamiento y, cuando termina, pone a tu disposición el archivo resultante.

Un flujo típico de integración con la API de vídeos suele seguir estos pasos:

  • 1. Definir el prompt y los parámetros básicos: modelo de Sora, número de segundos, proporción de aspecto y si quieres audio. En esta fase decides qué quiere ver y escuchar el usuario final, con un lenguaje lo más específico posible.

  • 2. Crear la tarea de generación (videos.create): envías el prompt y los parámetros, y recibes un identificador de vídeo junto con un estado inicial, normalmente en cola o en procesamiento. Ese identificador será la clave para seguir la trazabilidad del recurso.

  • 3. Consultar el estado de la tarea (videos.retrieve): tu sistema puede interrogar periódicamente la API o usar un mecanismo de notificación para saber cuándo el estado pasa a completado. Mientras el estado no sea final, el contenido todavía no está disponible.

  • 4. Descargar el contenido generado (videos.download_content): una vez completado, puedes obtener el archivo MP4 y guardarlo en tu almacenamiento habitual, por ejemplo en un bucket de objetos o en un CDN interno.

Este enfoque permite desacoplar la experiencia de usuario del tiempo de renderizado, algo clave cuando el vídeo tiene varios segundos y el procesamiento no es inmediato.

Crear un vídeo a partir de texto (Python)

Imagina que quieres generar un clip corto para una página de aterrizaje en la que aparezca un dron sobrevolando una ciudad al atardecer, con un estilo realista y formato horizontal. El problema es cómo pasar de esa descripción en lenguaje natural a un archivo de vídeo reproducible desde tu aplicación.

La solución pasa por usar el método videos.create del cliente oficial de Python, definiendo un prompt claro y los parámetros mínimos de duración y tamaño:

from openai import OpenAI

client = OpenAI()

# Problema: generar un clip horizontal corto y realista
video = client.videos.create(
    model="sora-2",  # Modelo de vídeo de Sora
    prompt=(
        "A drone flying slowly over a modern city at sunset, "
        "realistic style, smooth camera movement, cinematic lighting"
    ),
    # Duración aproximada en segundos
    seconds=8,
    # Resolución y relación de aspecto (horizontal)
    size="1280x720",
    # Activa audio si tu caso de uso lo requiere
    audio=True,
)

print("ID del vídeo:", video.id)
print("Estado inicial:", video.status)

En este ejemplo el prompt describe lo que ocurre en la escena, el estilo visual y el tipo de movimiento de cámara, lo que ayuda al modelo a generar un resultado coherente. El identificador devuelto en la respuesta (video.id) será imprescindible para cualquier operación posterior sobre ese recurso.

Consultar el estado y descargar el contenido

Una vez creada la tarea de renderizado, tu aplicación necesitará saber cuándo el vídeo está disponible y cómo obtener el archivo final. En un escenario típico de backend, esta lógica suele vivir en un job en segundo plano o en un endpoint que consulta estado bajo demanda.

La forma más directa de consultar el progreso y descargar el vídeo con Python sería:

from openai import OpenAI
import time

client = OpenAI()

video_id = "video_123"  # Sustituir por el ID real devuelto por videos.create

# Polling sencillo hasta que el vídeo esté listo
while True:
    video = client.videos.retrieve(video_id)
    print("Estado actual:", video.status)

    if video.status in ("completed", "failed"):
        break

    time.sleep(5)  # Espera entre consultas para no saturar la API

if video.status == "completed":
    response = client.videos.download_content(video_id=video_id)
    content = response.read()

    with open("salida_sora.mp4", "wb") as f:
        f.write(content)

    print("Vídeo descargado en salida_sora.mp4")
else:
    print("La generación de vídeo ha fallado:", video.error)

Este patrón de polling simple resulta suficiente en proyectos pequeños, aunque en sistemas más complejos suele combinarse con colas de mensajes o webhooks para gestionar el estado de forma más eficiente.

Remix y variaciones a partir de un vídeo existente

Además de la generación desde cero, Sora permite remixar un vídeo existente, por ejemplo para alargar una escena, cambiar ligeramente el estilo o adaptar parte del contenido sin perder continuidad visual. Esto es útil cuando ya tienes un clip base aprobado y quieres obtener variantes específicas para distintas plataformas.

Un uso típico de videos.remix en Python sería:

from openai import OpenAI

client = OpenAI()

# Problema: extender una escena ya generada manteniendo la coherencia visual
video = client.videos.remix(
    video_id="video_123",  # ID de un vídeo existente
    prompt=(
        "Extend the scene with the drone rising above the skyline "
        "and revealing the full city panorama, same style and pacing"
    ),
    seconds=6,  # Duración adicional deseada
)

print("Nuevo ID de vídeo:", video.id)
print("Estado inicial:", video.status)

En este caso el prompt se formula como una instrucción de modificación sobre el material de origen, evitando redefinir desde cero detalles que ya están presentes en el vídeo original. De este modo se mantiene una continuidad estética y narrativa que suele ser apreciada en contextos de marca.

Buenas prácticas al diseñar prompts de vídeo

La calidad del resultado de Sora depende en gran medida de cómo redactes el prompt, por lo que merece la pena invertir algo de diseño previo antes de integrarlo en tu flujo de trabajo. Pensar el prompt como un pequeño guion técnico ayuda a obtener resultados más consistentes y repetibles.

Algunas recomendaciones prácticas para prompts de vídeo son:

  • 1. Describe claramente la acción principal: indica qué está ocurriendo, quién participa y qué movimiento hay en escena. Por ejemplo, “a person walking through a busy market, camera following from behind, handheld style”.

  • 2. Especifica estilo visual y tono: realista, animación 3D, ilustración minimalista, estética cinematográfica, entre otras opciones. Estos matices ayudan al modelo a ajustar iluminación, texturas y color.

  • 3. Indica plano y movimiento de cámara: planos generales, primeros planos, travellings o panorámicas. En vídeo estos detalles marcan la diferencia entre un clip genérico y una toma útil para producción.

  • 4. Ajusta duración y formato a tu canal de distribución: no es lo mismo un vídeo vertical para móvil que un formato horizontal para una web corporativa, por lo que conviene alinear segundos y tamaño con el caso de uso real.

  • 5. Evita contenido restringido: la API rechaza vídeos que incluyan personas reales, elementos protegidos por derechos de autor o contenido inadecuado para menores, de modo que es importante revisar el prompt antes de enviarlo.

Integrar estas prácticas en tu código —por ejemplo, generando automáticamente parte del prompt a partir de metadatos de tu aplicación— facilita mantener una calidad consistente y reduce iteraciones manuales.

Restricciones de contenido y consideraciones de producto

En cualquier integración profesional con Sora es fundamental respetar las políticas de uso de OpenAI, que condicionan qué tipo de contenido puede generarse. Esto no sólo evita errores en la API, sino que reduce riesgos legales y reputacionales en proyectos en producción.

De forma general, debes evitar solicitar a la API vídeos con rostros de personas reales, recreaciones de figuras públicas, logotipos o música con derechos de autor, así como escenas que no serían aptas para un público menor de edad. Conviene incorporar estas restricciones en la validación de entrada de tu backend, de modo que los prompts problemáticos nunca lleguen a la llamada a la API.

Para detalles específicos sobre parámetros admitidos, modelos disponibles, límites de duración y normas de seguridad, es recomendable revisar periódicamente la documentación oficial de OpenAI sobre generación de vídeo con Sora: https://platform.openai.com/docs/guides/video-generation.

Alan Sastre - Autor del tutorial

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, OpenAI es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.

Más tutoriales de OpenAI

Explora más contenido relacionado con OpenAI y continúa aprendiendo con nuestros tutoriales gratuitos.

Aprendizajes de esta lección