5 Methoden zur Behebung des Sora 2 API Referenzbildgrößen-Fehlers: Inpaint image must match – Vollständiger Leitfaden zur Fehlerbehebung

Beim Einsatz der Sora 2 API für die Image-to-Video-Generierung (Bild-zu-Video) gehören nicht übereinstimmende Abmessungen des Referenzbildes zu den häufigsten Fehlermeldungen für Entwickler. In diesem Artikel analysieren wir detailliert die Ursache des Fehlers Inpaint image must match the requested width and height und stellen 5 praxiserprobte Lösungen vor.

Kernnutzen: Nach der Lektüre dieses Artikels werden Sie die Validierungsregeln für Referenzbilder der Sora 2 API verstehen und lernen, wie Sie Bilder mit Python (Pillow) und FFmpeg vorverarbeiten, um Dimensionsfehler endgültig zu beheben.

sora-2-api-inpaint-image-size-error-solution-de 图示


Sora 2 API: Ursachenanalyse für Dimensionsfehler

Wenn Sie die Image-to-Video-Funktion der Sora 2 API aufrufen und die folgende Fehlermeldung erhalten:

{
  "error": {
    "message": "Inpaint image must match the requested width and height",
    "type": "invalid_request_error",
    "param": null,
    "code": null
  }
}

Dies bedeutet, dass die Abmessungen Ihres hochgeladenen Referenzbildes (input_reference) nicht mit der gewählten Videoauflösung übereinstimmen.

Sora 2 API: Strikte Regeln für Referenzbilder

Die Sora 2 API verfügt über einen strengen Validierungsmechanismus für Bilder:

Prüfpunkt Anforderung Erläuterung
Breitenübereinstimmung Bildbreite = Videobreite Muss pixelgenau sein
Höhenübereinstimmung Bildhöhe = Videohöhe Muss pixelgenau sein
Format-Unterstützung JPEG, PNG, WebP Alle drei Formate möglich
Dateiübertragung multipart/form-data Muss als Datei hochgeladen werden

Von der Sora 2 API unterstützte Videoauflösungen

Laut der offiziellen Dokumentation unterstützt die Sora 2 API derzeit folgende Auflösungen:

Auflösung Breite x Höhe Verhältnis Anwendungsfall
720p Querformat 1280 x 720 16:9 YouTube, Web-Videos
720p Hochformat 720 x 1280 9:16 TikTok, Reels, Shorts
1080p Querformat (Pro) 1792 x 1024 ~16:9 HD-Querformat
1080p Hochformat (Pro) 1024 x 1792 ~9:16 HD-Hochformat

🎯 Wichtiger Hinweis: Ihr Referenzbild muss exakt der gewählten Zielauflösung entsprechen. Wenn Sie beispielsweise 1280×720 wählen, muss das Bild präzise 1280×720 Pixel groß sein. Schon eine Abweichung von nur 1 Pixel führt zu einem Fehler.

sora-2-api-inpaint-image-size-error-solution-de 图示


5 Lösungen für Sora 2 API Bildformat-Fehlermeldungen beim Referenzbild

Lösung 1: Intelligentes Zuschneiden und Auffüllen mit Python Pillow

Die Methode ImageOps.pad() von Pillow ermöglicht eine intelligente Verarbeitung von Bildern beliebiger Größe. Dabei wird das Seitenverhältnis beibehalten und das Bild auf die Zielgröße aufgefüllt:

from PIL import Image, ImageOps
import openai

# Von der Sora 2 API unterstützte Standardauflösungen
SORA_RESOLUTIONS = {
    "landscape_720p": (1280, 720),
    "portrait_720p": (720, 1280),
    "landscape_1080p": (1792, 1024),
    "portrait_1080p": (1024, 1792),
}

def preprocess_image_for_sora(image_path, target_resolution="landscape_720p"):
    """Bild vorverarbeiten, um den Größenanforderungen der Sora 2 API zu entsprechen"""
    target_size = SORA_RESOLUTIONS[target_resolution]

    # Originalbild öffnen
    img = Image.open(image_path)

    # Pad-Methode verwenden: Seitenverhältnis beibehalten, mit schwarzem Hintergrund auffüllen
    processed = ImageOps.pad(img, target_size, color=(0, 0, 0))

    # Verarbeitetes Bild speichern
    output_path = image_path.replace(".jpg", "_sora_ready.jpg")
    processed.save(output_path, "JPEG", quality=95)

    return output_path

# Anwendungsbeispiel
processed_image = preprocess_image_for_sora("my_image.jpg", "landscape_720p")

