Weiter zum Inhalt

Sora 2 API mit Python: Der komplette Guide mit Beispielen

Lerne, wie du deine Videoideen mit der Sora 2 API zum Leben erweckst – mit diesem umfassenden Guide zur Nutzung von Python für die Interaktion mit der OpenAI API.
Aktualisiert 18. Sept. 2026  · 8 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Sora 2 wurde Ende September veröffentlicht – mit dem Versprechen, bald über die OpenAI API verfügbar zu sein. Dieser Moment ist jetzt da, und ich zeige dir, wie du sie nutzt und das Maximum herausholst.

In diesem Tutorial führe ich dich Schritt für Schritt durch die Erstellung von KI-Videos mit Python. Wenn du mehr über Sora 2 erfahren und es direkt auf OpenAI nutzen möchtest, lies am besten diesen Sora 2-Artikel. Um Konkurrenztools zu vergleichen, empfehle ich unseren Seedance 2.0-Guide und das Veo 3.1-Tutorial.

Hier ein Beispiel für die Art von Videos, die du am Ende dieses Tutorials erstellen kannst:

Erste Schritte mit der OpenAI API

Zum Start brauchen wir ein OpenAI-Konto und einen API-Schlüssel. Gehe dazu auf die API-Key-Seite und klicke oben rechts auf "Create new secret key".

Diesen Schlüssel verwenden wir, um Anfragen an die OpenAI API zu senden. Wir speichern ihn in einer Datei namens .env im Ordner, in dem wir unsere Python-Skripte schreiben. Halte den Schlüssel unbedingt geheim, denn jede Person könnte sonst über dein Konto die API nutzen.

Füge den API-Key in die .env-Datei im folgenden Format ein:

OPENAI_API_KEY=<paste_api_key_here>

Beachte, dass die Nutzung der API nicht kostenlos ist, deshalb musst du dein Konto aufladen, bevor du Videos mit Sora 2 generieren kannst. Zur Orientierung: Hier ist der Preis pro Sekunde für Sora 2:

Sora 2 Preistabelle.

Ein Sora 2-Video mit Python erzeugen

Den gesamten Code für dieses Tutorial findest du im zugehörigen GitHub-Repository.

Für die Kommunikation mit der OpenAI API in Python verwenden wir das Paket openai. Da Sora neu in der API ist, benötigen wir eine aktuelle Paketversion.

Installiere (oder aktualisiere) es mit diesem Befehl:

pip install --upgrade openai

Erstelle ein neues Skript namens generate_video.py im selben Ordner wie die zuvor angelegte .env-Datei.

Als Erstes importieren wir die benötigten Pakete. Das verwenden wir:

  • os: Ein eingebautes Paket zur Interaktion mit dem Betriebssystem;
  • openai: Das offizielle OpenAI-Paket zur Interaktion mit der API;
  • dotenv: Ein Paket, das das Laden von Umgebungsvariablen aus der .env-Datei erleichtert. Hiermit laden wir den OpenAI API-Key.
import os
from openai import OpenAI 
from dotenv import load_dotenv

Als Nächstes laden wir die .env-Datei:

load_dotenv()
API_KEY = os.getenv("OPENAI_API_KEY")

Mit dem in den Speicher geladenen API-Key initialisieren wir den OpenAI-Client, über den wir Anfragen an die OpenAI API senden. Wir verwenden die os-Bibliothek, um den Key zu laden:

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

Zum Schluss nutzen wir die Funktion videos.create des Clients, um ein Video zu generieren:

video = client.videos.create(
    prompt="A cat and a dog dancing",
)
print(video.id)

Wenn wir die Videogenerierung anstoßen, erhalten wir nicht sofort ein Video, da die Erstellung einige Zeit dauert. Das bedeutet, die Variable video ist nicht das Video selbst, sondern ein Objekt mit Informationen zum Generierungsauftrag.

Darum haben wir die Video-ID ausgegeben. Diese Information benötigen wir, um:

  1. Den Fortschritt der Videogenerierung zu verfolgen.
  2. Das Video abzurufen.

Beide Schritte erklären wir unten im Detail.

Hier ist mein Ergebnis:

Video-Fortschritt verfolgen

Wir können den Status eines Jobs mit der Funktion videos.retrieve() abrufen, indem wir die Job-ID übergeben, so:

job = client.videos.retrieve(job_id)
status = job.status
progress = job.progress
print(f"Status: {status}, {progress}%")

Wir müssen warten, bis der Fortschritt 100% erreicht, um das Video herunterladen zu können. Der Einfachheit halber bauen wir eine Funktion wait_for_video_to_finish(), die den Status eines Jobs überwacht, bis er abgeschlossen ist:

