рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЬрд╛рдПрдБ

Python рдХреЗ рд╕рд╛рде Sora 2 API: рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕рд╣рд┐рдд рд╕рдВрдкреВрд░реНрдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛

рдЗрд╕ рд╕рдВрдкреВрд░реНрдг рдЧрд╛рдЗрдб рдореЗрдВ рдЬрд╛рдиреЗрдВ рдХрд┐ OpenAI API рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Sora 2 API рд╕реЗ рдЕрдкрдиреА рд╡реАрдбрд┐рдпреЛ рдЖрдЗрдбрд┐рдпрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓реЗрдВред
┬╖ 8 рдорд┐ре░ рдкрдврд╝реЗрдВ

AI рдХреЗ рд╕рд╛рде рдЦреЛрдЬреЗрдВ

Sora 2 рд╕рд┐рддрдВрдмрд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЗрд╕ рд╡рд╛рджреЗ рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА OpenAI API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рд╡рд╣ рдкрд▓ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЖ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рд▓рд╛рдн рдЙрдард╛рдирд╛ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рд╣реВрдБред

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ Python рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ AI рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдХреИрд╕реЗ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ рдЖрдк Sora 2 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ OpenAI рдкрд░ рдЗрд╕реЗ рд╕реАрдзреЗ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рддреЛ рдореИрдВ рдпрд╣ Sora 2 рд▓реЗрдЦ рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдБред рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдЯреВрд▓реНрд╕ рдкрд░ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ Seedance 2.0 рдЧрд╛рдЗрдб рдФрд░ рд╣рдорд╛рд░рд╛ Veo 3.1 рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦреЗрдВред

рдпрд╣рд╛рдБ рдЙрд╕ рддрд░рд╣ рдХреЗ рд╡реАрдбрд┐рдпреЛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЕрдВрдд рддрдХ рдмрдирд╛ рдкрд╛рдПрдВрдЧреЗ:

OpenAI API рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ OpenAI рдЕрдХрд╛рдЙрдВрдЯ рдФрд░ рдПрдХ API рдХреБрдВрдЬреА рдмрдирд╛рдиреА рд╣реЛрдЧреАред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдирдХреЗ API key рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдКрдкрд░ рджрд╛рдИрдВ рдУрд░ "Create new secret key" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рдпрд╣ рдХреБрдВрдЬреА OpenAI API рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИред рд╣рдо рдЗрд╕реЗ рдЙрд╕ рдлреЛрд▓реНрдбрд░ рдореЗрдВ .env рдирд╛рдо рдХреА рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рд╣рдо рдЕрдкрдиреЗ Python рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдХреБрдВрдЬреА рдХреЛ рдЧреБрдкреНрдд рд░рдЦреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЗ рдЕрдХрд╛рдЙрдВрдЯ рд╕реЗ API рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

API рдХреБрдВрдЬреА рдХреЛ .env рдлрд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ:

OPENAI_API_KEY=<paste_api_key_here>

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдГрд╢реБрд▓реНрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдЕрдХрд╛рдЙрдВрдЯ рдореЗрдВ рдмреИрд▓реЗрдВрд╕ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ Sora 2 рдХреА рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреА рдХреАрдордд рджреА рдЧрдИ рд╣реИ:

Sora 2 рдХреА рдкреНрд░рд╛рдЗрд╕рд┐рдВрдЧ рддрд╛рд▓рд┐рдХрд╛ред

Python рдХреЗ рд╕рд╛рде Sora 2 рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдирд╛

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рд╕рд╛рд░рд╛ рдХреЛрдб рдЗрд╕ GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред

Python рд╕реЗ OpenAI API рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо openai рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Sora API рдкрд░ рдирдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХрд╛ рд╣рд╛рд▓рд┐рдпрд╛ рд╡рд░реНрд╢рди рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ (рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрдиреЗ рдкрд░ рдЕрдкрдЧреНрд░реЗрдб) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрдорд╛рдВрдб рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

pip install --upgrade openai

рдЙрд╕реА рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдирдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ generate_video.py рдмрдирд╛рдПрдБ рдЬрд╣рд╛рдБ рдкрд╣рд▓реЗ .env рдлрд╛рдЗрд▓ рдмрдирд╛рдИ рдереАред