# Sora 2 API aufrufen - über die einheitliche Schnittstelle von APIYI
client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.apiyi.com/v1"  # Einheitliche APIYI Schnittstelle nutzen
)

with open(processed_image, "rb") as f:
    response = client.videos.create(
        model="sora-2",
        prompt="A serene landscape comes to life",
        size="1280x720",
        input_reference=f
    )

🚀 Schnellstart: Wir empfehlen die Plattform APIYI (apiyi.com) zum schnellen Testen der Sora 2 API. Die Plattform bietet sofort einsatzbereite Schnittstellen, mit denen die Integration ohne komplexe Konfiguration gelingt.

Lösung 2: Zentriertes Zuschneiden mit Python Pillow (Hauptmotiv erhalten)

Wenn Sie das Hauptmotiv des Bildes beibehalten möchten und keine schwarzen Ränder durch das Auffüllen wünschen, können Sie ein zentriertes Zuschneiden (Center Crop) verwenden:

from PIL import Image

def center_crop_for_sora(image_path, target_width, target_height):
    """Bild zentriert zuschneiden, um den Größenanforderungen der Sora 2 API zu entsprechen"""
    img = Image.open(image_path)
    orig_width, orig_height = img.size

    # Ziel-Seitenverhältnis berechnen
    target_ratio = target_width / target_height
    orig_ratio = orig_width / orig_height

    if orig_ratio > target_ratio:
        # Originalbild ist breiter: Nach Höhe skalieren und Seiten beschneiden
        new_height = target_height
        new_width = int(orig_width * (target_height / orig_height))
    else:
        # Originalbild ist höher: Nach Breite skalieren und oben/unten beschneiden
        new_width = target_width
        new_height = int(orig_height * (target_width / orig_width))

    # Zuerst skalieren
    img = img.resize((new_width, new_height), Image.LANCZOS)

    # Dann zentriert zuschneiden
    left = (new_width - target_width) // 2
    top = (new_height - target_height) // 2
    right = left + target_width
    bottom = top + target_height

    cropped = img.crop((left, top, right, bottom))

    output_path = image_path.replace(".jpg", f"_{target_width}x{target_height}.jpg")
    cropped.save(output_path, "JPEG", quality=95)

    return output_path

# Referenzbild für ein 720p-Video im Querformat vorbereiten
processed = center_crop_for_sora("my_photo.jpg", 1280, 720)

Lösung 3: Batch-Verarbeitung über die FFmpeg-Kommandozeile

Für Szenarien, in denen eine große Anzahl von Bildern verarbeitet werden muss, ist FFmpeg die effizientere Wahl:

Modus: Zentriertes Zuschneiden (Cover):

# Zuerst proportional skalieren, dann zentriert auf Zielgröße zuschneiden
ffmpeg -i input.jpg -vf "scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720" output_sora.jpg

Modus: Auffüllen (Letterbox):

# Original-Proportionen beibehalten, fehlende Bereiche schwarz auffüllen
ffmpeg -i input.jpg -vf "scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2:black" output_sora.jpg

Batch-Skript:

#!/bin/bash
# Alle jpg-Bilder im aktuellen Verzeichnis für das Sora 2 API 720p Querformat verarbeiten

for file in *.jpg; do
    ffmpeg -i "$file" \
        -vf "scale=1280:720:force_original_aspect_ratio=increase,crop=1280:720" \
        -q:v 2 \
        "sora_ready_$file"
done

Lösung 4: Verwendung des Parameters crop_bounds (API-internes Zuschneiden)

Die Sora 2 API bietet den Parameter crop_bounds, mit dem der Zuschneidebereich direkt auf API-Ebene festgelegt werden kann:

import openai

client = openai.OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.apiyi.com/v1"  # Einheitliche APIYI Schnittstelle nutzen
)

# crop_bounds verwenden, um den Zuschneidebereich (als Anteile) festzulegen
with open("full_size_image.jpg", "rb") as f:
    response = client.videos.create(
        model="sora-2",
        prompt="Dynamischer Videoeffekt",
        size="1280x720",
        input_reference=f,
        crop_bounds={
            "left_fraction": 0.1,    # 10% links abschneiden
            "top_fraction": 0.1,     # 10% oben abschneiden
            "right_fraction": 0.9,   # Rechts bis 90% beibehalten
            "bottom_fraction": 0.9   # Unten bis 90% beibehalten
        },
        frame_index=0  # Bild als ersten Frame verwenden
    )

⚠️ Hinweis: Bei Verwendung von crop_bounds muss der resultierende Bereich weiterhin mit der Zielauflösung des Videos korrespondieren. Es wird empfohlen, dies mit einer vorherigen Bildbearbeitung zu kombinieren.

Lösung 5: Vollständige Hilfsklasse zur Bildvorverarbeitung

Hier ist eine produktionsreife Hilfsklasse zur Bildvorverarbeitung, die verschiedene Modi unterstützt:

from PIL import Image, ImageOps
from pathlib import Path
import io

class SoraImagePreprocessor:
    """Vorverarbeitungstool für Sora 2 API Referenzbilder"""

    RESOLUTIONS = {
        "1280x720": (1280, 720),
        "720x1280": (720, 1280),
        "1792x1024": (1792, 1024),
        "1024x1792": (1024, 1792),
    }

    def __init__(self, target_resolution="1280x720"):
        if target_resolution not in self.RESOLUTIONS:
            raise ValueError(f"Nicht unterstützte Auflösung: {target_resolution}")
        self.target_size = self.RESOLUTIONS[target_resolution]

    def pad(self, image_path, bg_color=(0, 0, 0)):
        """Modus Auffüllen: Originalverhältnis beibehalten, Hintergrundfarbe hinzufügen"""
        img = Image.open(image_path)
        return ImageOps.pad(img, self.target_size, color=bg_color)

    def cover(self, image_path):
        """Modus Abdecken: Originalverhältnis beibehalten, zentriert zuschneiden"""
        img = Image.open(image_path)
        return ImageOps.fit(img, self.target_size, Image.LANCZOS)

    def stretch(self, image_path):
        """Modus Strecken: Erzwungenes Strecken auf Zielgröße (nicht empfohlen)"""
        img = Image.open(image_path)
        return img.resize(self.target_size, Image.LANCZOS)

    def to_bytes(self, img, format="JPEG", quality=95):
        """PIL-Bild in Byte-Stream für API-Upload umwandeln"""
        buffer = io.BytesIO()
        img.save(buffer, format=format, quality=quality)
        buffer.seek(0)
        return buffer

    def process_and_save(self, image_path, mode="cover", output_path=None):
        """Bild verarbeiten und speichern"""
        if mode == "pad":
            processed = self.pad(image_path)
        elif mode == "cover":
            processed = self.cover(image_path)
        elif mode == "stretch":
            processed = self.stretch(image_path)
        else:
            raise ValueError(f"Nicht unterstützter Modus: {mode}")

        if output_path is None:
            p = Path(image_path)
            output_path = p.parent / f"{p.stem}_sora_{self.target_size[0]}x{self.target_size[1]}{p.suffix}"

        processed.save(output_path, quality=95)
        return output_path

# Anwendungsbeispiel
preprocessor = SoraImagePreprocessor("1280x720")

# Methode 1: Verarbeiten und Speichern
output = preprocessor.process_and_save("my_image.jpg", mode="cover")
print(f"Verarbeitung abgeschlossen: {output}")

# Methode 2: Direkt Byte-Stream für API-Aufruf erhalten
img = preprocessor.cover("my_image.jpg")
image_bytes = preprocessor.to_bytes(img)
Vollständiges Code-Beispiel für den Aufruf ansehen
import openai
from PIL import Image, ImageOps
import io

class SoraImagePreprocessor:
    """Vorverarbeitungstool für Sora 2 API Referenzbilder"""

    RESOLUTIONS = {
        "1280x720": (1280, 720),
        "720x1280": (720, 1280),
        "1792x1024": (1792, 1024),
        "1024x1792": (1024, 1792),
    }

    def __init__(self, target_resolution="1280x720"):
        if target_resolution not in self.RESOLUTIONS:
            raise ValueError(f"Nicht unterstützte Auflösung: {target_resolution}")
        self.target_size = self.RESOLUTIONS[target_resolution]

    def cover(self, image_path):
        """Modus Abdecken: Originalverhältnis beibehalten, zentriert zuschneiden"""
        img = Image.open(image_path)
        return ImageOps.fit(img, self.target_size, Image.LANCZOS)

    def to_bytes(self, img, format="JPEG", quality=95):
        """PIL-Bild in Byte-Stream umwandeln"""
        buffer = io.BytesIO()
        img.save(buffer, format=format, quality=quality)
        buffer.seek(0)
        return buffer


def generate_video_with_image(image_path, prompt, resolution="1280x720"):
    """
    Sora 2 Video mit vorverarbeitetem Bild generieren

    Args:
        image_path: Pfad zum Originalbild
        prompt: Eingabeaufforderung für die Videobeschreibung
        resolution: Zielauflösung

    Returns:
        ID des Videogenerierungs-Tasks
    """
    # 1. Bild vorverarbeiten
    preprocessor = SoraImagePreprocessor(resolution)
    processed_img = preprocessor.cover(image_path)
    image_bytes = preprocessor.to_bytes(processed_img)

    # 2. Client initialisieren - über die einheitliche Schnittstelle von APIYI
    client = openai.OpenAI(
        api_key="YOUR_API_KEY",
        base_url="https://api.apiyi.com/v1"
    )

    # 3. Sora 2 API aufrufen
    response = client.videos.create(
        model="sora-2",
        prompt=prompt,
        size=resolution,
        input_reference=image_bytes,
        duration=5  # Videodauer in Sekunden
    )

    return response


# Vollständiges Anwendungsbeispiel
if __name__ == "__main__":
    result = generate_video_with_image(
        image_path="landscape_photo.jpg",
        prompt="The scene comes alive with gentle wind moving through the trees",
        resolution="1280x720"
    )
    print(f"Videogenerierungs-Task eingereicht: {result}")

Sora 2 API: Vergleich der Bild-Preprocessing-Modi

Die Wahl des richtigen Preprocessing-Modus ist entscheidend für die Qualität des resultierenden Videos:

sora-2-api-inpaint-image-size-error-solution-de 图示

Preprocessing-Modus Verarbeitungsmethode Vorteile Nachteile Empfohlene Szenarien
Pad (Auffüllen) Behält Proportionen bei, fügt Ränder hinzu Erhält das vollständige Bild Schwarze Ränder möglich Hohe Anforderungen an Vollständigkeit
Cover (Zuschneiden) Behält Proportionen bei, mittiger Schnitt Keine Ränder, füllendes Bild Randinhalte können verloren gehen Bilder mit zentralem Hauptmotiv
Stretch (Strecken) Erzwingt Skalierung Einfach und direkt Bildverzerrung Nicht empfohlen

💡 Auswahlempfehlung: Welcher Preprocessing-Modus am besten geeignet ist, hängt primär von Ihrem Bildinhalt und dem gewünschten Endergebnis ab. Wir empfehlen, praktische Tests über die Plattform APIYI (apiyi.com) durchzuführen, um die Unterschiede der Modi schnell zu validieren.

Empfohlene Modi für verschiedene Szenarien

Bildtyp Empfohlener Modus Erläuterung
Porträtfotos Cover Hält das Hauptmotiv zentriert und füllend
Landschaftsfotos Pad oder Cover Je nach gewünschter Komposition
Produktbilder Pad Stellt sicher, dass das Produkt vollständig sichtbar bleibt
Kunstwerke Pad Bewahrt die künstlerische Integrität des Werks
UI-Screenshots Cover Wichtige Informationen liegen meist im Zentrum

Sora 2 API Referenzbilder: Häufig gestellte Fragen (FAQ)

Q1: Warum sind die Anforderungen an die Bildgröße bei der Sora 2 API so streng?

Sora 2 nutzt das Referenzbild als ersten Frame (First Frame) des Videos. Das Modell muss von diesem Frame aus den nachfolgenden dynamischen Inhalt generieren. Wenn die Abmessungen des Referenzbildes nicht mit dem Zielvideo übereinstimmen, kann das Modell den Generierungsprozess nicht korrekt initialisieren. Dies ist eine von OpenAI festgelegte technische Einschränkung, um eine konsistente Qualität der Ergebnisse zu gewährleisten.

Bei Aufrufen über die APIYI (apiyi.com) Plattform wird empfohlen, die Bildvorverarbeitung auf der Client-Seite durchzuführen, um die besten Ergebnisse bei der Generierung zu erzielen.

Q2: Welches Bildformat sollte ich bei der Vorverarbeitung wählen?

Die Sora 2 API unterstützt drei Formate: JPEG, PNG und WebP:

  • JPEG: Empfohlen für fotografische Bilder; kleine Dateigröße, schneller Upload.
  • PNG: Geeignet für Szenen, die einen transparenten Hintergrund oder verlustfreie Qualität erfordern.
  • WebP: Ein guter Kompromiss zwischen Qualität und Dateigröße, jedoch mit etwas geringerer Kompatibilität.

Es wird empfohlen, das JPEG-Format mit einem Qualitätsparameter (Quality) von 90-95 zu verwenden. Dies garantiert eine hohe Qualität bei moderater Dateigröße.

Q3: Was kann ich tun, wenn die Bildqualität nach der Bearbeitung abnimmt?

Ein Qualitätsverlust bei Bildern hat in der Regel folgende Ursachen:

  1. Zu starke Kompression: Erhöhen Sie die JPEG-Qualität auf 95.
  2. Zu starkes Hochskalieren: Verwenden Sie nach Möglichkeit Originalbilder, deren Auflösung nah am Zielwert liegt.
  3. Resampling-Algorithmus: Verwenden Sie Image.LANCZOS anstelle von Image.NEAREST.
# Hochwertige Verarbeitungseinstellungen
img = img.resize(target_size, Image.LANCZOS)  # Lanczos-Algorithmus verwenden
img.save(output_path, "JPEG", quality=95)     # Mit hoher Qualität speichern
Q4: Wie kann ich eine große Anzahl von Bildern im Batch verarbeiten?

Für Batch-Szenarien empfiehlt sich die Verwendung von FFmpeg oder Python-Multithreading:

from concurrent.futures import ThreadPoolExecutor
import os

def batch_process(image_dir, output_dir, resolution="1280x720"):
    preprocessor = SoraImagePreprocessor(resolution)

    def process_single(filename):
        input_path = os.path.join(image_dir, filename)
        output_path = os.path.join(output_dir, f"sora_{filename}")
        return preprocessor.process_and_save(input_path, "cover", output_path)

    image_files = [f for f in os.listdir(image_dir) if f.endswith(('.jpg', '.png'))]

    with ThreadPoolExecutor(max_workers=4) as executor:
        results = list(executor.map(process_single, image_files))

    return results

Über die APIYI (apiyi.com) Plattform können Sie API-Kontingente für die Batch-Verarbeitung erhalten, was sich ideal für großflächige Videogenerierungsprojekte eignet.

Q5: Werden Referenzbilder mit Gesichtern abgelehnt?

Ja, gemäß den Richtlinien von OpenAI werden Referenzbilder, die reale menschliche Gesichter enthalten, derzeit von der Sora 2 API abgelehnt. Wenn Ihr Projekt Personen-Videos erfordert, empfehlen wir:

  1. Verwendung von Bildern ohne klar erkennbare Gesichter.
  2. Verwendung von KI-generierten Bildern virtueller Personen.
  3. Verwendung von abstrakten oder künstlerisch verfremdeten Personenbildern.

Sora 2 API Bildgrößen-Referenztabelle

Zur schnellen Orientierung finden Sie hier die vollständige Tabelle zur Größenanpassung:

Zielvideo Bildbreite Bildhöhe API size Parameter Geeignete Plattformen
720p Querformat 1280 720 "1280×720" YouTube, Webseiten
720p Hochformat 720 1280 "720×1280" Douyin, TikTok
Pro Querformat 1792 1024 "1792×1024" High-Definition Querformat
Pro Hochformat 1024 1792 "1024×1792" High-Definition Hochformat

📌 Hinweis: Zu den verfügbaren Plattformen gehören APIYI (apiyi.com), die offizielle OpenAI API usw. Es wird empfohlen, für Entwicklungstests eine Plattform mit schnellen Reaktionszeiten und günstigen Preisen zu wählen.


Zusammenfassung

Fehlermeldungen zu den Abmessungen des Referenzbildes (Image Prompt) gehören zu den häufigsten Problemen, auf die Entwickler bei der Sora 2 API stoßen. Der Kern der Lösung liegt in folgenden Schritten:

  1. Regeln verstehen: Das Referenzbild muss pixelgenau mit den Abmessungen des Zielvideos übereinstimmen.
  2. Modus wählen: Wählen Sie je nach Bildinhalt den Modus „Pad“ oder „Cover“.
  3. Vorverarbeitung: Nutzen Sie Python Pillow oder FFmpeg für die Vorverarbeitung.
  4. Abmessungen validieren: Überprüfen Sie nach der Bearbeitung, ob die Bildgröße tatsächlich übereinstimmt.

Wir empfehlen die Nutzung von APIYI apiyi.com, um die Ergebnisse der Bildvorverarbeitung und die Qualität der Videogenerierung schnell zu überprüfen.


Autor: APIYI Team | Weitere Tipps zur KI-Entwicklung finden Sie unter apiyi.com

Referenzen:

  1. OpenAI Sora API Dokumentation: Erläuterungen zur Image-to-Video-Schnittstelle
    • Link: platform.openai.com/docs/guides/video-generation
  2. Offizielle Pillow-Dokumentation: ImageOps-Modul zur Bildbearbeitung
    • Link: pillow.readthedocs.io/en/stable/reference/ImageOps.html
  3. Offizielle FFmpeg-Dokumentation: Filter für die Video- und Bildverarbeitung
    • Link: ffmpeg.org/ffmpeg-filters.html

Ähnliche Beiträge