def wait_for_video_to_finish(video_id, poll_interval=5, timeout=600):
    """
    Poll status until the video is ready or timeout is reached.
    Returns the final job info.
    """
    client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
    elapsed = 0  # Keep track of the elapsed time
    while elapsed < timeout:
        job = client.videos.retrieve(video_id)
        status = job.status
        progress = job.progress
        print(f"Status: {status}, {progress}%")
        if status == "completed":
            return job
        if status == "failed":
            raise RuntimeError(f"Failed to generate the video: {job.error.message}") 
        time.sleep(poll_interval)
        elapsed += poll_interval
    raise RuntimeError("Polling timed out")

Die Funktion hat drei Parameter:

  • video_id: Die Kennung des Videos, das wir tracken wollen.
  • poll_interval: Sekunden zwischen zwei Statusabfragen.
  • timeout: Maximale Wartezeit in Sekunden.

Diese Funktion prüft den Status regelmäßig, bis das Video fertig ist oder die Wartezeit überschritten wird.

Das Video herunterladen

Da wir den Fortschritt nun tracken können, brauchen wir nur noch einen Weg, das Video nach Fertigstellung herunterzuladen. Das erreichen wir mit videos.download_content().

Hier ist eine passende Funktion:

def download_video(video_id):
    client = get_client()
    response = client.videos.download_content(
        video_id=video_id,
    )
    video_bytes = response.read()
    with open(f"{video_id}.mp4", "wb") as f:
        f.write(video_bytes)

Kompletter Sora-Workflow zur Videogenerierung

Diese Schritte lassen sich zu einem durchgehenden Workflow mit Sora kombinieren:

prompt = "A cat and a dog dancing"
video = client.videos.create(
    prompt="A cat and a dog dancing",
)
video_id = video.id
print(f"Started generating video with id {video_id}")
wait_for_video_to_finish(video_id)
download_video(video_id)

Videogröße und -dauer festlegen

Das obige Skript nutzt nur einen Text-Prompt zur Generierung. Die OpenAI Sora 2 API bietet jedoch weitere Optionen, z. B.:

  • model: Das Modell zur Videogenerierung. Standard ist sora-2.
  • resolution: Die Videogröße. Standardmäßig ist das Video 720x1280.
  • duration: Länge des Videos in Sekunden. Standard sind 4 Sekunden.

Hier ist eine Tabelle mit allen möglichen Werten je nach Modus (fett markiert sind die Standardwerte):

Tabelle mit Parametern der Sora 2 API

Damit das Skript einfacher nutzbar ist, können wir das eingebaute Paket argparse verwenden, sodass die Nutzenden die Parameterwerte angeben können.

So setzt du die Argumente prompt und model mit argparse:

parser = argparse.ArgumentParser()
parser.add_argument(
    "--prompt", # Name of the argument
    required=True, # Specify that the argument is required
    help="The video prompt.", # Helper text
)
parser.add_argument(
    "--model",
    default="sora-2", # Specify a default value for the argument
    choices=["sora-2", "sora-2-pro"], # Specify a list of possible values for the argument
    help="Model to use (sora-2 or sora-2-pro).",
)

Zum Laden der Argumente rufen wir parse_args() auf, so:

args = parser.parse_args()
prompt = args.prompt
model = args.model

Das generate_video_pipeline.py-Skript im GitHub-Repository fügt alle Bausteine zusammen, um Videos mit Sora 2 zu generieren.

So startest du es im Terminal mit konkreten Parametern:

python generate_video_pipeline.py --prompt "A family of dogs driving a car" --model sora-2-pro  --size 1280x720 --seconds 8

Das war das Ergebnis:

Sora 2 API: Prompt-Tipps

OpenAI stellt einen ausführlichen Prompt-Guide für Sora 2 bereit.

Die Grundideen für gute Sora 2-Prompts sind:

  • Details und Freiheit austarieren: Konkrete Prompts geben Kontrolle; einfache laden zu Kreativität ein.
  • Parameter in der API setzen: Modell (sora-2 oder sora-2-pro), Auflösung und Clip-Länge explizit definieren.
  • In Shots denken: Kameraeinstellung, Licht, Motiv und eine klare Aktion pro Shot beschreiben.
  • Anschaulich und konkret sein: „Nasser Asphalt unter Neonlichtern“ schlägt „eine schöne Straße“.
  • Bewegung einfach halten: Eine Subjektaktion + eine Kamerabewegung funktionieren am besten.
  • Licht: Lichtqualität, -richtung und Farbpalette für Konsistenz definieren.
  • Bildreferenzen nutzen: Einen visuellen Anker für Stil und Komposition hinzufügen.
  • Dialog: Kurze, natürliche Zeilen; klar gekennzeichnet; pro Clip begrenzen.
  • Mit Remix iterieren: Immer nur ein Element (Licht, Linse, Palette) anpassen für gezielte Kontrolle.