рдкрд╣рд▓рд╛ рдХрджрдо рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╣реИред рд╣рдо рдпреЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

  • os: рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди рдкреИрдХреЗрдЬ;
  • openai: рдЙрдирдХреА API рд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ OpenAI рдкреИрдХреЗрдЬ;
  • dotenv: .env рдлрд╛рдЗрд▓ рд╕реЗ environment variables рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣реВрд▓рд┐рдпрдд рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдкреИрдХреЗрдЬред рдпрд╣рд╛рдБ рд╣рдо OpenAI API рдХреБрдВрдЬреА рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
import os
from openai import OpenAI 
from dotenv import load_dotenv

рдЕрдЧрд▓рд╛ рдХрджрдо .env рдлрд╛рдЗрд▓ рд▓реЛрдб рдХрд░рдирд╛ рд╣реИ:

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

API рдХреБрдВрдЬреА рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рд╣рдо OpenAI рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ OpenAI API рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо os рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ API рдХреБрдВрдЬреА рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ:

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

рдЕрдВрдд рдореЗрдВ, рд╣рдо рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА videos.create рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:

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

рдЬрдм рд╣рдо рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рддреБрд░рдВрдд рд╡реАрдбрд┐рдпреЛ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдмрдирдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ video рд╡реЗрд░рд┐рдПрдмрд▓ рдЦреБрдж рд╡реАрдбрд┐рдпреЛ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рдЬреЙрдм рдХреА рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред

рдЗрд╕реАрд▓рд┐рдП рд╣рдордиреЗ рд╡реАрдбрд┐рдпреЛ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдкреНрд░рд┐рдВрдЯ рдХрд┐рдпрд╛ред рдпрд╣ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреА:

  1. рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  2. рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╣рдо рдиреАрдЪреЗ рдЗрди рджреЛрдиреЛрдВ рдЪрд░рдгреЛрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдордЭрд╛рдПрдБрдЧреЗред

рдпрд╣рд╛рдБ рдореБрдЭреЗ рдЬреЛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛, рд╡рд╣ рд╣реИ:

рд╡реАрдбрд┐рдпреЛ рдХреА рдкреНрд░рдЧрддрд┐ рдЯреНрд░реИрдХ рдХрд░рдирд╛

рд╣рдо videos.retrieve() рдлрдВрдХреНрд╢рди рдХреЛ рдЬреЙрдм рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рджреЗрдХрд░ рдХрд┐рд╕реА рдЬреЙрдм рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣:

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

рд╣рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЧрддрд┐ рдХрд╛ 100% рддрдХ рдкрд╣реБрдБрдЪрдирд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдлрдВрдХреНрд╢рди wait_for_video_to_finish() рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЬреЙрдм рдХреЗ рдкреВрд░реНрдг рд╣реЛрдиреЗ рддрдХ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдореЙрдирд┐рдЯрд░ рдХрд░рддрд╛ рд╣реИ:

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")

рдЗрд╕ рдлрдВрдХреНрд╢рди рдХреЗ рддреАрди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:

  • video_id: рдЙрд╕ рд╡реАрдбрд┐рдпреЛ рдХрд╛ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдЬрд┐рд╕реЗ рд╣рдо рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
  • poll_interval: рд╣рд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рдХреЗ рдмреАрдЪ рд╣рдо рдХрд┐рддрдиреЗ рд╕реЗрдХрдВрдб рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
  • timeout: рдЕрдзрд┐рдХрддрдо рдХрд┐рддрдиреЗ рд╕реЗрдХрдВрдб рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реИред

рдпрд╣ рдлрдВрдХреНрд╢рди рд╕рдордп-рд╕рдордп рдкрд░ рд╡реАрдбрд┐рдпреЛ рдХреА рд╕реНрдерд┐рддрд┐ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдкреВрд░рд╛ рди рд╣реЛ рдЬрд╛рдП рдпрд╛ рдкреЛрд▓рд┐рдВрдЧ рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдПред

рд╡реАрдбрд┐рдпреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛

рдЕрдм рдЬрдм рд╣рдо рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдпрд╣ рдкреВрд░рд╛ рд╣реЛрддреЗ рд╣реА рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реЛред рд╣рдо videos.download_content() рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд░рд╣рд╛ рд╡рд╣ рдлрдВрдХреНрд╢рди рдЬреЛ рдпрд╣ рдХрд░рддрд╛ рд╣реИ:

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)

рдкреВрд░рд╛ Sora рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ

рд╣рдо рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рд╕рд╛рде рд▓рд╛рдХрд░ Sora рдХреЗ рд╕рд╛рде рдПрдХ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

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)

рд╡реАрдбрд┐рдпреЛ рдХрд╛ рдЖрдХрд╛рд░ рдФрд░ рдЕрд╡рдзрд┐ рд╕реЗрдЯ рдХрд░рдирд╛

рдКрдкрд░ рджреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, OpenAI Sora 2 API рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рднреА рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

  • model: рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдореЙрдбрд▓ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ sora-2 рд╣реИред
  • resolution: рд╡реАрдбрд┐рдпреЛ рдХрд╛ рдЖрдХрд╛рд░ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдХрд╛ рдЖрдХрд╛рд░ 720x1280 рд╣реИред
  • duration: рд╡реАрдбрд┐рдпреЛ рдХрд┐рддрдиреЗ рд╕реЗрдХрдВрдб рд▓рдВрдмрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡реАрдбрд┐рдпреЛ 4 рд╕реЗрдХрдВрдб рд▓рдВрдмрд╛ рд╣реЛрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдореЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдиреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рд╣реИ (рдмреЛрд▓реНрдб рдореЗрдВ рджрд┐рдП рдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВ):

Sora 2 API рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рддрд╛рд▓рд┐рдХрд╛

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд┐рд▓реНрдЯ-рдЗрди рдкреИрдХреЗрдЬ argparse рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХреЗред

рдпрд╣рд╛рдБ argparse рдХреЗ рд╕рд╛рде prompt рдФрд░ model рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

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).",
)

рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯреНрд╕ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо parse_args() рдореЗрдердб рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ:

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

generate_video_pipeline.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ рдЙрди рд╕рднреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рд╕реАрдЦрд╛ рд╣реИ, рддрд╛рдХрд┐ Sora 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдпрд╣рд╛рдБ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

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

рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдерд╛:

Sora 2 API рдкреНрд░реЙрдореНрдкреНрдЯ рдЯрд┐рдкреНрд╕

OpenAI Sora 2 рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреВрд░реНрдг рдкреНрд░реЙрдореНрдкреНрдЯ рдЧрд╛рдЗрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдЕрдЪреНрдЫреЗ Sora 2 рдкреНрд░реЙрдореНрдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдореВрд▓рднреВрдд рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ:

  • рд╡рд┐рд╡рд░рдг рдФрд░ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХрд╛ рд╕рдВрддреБрд▓рди: рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЙрдореНрдкреНрдЯ рдирд┐рдпрдВрддреНрд░рдг рджреЗрддреЗ рд╣реИрдВ; рд╕рд░рд▓ рдкреНрд░реЙрдореНрдкреНрдЯ рд░рдЪрдирд╛рддреНрдордХрддрд╛ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
  • API рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВ: рдореЙрдбрд▓ (sora-2 рдпрд╛ sora-2-pro), рд░реЗрдЬрд╝реЛрд▓реНрдпреВрд╢рди, рдФрд░ рдХреНрд▓рд┐рдк рдХреА рд▓рдВрдмрд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
  • рд╢реЙрдЯреНрд╕ рдореЗрдВ рд╕реЛрдЪреЗрдВ: рдХреИрдорд░рд╛ рдлреНрд░реЗрдорд┐рдВрдЧ, рд▓рд╛рдЗрдЯрд┐рдВрдЧ, рд╡рд┐рд╖рдп, рдФрд░ рдкреНрд░рддрд┐ рд╢реЙрдЯ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдПрдХреНрд╢рди рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред
  • рджреГрд╢реНрдпрд╛рддреНрдордХ рдФрд░ рдареЛрд╕ рдмрдиреЗрдВ: тАЬрдиреАрдпрди рд▓рд╛рдЗрдЯреНрд╕ рдХреЗ рдиреАрдЪреЗ рдЧреАрд▓рд╛ рдПрд╕реНрдлрд╛рд▓реНрдЯтАЭ тАЬрдПрдХ рд╕реБрдВрджрд░ рд╕рдбрд╝рдХтАЭ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред
  • рдореВрд╡рдореЗрдВрдЯ рд╕рд╛рджрд╛ рд░рдЦреЗрдВ: рдПрдХ рд╡рд┐рд╖рдп рдХреА рдХреНрд░рд┐рдпрд╛ + рдПрдХ рдХреИрдорд░рд╛ рдореВрд╡ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • рд▓рд╛рдЗрдЯ: рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рд░реЛрд╢рдиреА рдХреА рдХреНрд╡рд╛рд▓рд┐рдЯреА, рджрд┐рд╢рд╛ рдФрд░ рд░рдВрдЧ рдкреИрд▓реЗрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
  • рдЗрдореЗрдЬ рд░реЗрдлрд░реЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╕реНрдЯрд╛рдЗрд▓ рдФрд░ рдХрдореНрдкреЛрдЬрд╝рд┐рд╢рди рдХреЛ рдПрдВрдХрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рдЗрдирдкреБрдЯ рдЬреЛрдбрд╝реЗрдВред
  • рд╕рдВрд╡рд╛рдж: рдЫреЛрдЯреЗ, рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╡рд╛рдХреНрдп; рд╕реНрдкрд╖реНрдЯ рд▓реЗрдмрд▓рд┐рдВрдЧ; рдкреНрд░рддрд┐ рдХреНрд▓рд┐рдк рд╕реАрдорд┐рддред
  • Remix рдХреЗ рд╕рд╛рде рджреЛрд╣рд░рд╛рдПрдБ: рд╕рдЯреАрдХ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рддрддреНрд╡ (рд▓рд╛рдЗрдЯрд┐рдВрдЧ, рд▓реЗрдВрд╕, рдкреИрд▓реЗрдЯ) рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВред

рд╡реЗ рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдирд┐рдореНрди рдкреНрд░реЙрдореНрдкреНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕рдВрдЬреЛрддреЗ рд╣реИрдВ:

[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.]

рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рд▓рдВрдмреЗ рдкреНрд░реЙрдореНрдкреНрдЯ рджреЗрдирд╛ рдЭрдВрдЭрдЯреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрднрд╡ рдмреЗрд╣рддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрджрд┐ рдкреНрд░реЙрдореНрдкреНрдЯ .txt рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рди рд▓реЗ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЙрдореНрдкреНрдЯ рд╡рд╛рд▓реЗ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╛рдЗрд▓ рдХрд╛ рдкрде рджреЗ рд░рд╣рд╛ рд╣реИред┬а

рдЗрд╕реЗ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

...
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)
...

рдЗрд╕реЗ рдкрд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЙрд╕реА рдлреЛрд▓реНрдбрд░ рдореЗрдВ prompt.txt рдирд╛рдо рдХреА рдлрд╛рдЗрд▓ рдмрдирд╛рдИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рдкреНрд░реЙрдореНрдкреНрдЯ рд╣реИ:

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.тАЭ

рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо --prompt рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ prompt.txt рджреЗрддреЗ рд╣реИрдВ:

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

рдпрд╣ рд░рд╣рд╛ рд╡реАрдбрд┐рдпреЛ:

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдиреЗ рдкреНрд░реЙрдореНрдкреНрдЯ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ред AI рд╡реАрдбрд┐рдпреЛ рдореЙрдбрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдмреЗрд╣рддрд░ рдирддреАрдЬреЗ рдорд┐рд▓реЗ рдЬрдм рдореИрдВрдиреЗ рдХрдИ рд╕рд░рд▓ рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рд╕рд╛рде рд░рдЦрд╛ред┬а

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХрд░реВрдк рд░рдЦрдирд╛ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдореЙрдбрд▓ рдХреЛ рдПрдХ рд╕рдВрджрд░реНрдн рдЫрд╡рд┐ рджреЗрдХрд░ рдпрд╣ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рд╣рдо рдЖрдЧреЗ рд╕реАрдЦреЗрдВрдЧреЗред

рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ Sora 2 рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдирд╛

рдХрд┐рд╕реА рдЫрд╡рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо input_reference рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдПрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЫрд╡рд┐ рдХреЛ рдХреИрд╕реЗ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдореЙрдбрд▓ рдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдВ:

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)

GitHub рд░рд┐рдкреЙрдЬрд╝рд┐рдЯрд░реА рдореЗрдВ generate_video_with_reference.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕рдХрд╛ рдкреВрд░реА рддрд░рд╣ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддреА рд╣реИред рдЬрдм рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдЫрд╡рд┐ рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдорд┐рд▓рд╛:

рд╕рдВрджрд░реНрдн рдЫрд╡рд┐ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕рдХрд╛ рдЖрдХрд╛рд░ рдЙрд╕реА рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╣рдо Pillow рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдбрд▓ рдХреЛ рджреЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрджрд░реНрдн рдЫрд╡рд┐ рдХреЛ рд╕реНрд╡рддрдГ рд░реАрд╕рд╛рдЗрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд┐ рдпрджрд┐ рдореВрд▓ рдЫрд╡рд┐ рдХрд╛ рдЖрд╕реНрдкреЗрдХреНрдЯ рд░реЗрд╢рд┐рдпреЛ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рдХреГрдд рд╣реЛ рдЬрд╛рдПрдЧреА, рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╢рд╛рдпрдж рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХрдорд╛рдВрдб рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

pip install Pillow

sora.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ generate_video() рдлрдВрдХреНрд╢рди рдХрд╛ рдРрд╕рд╛ рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рджреЗрддреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдХреЗ, рдпрджрд┐ рдХреЛрдИ рдЫрд╡рд┐ рджреА рдЧрдИ рд╣реЛ, рддреЛ рдЙрд╕реЗ рд░реАрд╕рд╛рдЗрдЬ рдХрд░ рджреЗрддрд╛ рд╣реИред

generate_video_pipeline_reference.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рд╣рдо рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд░реЗрдлрд░реЗрдВрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреИрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдСрдЯреЛ-рд░реАрд╕рд╛рдЗрдЬ рдлреАрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдлреЛрдЯреЛ рд╕реЗ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

рд╡реАрдбрд┐рдпреЛ рд░реЗрдлрд░реЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд╣рдордиреЗ рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╣рд╛рдБ рдмрдирд╛рдИ рд╣реИ, рд╡рд╣ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡реАрдбрд┐рдпреЛ рд░реЗрдлрд░реЗрдВрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рддреИрдпрд╛рд░ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рднреА рдореИрдВрдиреЗ рдХрд┐рд╕реА рджреВрд╕рд░реЗ рд╡реАрдбрд┐рдпреЛ рдХреЛ рд░реЗрдлрд░реЗрдВрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдХрд░ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рддреЛ рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА:

Video inpaint is not available for your organization

рдЙрдирдХреЗ рдлрд╝реЛрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдПрдХ рдЖрдо рд╕рдорд╕реНрдпрд╛ рд▓рдЧрддреА рд╣реИ, рдЬреЛ рдЗрд╕ рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИ рдХрд┐ рдпрд╣ рдлреАрдЪрд░ рдЕрднреА рд╕рднреА рдХреЗ рд▓рд┐рдП API рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдФрд░ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЕрдиреНрдп рд╕реАрдорд╛рдПрдБ

рдЬрдм рдореИрдВ Sora 2 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдБ рдЖрдИрдВ рдЬрд╣рд╛рдБ Sora рдиреЗ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рдореЙрдбрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдиреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛:

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

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдБ рдХрд┐ рдЗрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдбрд╝реА рдореЙрдбрд░реЗрд╢рди рдЬрд╝рд░реВрд░реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬреЛ рдЪрд╛рд╣реЗрдВ рд╡реИрд╕рд╛ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рджрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдмрд╣реБрдд рдиреБрдХрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЙрдбрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдиреЗ рдореЗрд░реЗ рдЬрд╝реНрдпрд╛рджрд╛рддрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдореБрдЭреЗ рдЕрдкрдиреА рдореВрд▓ рдпреЛрдЬрдирд╛ рдЫреЛрдбрд╝рдиреА рдкрдбрд╝реАред

рдЬрд┐рди рдлрд╝реЛрдЯреЛ рдХреЛ рдореИрдВрдиреЗ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЙрдирдореЗрдВ рдХреЛрдИ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╕рд╛рдордЧреНрд░реА рдпрд╛ рдХреЙрдкреАрд░рд╛рдЗрдЯ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЫрд╡рд┐рдпрд╛рдБ рдореЗрд░реА рд╣реА рд╣реИрдВред рддреНрд░реБрдЯрд┐ рдореЗрдВ рдпрд╣ рднреА рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрддреА рдХрд┐ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдмрд╣реБрдд рдЕрдХреНрд╕рд░ рд╣реБрдИ, рдЬрд┐рд╕рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд╛рд░реНрдердХ рдЪреАрдЬрд╝ рдмрдирд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖

Sora 2 AI-рд╕рдорд░реНрдерд┐рдд рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдирдП рдФрд░ рд░реЛрдорд╛рдВрдЪрдХ рдЕрд╡рд╕рд░ рдЦреЛрд▓рддрд╛ рд╣реИ, рдФрд░ OpenAI API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдХрд╛рд░рдг, рдЗрди рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рдЯреВрд▓реНрд╕ рдХреЛ рдЕрдкрдиреЗ Python рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЕрдм рд╣рд░ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИред

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ, рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд░рд▓ рдкреНрд░реЙрдореНрдкреНрдЯреНрд╕ рд╕реЗ рдХрд╕реНрдЯрдо рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдиреЗ, рдПрдбрд╡рд╛рдВрд╕реНрдб рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ, рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЗрдореЗрдЬ рд░реЗрдлрд░реЗрдВрд╕ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреА рдареЛрд╕ рдмреБрдирд┐рдпрд╛рдж рд╣реИред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ API рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдЧрд╛, рдФрд░ рднреА рдлреАрдЪрд░реНрд╕ тАФ рдЬрд┐рдирдореЗрдВ рдордЬрд╝рдмреВрдд рд╡реАрдбрд┐рдпреЛ-рдЯреВ-рд╡реАрдбрд┐рдпреЛ рдХреНрд╖рдорддрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ тАФ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗ, рдЬреЛ рдЖрдкрдХреЗ рд░рдЪрдирд╛рддреНрдордХ рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рдЪрд╛рд╣реЗ рдЖрдк рдЪрдВрдЪрд▓ рдкреНрд░реЙрдореНрдкреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рдЬрдЯрд┐рд▓ рд╕реНрдЯреЛрд░реАрдмреЛрд░реНрдб рдмрдирд╛ рд░рд╣реЗ рд╣реЛрдВ, рдпрд╛ рдиреЗрдХреНрд╕реНрдЯ-рдЬрди рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдРрдкреНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, Sora 2 рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЬреАрд╡рди рджреЗрдиреЗ рдХрд╛ рдПрдХ рд╕рд╢рдХреНрдд рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╣рдорд╛рд░реЗ Meta рдХреЗ рдирдП SAM3 рдореЙрдбрд▓ рдХреЗ рдЧрд╛рдЗрдб рдХреЛ рднреА рджреЗрдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдБред

Sora 2 API FAQs

рдХреНрдпрд╛ Sora 2 API рдирд┐рдГрд╢реБрд▓реНрдХ рд╣реИ?

рдирд╣реАрдВред рдореЙрдбрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╡реАрдбрд┐рдпреЛ рдХреА рдХреАрдордд $0.1 рд╕реЗ $0.3 рдХреЗ рдмреАрдЪ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдЫрд╡рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рд╣рд╛рдБ, рд╣рдо input_reference рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджрд░реНрдн рдЫрд╡рд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЫрд╡рд┐ рдХрд╛ рдЖрдХрд╛рд░ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореМрдЬреВрджрд╛ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдПрдбрд┐рдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рд╣рд╛рд▓рд╛рдБрдХрд┐ Sora 2 рд╡реАрдбрд┐рдпреЛ рдПрдбрд┐рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдлреАрдЪрд░ рдЕрднреА рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред

Sora 2 рд╕реЗ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ?

рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдЕрдзрд┐рдХрддрдо 2 рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ Sora 2 рдСрдбрд┐рдпреЛ рдЬрдирд░реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рд╣рд╛рдБред рдЬрдм рддрдХ рдкреНрд░реЙрдореНрдкреНрдЯ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХрд┐рдпрд╛ рдЬрд╛рдП, Sora 2 рджреНрд╡рд╛рд░рд╛ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдРрд╕рд╛ рдСрдбрд┐рдпреЛ рдЖрддрд╛ рд╣реИ рдЬреЛ рд╡реАрдбрд┐рдпреЛ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рд╣рдо рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдбрд┐рдпреЛ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рд╕рдВрд╡рд╛рдж рднреА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Fran├зois Aubry

рд▓реЗрдЦрдХ

Fran├зois Aubry

Full-stack рдЗрдВрдЬреАрдирд┐рдпрд░ рдПрд╡рдВ рд╕рдВрд╕реНрдерд╛рдкрдХ, CheapGPT рдкрд░ред рдкрдврд╝рд╛рдирд╛ рд╣рдореЗрд╢рд╛ рд╕реЗ рдореЗрд░рд╛ рдЬреБрдиреВрди рд░рд╣рд╛ рд╣реИред рд╡рд┐рджреНрдпрд╛рд░реНрдереА рдЬреАрд╡рди рд╕реЗ рд╣реА рдореИрдВ рдЙрддреНрд╕рд╛рд╣рдкреВрд░реНрд╡рдХ рдЯреНрдпреВрд╢рди рджреЗрдиреЗ рдФрд░ рдЕрдиреНрдп рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдпреЛрдВ рдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░рдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рддрд▓рд╛рд╢рддрд╛ рд░рд╣рд╛ рд╣реВрдБред рдЗрд╕реА рдЬреБрдиреВрди рдиреЗ рдореБрдЭреЗ рдкреАрдПрдЪрдбреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛, рдЬрд╣рд╛рдБ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╢реИрдХреНрд╖рдгрд┐рдХ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд╕рд╛рде рд╢рд┐рдХреНрд╖рдг рд╕рд╣рд╛рдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рдо рдХрд┐рдпрд╛ред рдЙрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХрдХреНрд╖рд╛-рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛, рд╕рдВрдмрдВрдз рдмрдирд╛рдирд╛ рдФрд░ рд╕реАрдЦрдиреЗ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдореБрдЭреЗ рдЕрддреНрдпрдВрдд рд╕рдВрддреЛрд╖ рджреЗрддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдСрдирд▓рд╛рдЗрди рд▓рд░реНрдирд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рдбрд┐рдЬрд┐рдЯрд▓ рд╢рд┐рдХреНрд╖рд╛ рдХреА рд░реВрдкрд╛рдВрддрд░рдХрд╛рд░реА рдХреНрд╖рдорддрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реА рд╣реА рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдРрд╕реЗ рдПрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдореИрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рдерд╛ред рдореИрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╢рд┐рдХреНрд╖рдг рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рдирд╡реЛрдиреНрдореЗрд╖реА рдбрд┐рдЬрд┐рдЯрд▓ рдкрджреНрдзрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкреНрд░рддрд┐рдмрджреНрдз рд╣реВрдБред рдореЗрд░рд╛ рдЙрджреНрджреЗрд╢реНрдп рдРрд╕реЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдмрдирд╛рдирд╛ рд╣реИ рдЬреЛ рди рдХреЗрд╡рд▓ рд░реЛрдЪрдХ рдФрд░ рд╕реВрдЪрдирд╛рдкреНрд░рдж рд╣реЛрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕ рдбрд┐рдЬрд┐рдЯрд▓ рдпреБрдЧ рдХреЗ рд╢рд┐рдХреНрд╖рд╛рд░реНрдерд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдЧрдо рднреА рд╣реЛрдВред

рд╡рд┐рд╖рдп