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 рдХреА рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХреА рдХреАрдордд рджреА рдЧрдИ рд╣реИ:
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 рд╡реЗрд░рд┐рдПрдмрд▓ рдЦреБрдж рд╡реАрдбрд┐рдпреЛ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рдЬреЙрдм рдХреА рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред
рдЗрд╕реАрд▓рд┐рдП рд╣рдордиреЗ рд╡реАрдбрд┐рдпреЛ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдкреНрд░рд┐рдВрдЯ рдХрд┐рдпрд╛ред рдпрд╣ рд╡рд╣ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реЛрдЧреА:
- рд╡реАрдбрд┐рдпреЛ рдЬрдирд░реЗрд╢рди рдХреА рдкреНрд░рдЧрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╣рдо рдиреАрдЪреЗ рдЗрди рджреЛрдиреЛрдВ рдЪрд░рдгреЛрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╕рдордЭрд╛рдПрдБрдЧреЗред
рдпрд╣рд╛рдБ рдореБрдЭреЗ рдЬреЛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛, рд╡рд╣ рд╣реИ:
рд╡реАрдбрд┐рдпреЛ рдХреА рдкреНрд░рдЧрддрд┐ рдЯреНрд░реИрдХ рдХрд░рдирд╛
рд╣рдо 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 рд╕реЗрдХрдВрдб рд▓рдВрдмрд╛ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдореЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдиреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рд╣реИ (рдмреЛрд▓реНрдб рдореЗрдВ рджрд┐рдП рдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВ):

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд┐рд▓реНрдЯ-рдЗрди рдкреИрдХреЗрдЬ 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 рджреНрд╡рд╛рд░рд╛ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдРрд╕рд╛ рдСрдбрд┐рдпреЛ рдЖрддрд╛ рд╣реИ рдЬреЛ рд╡реАрдбрд┐рдпреЛ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рд╣рдо рдкреНрд░реЙрдореНрдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдбрд┐рдпреЛ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдБ рддрдХ рдХрд┐ рд╕рдВрд╡рд╛рдж рднреА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


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