Diese Ideen fassen sie in der folgenden Prompt-Vorlage zusammen:

[Prose scene description in plain language. Describe characters, costumes, scenery, weather and other details. Be as descriptive to generate a video that matches your vision.]
Cinematography:
Camera shot: [framing and angle, e.g. wide establishing shot, eye level]
Mood: [overall tone, e.g. cinematic and tense, playful and suspenseful, luxurious anticipation]
Actions:
- [Action 1: a clear, specific beat or gesture]
- [Action 2: another distinct beat within the clip]
- [Action 3: another action or dialogue line]
Dialogue:
[If the shot has dialogue, add short natural lines here or as part of the actions list. Keep them brief so they match the clip length.]

Lange Prompts im Terminal einzugeben ist unpraktisch. Um die Nutzung zu verbessern, passen wir unser Skript so an, dass es beim Suffix .txt davon ausgeht, dass ein Dateipfad zu einer Textdatei mit dem Prompt übergeben wurde. 

So erweitern wir das Skript entsprechend:

...
args = parser.parse_args()
prompt = args.prompt
if prompt.endswith(".txt"):
    with open(prompt, "rt") as f:
        prompt = f.read()
video_id = generate_video(prompt, args.model, args.size, args.seconds)
...

Zum Test habe ich im selben Ordner eine Datei prompt.txt mit folgendem Prompt erstellt:

A polite green alien wearing a beret struggles to order croissants in broken French at a bustling Paris café.

Cinematography:
Camera shot: eye-level shot, warm morning light
Mood: whimsical and awkward
Actions:
The alien studies the pastry display, fascinated.
It points to the baguette, then accidentally eats the napkin.
The waiter shrugs, unfazed, and brings it another napkin.
Dialogue:
Alien (content): “Très… chewy.”

Zur Videogenerierung übergeben wir prompt.txt über den Parameter --prompt:

python generate_video_pipeline.py --prompt prompt.txt --model sora-2-pro  --size 1280x720 --seconds 8

Hier ist das Video:

Man sieht, dass der Prompt nicht vollständig befolgt wurde. Aus meiner Erfahrung mit KI-Videomodellen erziele ich bessere Ergebnisse, wenn ich mehrere einfachere Clips generiere und sie zusammensetze. 

Dafür brauchen wir jedoch Konsistenz zwischen den Clips. Das erreichen wir, indem wir dem Modell eine Referenzgrafik bereitstellen. Genau das lernst du als Nächstes.

Sora 2-Videos auf Basis von Bildern generieren

Um ein Video basierend auf einem Bild zu erstellen, nutzen wir den Parameter input_reference.

So lädst du ein Bild und übergibst es dem Modell als Referenz:

f = open("image_reference.jpeg", "rb")

# Generate the video
video = client.videos.create(
    prompt="The two people walk away from each other.",
    input_reference=f
)

f.close()

wait_for_video_to_finish(video.id)
download_video(video.id)

Das Skript generate_video_with_reference.py im GitHub-Repository zeigt ein voll funktionsfähiges Beispiel. Ausgeführt mit der Referenzgrafik erhielten wir dieses Ergebnis:

Damit die Bildreferenz funktioniert, muss sie dieselbe Größe haben wie das für die Videogenerierung angeforderte Format.

Wir können das Paket Pillow verwenden, um die Referenzgrafik vorab automatisch auf die passende Größe zu bringen. Beachte jedoch: Weicht das Seitenverhältnis stark ab, wird das Bild verzerrt – das führt meist zu schlechten Videos.

Installiere es mit:

pip install Pillow

Das sora.py-Skript enthält eine Implementierung der Funktion generate_video(), die unseren früheren Code erweitert und die Bildgröße bei Bedarf automatisch anpasst.

Das generate_video_pipeline_reference.py-Skript zeigt, wie wir den Referenzparameter in das Videogenerierungsskript integrieren.

Hier ist ein Beispiel, das auf einem Foto basiert und die Auto-Resize-Funktion nutzt:

Videoreferenzen verwenden

Das hier erstellte Skript kann sowohl Video- als auch Bildreferenzen verarbeiten. Allerdings erhielt ich bei dem Versuch, ein Video mit einer Videoreferenz zu generieren, stets folgenden Fehler:

Video inpaint is not available for your organization

Laut dem Forum scheint das ein häufiges Problem zu sein, was darauf hindeutet, dass diese Funktion noch nicht für alle über die API verfügbar ist. Wir müssen uns hier also noch etwas gedulden.

