Dela via


Videogenerering med Sora (förhandsversion)

Sora är en AI-modell från OpenAI som skapar realistiska och fantasifulla videoscener från textinstruktioner och/eller indatabilder eller video. Modellen kan generera ett brett utbud av videoinnehåll, inklusive realistiska scener, animeringar och specialeffekter. Den stöder flera videoupplösningar och varaktigheter. Azure OpenAI stöder två versioner av Sora:

  • Sora (eller Sora 1): Azure OpenAI–specifik implementering som släpptes som ett API i tidig förhandsversion.
  • Sora 2: Det senaste OpenAI-baserade API:et, som nu är tillgängligt med Azure OpenAI v1 API.

Översikt

  • Modaliteter: text → video, bild → video, video (genererad) → video
  • Ljud: Sora 2 stöder ljudgenerering i utdatavideor (liknar Sora-appen).
  • Remix: Sora 2 introducerar möjligheten att remixa befintliga videor genom att göra riktade justeringar istället för att återskapa från grunden.

Sora 1 mot Sora 2

Aspekt Sora 1 (Azure OpenAI) Sora 2 (OpenAI-baserat API)
Modelltyp Azure-specifik API-implementering Anpassar OpenAI:s senaste Sora API med hjälp av v1 API
Tillgänglighet Tillgänglig exklusivt på Azure OpenAI (förhandsversion) Lanseras i Azure; Sora 2 Pro kommer senare
Stöd för modaliteter text → video, bild → video, video → video text → video, bild → video, video (genererad) → video
Ljudgenerering ❌ Stöds inte ✅ Stöds i output
Remix-funktion ❌ Stöds inte ✅ Stöds – göra riktade ändringar i befintliga videor
API-beteende Använder Azure-specifikt API-schema Överensstämmer med OpenAI:s interna Sora 2-schema
Prestanda och återgivning Tidig förhandsversion; begränsad realism och rörelseomfång Förbättrad realism, fysik och temporal konsekvens
Avsedd användning Implementeringar av företagsförhandsgranskning Bredare tillgänglighet för utvecklare med förbättrad API-paritet

Sora 2 API

Ger 5 slutpunkter, var och en med olika funktioner.

  • Skapa video: Starta ett nytt återgivningsjobb från en prompt, med valfria referensindata eller ett remix-ID.
  • Hämta videostatus: Hämta det aktuella tillståndet för ett renderingsjobb och övervaka dess förlopp
  • Ladda ned video: Hämta den färdiga MP4-filen när jobbet har slutförts.
  • Lista videor: Räkna upp dina videor med sidnumrering för historik, instrumentpaneler eller underhåll.
  • Ta bort videor: Ta bort ett enskilt video-ID från Azure OpenAI:s lagring

API-parametrar

Parameter Typ Sora 2
Uppmaning Sträng (krävs) Beskrivning av skottet på naturligt språk. Inkludera skotttyp, ämne, åtgärd, inställning, belysning och alla önskade kamerarörelser för att minska tvetydigheten. Håll den enkel och målinriktad för bästa efterlevnad.
Modell Sträng (valfritt) Sora-2 (standardinställning)
Storlek (utdataupplösning i bredd × höjd) Sträng (valfritt) Porträtt: 720×1280
Landskap: 1280×720
Standard: 720×1280
sekunder Sträng (valfritt) 4 / 8 / 12
Standard: 4
Indatareferens Fil (valfritt) En referensbild används som ett visuellt referensankare för första ramen.
Accepterade MIME-typer: image/jpeg, image/png, image/webp. Måste matcha storleken exakt.
Remix_video_id Sträng (valfritt) ID för en tidigare slutförd video (t.ex. video_...) för återanvändning av struktur, rörelse och inramning. Samma som Sora 2

Sora 2 API använder v1-API :et och har samma struktur som OpenAI-API:et.

videos.create()

Du måste uppdatera till den senaste versionen av OpenAI-klienten med pip install openai --upgrade för att förhindra AttributeError: 'OpenAI' object has no attribute 'videos'.

from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)

video = client.videos.create(
    model="sora-2", # Replace with Sora 2 model deployment name
    prompt="A video of a cool cat on a motorcycle in the night",
)

print("Video generation started:", video)

Skapa en video och övervaka jobbstatus med en undersökning

Anropa GET /videos/{video_id} med det ID som returneras från skapa-anropet. Svaret visar jobbets aktuella status, förloppsprocent och eventuella fel.

Förväntade tillstånd är queued, in_progress, completedoch failed.

Synkron:

Använd den här versionen om du testar i Jupyter Notebooks för att undvika RuntimeError: asyncio.run() cannot be called from a running event loop

import time
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = OpenAI(  
    base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
    api_key=token_provider,
)

# Create the video (don't use create_and_poll)
video = client.videos.create(
    model="sora-2", # Replace with Sora 2 model deployment name
    prompt="A video of a cat on a motorcycle",
)

print(f"Video creation started. ID: {video.id}")
print(f"Initial status: {video.status}")

# Poll every 20 seconds
while video.status not in ["completed", "failed", "cancelled"]:
    print(f"Status: {video.status}. Waiting 20 seconds...")
    time.sleep(20)
    
    # Retrieve the latest status
    video = client.videos.retrieve(video.id)

# Final status
if video.status == "completed":
    print("Video successfully completed!")
    print(video)
else:
    print(f"Video creation ended with status: {video.status}")
    print(video)

Asynkrona:

import asyncio
from openai import AsyncOpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = AsyncOpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)

async def main() -> None:
    video = await client.videos.create_and_poll(
        model="sora-2", # Replace with Sora 2 model deployment name
        prompt="A video of a cat on a motorcycle",
    )

    if video.status == "completed":
        print("Video successfully completed: ", video)
    else:
        print("Video creation failed. Status: ", video.status)


asyncio.run(main())

Ladda ned video

from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)

video_id = "your_video_id_here"

content = client.videos.download_content(video_id, variant="video")
content.write_to_file("video.mp4")

print("Saved video.mp4")

Videogenerering från referenskälla

Med input_refernce parametern kan du transformera befintliga bilder och videor med Sora 2. Källbildens/videons och den slutliga videons upplösning måste matcha. Värden som stöds är 720x1280, 1280x720, 1024x1792och 1792x1024.

Lokal referensfil:

from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)

# With local file
video = client.videos.create(
    model="sora-2",
    prompt="Describe your desired output within the context of the reference image/video",
    size="1280x720",
    seconds=8,
    input_reference=open("test.png", "rb"), # This assumes the image test.png is in the same directory as the executing code
)

print("Video generation started:", video)

URL-baserad referensfil:

from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
import requests
from io import BytesIO

token_provider = get_bearer_token_provider(
    DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default"
)

client = OpenAI(  
  base_url = "https://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/",  
  api_key=token_provider,
)

# With image URL
image_url = "https://path-to-your-file/image_file_name.jpg"
response = requests.get(image_url)
image_data = BytesIO(response.content)
image_data.name = "image_file_name.jpg"

video = client.videos.create(
    model="sora-2",
    prompt="Describe your desired output within the context of the reference image/video",
    size="1280x720",
    seconds=8,
    input_reference=image_data,
)

print("Video generation started:", video)

Redigera video

Anmärkning

Det finns för närvarande ett känt problem med Sora 2 och remixing för Azure OpenAI- och Azure AI Foundry-resurser. Remix-kommandona körs korrekt, men den genererade videon baseras inte på det tidigare genererade video-ID:t som förväntat. Vi uppdaterar den här sidan så snart problemet har lösts.

Så här fungerar det

Videogenerering är en asynkron process. Du skapar en jobbbegäran med specifikationerna för textprompt och videoformat, och modellen bearbetar begäran i bakgrunden. Du kan kontrollera statusen för videogenereringsjobbet och när det är klart hämtar du den genererade videon via en nedladdnings-URL.

Bästa praxis för ledtrådar

Skriv textfrågor på engelska eller andra latinska skriptspråk för bästa prestanda för videogenerering.

Begränsningar

Begränsningar för innehållskvalitet

Sora kan ha problem med komplex fysik, kausala relationer (till exempel bitmärken på en cookie), spatiala resonemang (till exempel att känna till vänster från höger) och exakt tidsbaserad händelsesekvensering som kamerarörelse.

Tekniska begränsningar för Sora 2

  • Se Information om Sora 2 API ovan
  • Jobb är tillgängliga i upp till 24 timmar efter att de har skapats. Därefter måste du skapa ett nytt jobb för att generera videon igen.
  • Du kan ha två jobb för att skapa video samtidigt. Du måste vänta tills ett av jobben har slutförts innan du kan skapa ett annat.

Tekniska begränsningar för Sora 1

  • Sora stöder följande utdataupplösningsdimensioner: 480x480, 480x854, 854x480, 720x720, 720x1280, 1280x720, 1080x1080, 1080x1920, 1920x1080.
  • Sora kan producera videor mellan 1 och 20 sekunder långa.
  • Du kan begära flera videovarianter i ett enda jobb: för 1080p-upplösningar är den här funktionen inaktiverad. för 720p är maxvärdet två varianter. för andra lösningar är maxvärdet fyra varianter.
  • Du kan ha två jobb för att skapa video samtidigt. Du måste vänta tills ett av jobben har slutförts innan du kan skapa ett annat.
  • Jobb är tillgängliga i upp till 24 timmar efter att de har skapats. Därefter måste du skapa ett nytt jobb för att generera videon igen.
  • Du kan använda upp till två bilder som indata (den genererade videon interpolerar innehåll mellan dem).
  • Du kan använda en video upp till fem sekunder som indata.

Ansvarsfull AI

Sora har en robust säkerhetsstack som innehåller innehållsfiltrering, övervakning av missbruk, blockering av känsligt innehåll och säkerhetsklassificerare.

Sora genererar inte scener med våldshandlingar utan kan generera intilliggande innehåll, till exempel realistiska krigsliknande bilder.