Weitere Einschränkungen

Bei meiner Arbeit mit Sora 2 kam es häufig vor, dass Sora die Videogenerierung verweigerte, da das Moderationssystem die Anfrage blockierte:

RuntimeError: Video generation failed: Your request was blocked by our moderation system.

Ich verstehe, dass solche Systeme strenge Moderation benötigen, da sonst großer Schaden möglich wäre. Dennoch habe ich das Gefühl, dass der Moderationsalgorithmus noch nachgeschärft werden muss, denn die Mehrheit meiner Anfragen wurde blockiert – meine ursprüngliche Idee musste ich dadurch aufgeben.

Die Fotos, die ich in Videos umwandeln wollte, enthielten weder sensible Inhalte noch Urheberrechtsprobleme, da alle Bilder von mir stammen. Zudem enthielt die Fehlermeldung keine Hinweise auf die genaue Ursache.

Das ist sehr oft passiert und machte es mir unmöglich, etwas Sinnvolles zu erstellen.

Fazit

Sora 2 eröffnet spannende Möglichkeiten für KI-gestützte Videogenerierung – und dank der Verfügbarkeit über die OpenAI API lässt sich diese moderne Technik jetzt von Entwicklerinnen und Entwicklern unterschiedlichster Hintergründe in Python-Workflows integrieren.

Wenn du diesem Tutorial gefolgt bist, hast du jetzt eine solide Grundlage: eigene Videos über einfache Prompts erstellen, Ergebnisse mit erweiterten Parametern verfeinern und Bildreferenzen für mehr Konsistenz nutzen. Mit der Weiterentwicklung der API werden weitere Features — inklusive ausgereifter Video-zu-Video-Funktionen — hinzukommen und deinen kreativen Werkzeugkasten erweitern.

Egal ob du mit verspielten Prompts experimentierst, komplexe Storyboards baust oder neuartige Multimedia-Apps entwickelst – Sora 2 bringt deine Ideen zum Leben. Sieh dir auch unseren Guide zu Metas neuem SAM3-Modell an.

Sora 2 API FAQs

Ist die Sora 2 API kostenlos?

Nein. Je nach Modell kostet jede Videosekunde zwischen $0,1 und $0,3.

Ist es m&ouml;glich, ein Video auf Basis eines Bildes zu erstellen?

Ja, wir können mit dem Parameter input_reference eine Referenzgrafik übergeben. Das Bild muss jedoch dieselbe Größe wie das Video haben.

Kann man ein bestehendes Video &uuml;ber die API bearbeiten?

Obwohl Sora 2 Videos bearbeiten kann, ist diese Funktion noch nicht für alle verfügbar.

Wie lange dauert die Videogenerierung mit Sora 2?

Nach unserer Erfahrung dauert es höchstens 2 Minuten.

Kann Sora 2 Audio generieren?

Ja. Wenn im Prompt nichts anderes angegeben ist, enthalten von Sora 2 generierte Videos passende Audiospuren. Über den Prompt lässt sich der Ton steuern – sogar mit Dialogen.


François Aubry's photo
Author
François Aubry
LinkedIn
Full-Stack-Ingenieur und Gründer von CheapGPT. Das Unterrichten war schon immer meine Leidenschaft. Schon als Schülerin habe ich eifrig nach Möglichkeiten gesucht, anderen Schülern Nachhilfe zu geben und sie zu unterstützen. Diese Leidenschaft führte dazu, dass ich einen Doktortitel anstrebte, wobei ich auch als Lehrassistentin tätig war, um meine akademischen Bemühungen zu unterstützen. In diesen Jahren fand ich im traditionellen Klassenzimmer große Erfüllung, indem ich Verbindungen förderte und das Lernen erleichterte. Doch mit dem Aufkommen von Online-Lernplattformen erkannte ich das transformative Potenzial der digitalen Bildung. Ich war sogar aktiv an der Entwicklung einer solchen Plattform an unserer Hochschule beteiligt. Es ist mir ein großes Anliegen, traditionelle Unterrichtsprinzipien mit innovativen digitalen Methoden zu verbinden. Meine Leidenschaft ist es, Kurse zu erstellen, die nicht nur ansprechend und informativ, sondern auch für Lernende im digitalen Zeitalter zugänglich sind.
Themen
OpenAI
Künstliche Intelligenz
Große Sprachmodelle
Generative KI

Top-DataCamp-Kurse

Kurs

Arbeiten mit der OpenAI-API

3 Std.
172.6K
Entwickle deine ersten KI-gestützten Anwendungen mit der API von OpenAI und lerne zugrunde liegende Funktionen von ChatGPT & Co. kennen.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow