داشبورد توسعه‌دهنده
پرسش از هوش مصنوعی
پرسش از هوش مصنوعی

API تولید ویدیو

API تولید ویدیو به شما امکان می‌دهد با استفاده از مدل‌های Sora از OpenAI و مدل‌های Veo از گوگل، ویدیوهای تولید شده توسط هوش مصنوعی را از طریق پلتفرم AvalAI ایجاد کنید. تولید ویدیو به صورت ناهمزمان است - شما یک درخواست ارسال می‌کنید و با استفاده از endpoint وضعیت برای تکمیل آن بررسی می‌کنید.

⚠️ مهم: اگر ارتباط قطع شد

عملیات تولید ویدیو و ریمیکس به صورت ناهمزمان هستند - سرور بلافاصله پس از دریافت درخواست شما، پردازش را شروع می‌کند. اگر ارتباط شما در حین یا پس از ارسال قطع شود، فورا درخواست جدیدی برای تولید ارسال نکنید، زیرا این کار ممکن است منجر به شارژ تکراری شود.

در صورت قطع ارتباط چه باید کرد:

  1. از endpoint لیست ویدیوها برای دریافت تمام ویدیوهای خود استفاده کنید:

    curl -X GET https://api.avalai.ir/v1/videos/
    -H "Authorization: Bearer $AVALAI_API_KEY"

  2. فیلد status آخرین ویدیوی خود را بررسی کنید:

    • اگر status == "failed": ویدیو شروع به تولید نکرده و هیچ هزینه‌ای اعمال نخواهد شد. می‌توانید با خیال راحت درخواست جدیدی ارسال کنید.
    • اگر status چیزی غیر از "failed" باشد (مثل "queued"، "processing"، "completed"): تولید شروع شده یا تکمیل شده است و هزینه محاسبه خواهد شد. منتظر تکمیل این ویدیو بمانید به جای ایجاد درخواست تکراری.

این روش به شما کمک می‌کند از استفاده غیرضروری از اعتبار و تولیدهای تکراری ویدیو جلوگیری کنید.

نقاط پایانی (Endpoints)

ایجاد ویدیو

POST https://api.avalai.ir/v1/videos

ارسال درخواست تولید ویدیو. یک شیء job با شناسه منحصر به فرد برای پیگیری پیشرفت تولید برمی‌گرداند.

بازیابی ویدیو

GET https://api.avalai.ir/v1/videos/{video_id}

بازیابی وضعیت و جزئیات یک job تولید ویدیو.

لیست ویدیوها

GET https://api.avalai.ir/v1/videos

لیست تمام job‌های تولید ویدیو برای حساب شما. از فیلتر کردن با پارامترهای query مانند safety_identifier و request_id پشتیبانی می‌کند.

پارامترهای Query:

پارامترنوعتوضیحات
safety_identifierstringفیلتر ویدیوها بر اساس safety identifier
request_idstringفیلتر ویدیوها بر اساس request ID

حذف ویدیو

DELETE https://api.avalai.ir/v1/videos/{video_id}

حذف یک job تولید ویدیو و محتوای مرتبط با آن.

ریمیکس ویدیو

POST https://api.avalai.ir/v1/videos/{video_id}/remix

ایجاد یک ویدیوی جدید بر اساس یک ویدیوی موجود با پارامترهای اصلاح شده.

بازیابی محتوای ویدیو

GET https://api.avalai.ir/v1/videos/{video_id}/content

دانلود فایل ویدیوی تولید شده. این endpoint فقط زمانی در دسترس است که وضعیت ویدیو "completed" باشد.

نکته‌های سازگاری با OpenAI Videos API

مستندات فعلی Videos API در OpenAI چرخه گسترده‌تری برای production با Sora توضیح می‌دهد: ایجاد jobهای رندر ناهمزمان، پایش با polling یا webhook، دانلود خروجی MP4 و assetهای پشتیبان، استفاده از image reference، ساخت characterهای قابل‌استفاده مجدد، extension و edit ویدیوهای کامل‌شده، و صف‌کردن renderهای بزرگ از طریق Batch. در AvalAI، endpointهای فهرست‌شده در همین صفحه را قرارداد پشتیبانی‌شده این route بدانید.

قابلیت OpenAI Videosراهنمای AvalAI
ایجاد و polling job رندراز طریق POST /v1/videos، GET /v1/videos/{video_id} و GET /v1/videos/{video_id}/content پشتیبانی می‌شود.
Image referenceبا input_reference در multipart پشتیبانی می‌شود؛ از JPEG، PNG یا WebP استفاده کنید و تصویر را تا حد امکان با size هدف هماهنگ نگه دارید.
Webhook برای تکمیلفقط وقتی AvalAI eventهای webhook ویدیو را برای حساب شما فعال کرده باشد استفاده کنید؛ در غیر این صورت با backoff polling کنید.
Character، extension و editتا وقتی /v1/videos/characters، /v1/videos/extensions یا /v1/videos/edits در این مرجع نیامده‌اند، آن‌ها را در دسترس فرض نکنید. اگر با workflow شما سازگار است، از route مستندشده remix استفاده کنید.
صف‌های batch برای ویدیوفقط پس از تأیید پشتیبانی AvalAI برای درخواست‌های batch روی /v1/videos از Batch API استفاده کنید؛ در غیر این صورت صف را در برنامه خودتان مدیریت کنید.
نگه‌داری بلندمدت assetهاویدیوهای کامل‌شده را سریع دانلود و در storage خودتان کپی کنید؛ URLهای محتوای تولیدشده را storage پایدار فرض نکنید.

برای الگوهای پیاده‌سازی و راهنمای prompt، تولید ویدیو با Sora را ببینید.

درخواست ایجاد ویدیو

بدنه درخواست (Request Body)

پارامترنوعالزامیتوضیحات
modelstringبلهشناسه مدل مورد استفاده: "sora-2"، "sora-2-pro"، "veo-3.1-generate-001"، "veo-3.1-fast-generate-001"، "gen4.5"، "gen4_turbo"، "veo-3.1-generate-preview" یا "veo-3.1-fast-generate-preview"
promptstringبلهتوضیح متنی ویدیوی مورد نظر. حداکثر طول 1000 کاراکتر.
secondsstringخیرمدت زمان ویدیو به ثانیه. برای مدل‌های Sora حداقل مدت زمان 4 ثانیه است و مقادیر پشتیبانی‌شده عبارت‌اند از "4"، "8" و "12". مقدار پیش‌فرض "4" است. از فرمت رشته استفاده کنید.
sizestringخیررزولوشن ویدیوی تولید شده. سایزهای پشتیبانی شده را در زیر ببینید. پیش‌فرض "720x1280".
input_referencefileخیرفایل تصویر برای استفاده به عنوان مرجع تولید ویدیو (multipart/form-data).
safety_identifierstringخیرشناسه اختیاری برای ردیابی داخلی. از این برای مرتبط کردن درخواست‌ها با سیستم‌های خود استفاده کنید (مثلا شناسه‌های دپارتمان، کدهای پروژه، شناسه‌های کاربر). حداکثر 256 کاراکتر. می‌تواند برای فیلتر کردن ویدیوها هنگام لیست کردن استفاده شود. برای جزئیات بیشتر به User API مراجعه کنید.

سایزهای ویدیوی پشتیبانی شده

Sora 2

سایزنسبت تصویرتوضیحات
720x12809:16عمودی (پیش‌فرض)
1280x72016:9افقی

Sora 2 Pro

سایزنسبت تصویرتوضیحات
720x12809:16عمودی (پیش‌فرض)
1280x72016:9افقی
1024x17929:16عمودی با رزولوشن بالا
1792x102416:9افقی با رزولوشن بالا

Veo 3.1 Generate Preview

سایزنسبت تصویرتوضیحات
720x12809:16عمودی
1280x72016:9افقی
1080x19209:16عمودی با رزولوشن بالا
1920x108016:9افقی با رزولوشن بالا

Veo 3.1 Fast Generate Preview

سایزنسبت تصویرتوضیحات
720x12809:16عمودی
1280x72016:9افقی
1080x19209:16عمودی با رزولوشن بالا
1920x108016:9افقی با رزولوشن بالا

مدت‌زمان‌های پشتیبانی‌شده ویدیو

برای مدل‌های Sora، حداقل مدت زمان ویدیو 4 ثانیه است. مقادیر پشتیبانی‌شده برای پارامتر seconds عبارت‌اند از "4"، "8" و "12".

⚠️ هشدار: مدت زمان باید مضربی از 4 ثانیه باشد

مدل‌های تولید ویدیو معمولا مدت‌زمان‌هایی را می‌پذیرند که مضربی از 4 ثانیه باشند (مانند "4"، "8" و "12"). این الگو در بیشتر مدل‌های تولید ویدیو رایج است، اما برای همه مدل‌ها تضمین نمی‌شود. درخواست مدت زمان پشتیبانی‌نشده با خطای 400 Bad Request مواجه خواهد شد. پیش از ارسال درخواست، مقادیر پشتیبانی‌شده مدل موردنظر را بررسی کنید.

مثال‌ها

تولید ویدیوی پایه

bash
curl -X POST https://api.avalai.ir/v1/videos \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -d '{
  "model": "sora-2",
  "prompt": "A calico cat playing a piano on stage under dramatic spotlights",
  "size": "1280x720",
  "seconds": "4"
}'
python
from openai import OpenAI

client = OpenAI(
    api_key="avalai-api-key",
    base_url="https://api.avalai.ir/v1",
)

# ایجاد job تولید ویدیو
video = client.videos.create(
    model="sora-2",
    prompt="A calico cat playing a piano on stage under dramatic spotlights",
    size="1280x720",
    seconds="4",  # or "8"
)

print(f"Video ID: {video.id}")
print(f"Status: {video.status}")

# بررسی برای تکمیل
import time

while video.status not in ["completed", "failed"]:
    time.sleep(5)
    video = client.videos.retrieve(video.id)
    print(f"Status: {video.status}")
javascript
import { OpenAI } from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

// ایجاد job تولید ویدیو
let video = await client.videos.create({
  model: "sora-2",
  prompt: "A calico cat playing a piano on stage under dramatic spotlights",
  size: "1280x720",
  seconds: "4",
});

console.log(`Video ID: ${video.id}`);
console.log(`Status: ${video.status}`);

// بررسی برای تکمیل
while (!["completed", "failed"].includes(video.status)) {
  await new Promise(resolve => setTimeout(resolve, 10000));
  video = await client.videos.retrieve(video.id);
  console.log(`Status: ${video.status}`);
}

if (video.status === "completed") {
  console.log(`از GET /v1/videos/${video.id}/content برای دانلود استفاده کنید`);
}

تولید ویدیو با تصویر مرجع

توجه: تصویر نمونه را برای تست دانلود کنید: monster_original_720p.jpeg

تولید ویدیو با استفاده از یک تصویر به عنوان نقطه مرجع:

bash
curl -X POST https://api.avalai.ir/v1/videos \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F prompt="The fridge door opens. A cute, chubby purple monster comes out of it." \
  -F model="sora-2" \
  -F size="1280x720" \
  -F seconds="4" \
  -F input_reference="@monster_original_720p.jpeg;type=image/jpeg"
python
from openai import OpenAI

client = OpenAI(
    api_key="your-avalai-api-key",
    base_url="https://api.avalai.ir/v1",
)

# ایجاد ویدیو با تصویر مرجع
video = client.videos.create(
    prompt="The fridge door opens. A cute, chubby purple monster comes out of it.",
    input_reference=open("monster_original_720p.jpeg", "rb"),
    model="sora-2",
    size="1280x720",
    seconds="4",
)

print(f"تولید ویدیو شروع شد: {video.id}")
javascript
import { OpenAI } from "openai";
import fs from 'fs';

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

// ایجاد ویدیو با تصویر مرجع
const video = await client.videos.create({
  prompt: "The fridge door opens. A cute, chubby purple monster comes out of it.",
  input_reference: fs.createReadStream("monster_original_720p.jpeg"),
  model: "sora-2",
  size: "1280x720",
  seconds: "4"
});

console.log(`تولید ویدیو شروع شد: ${video.id}`);

بازیابی وضعیت ویدیو

بررسی وضعیت یک job تولید ویدیو:

bash
curl https://api.avalai.ir/v1/videos/video_abc123 \
  -H "Authorization: Bearer $AVALAI_API_KEY"
python
from openai import OpenAI

client = OpenAI(
    api_key="your-avalai-api-key",
    base_url="https://api.avalai.ir/v1",
)

# بازیابی وضعیت ویدیو
video = client.videos.retrieve("video_abc123")

print(f"Status: {video.status}")
javascript
import { OpenAI } from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

// بازیابی وضعیت ویدیو
const video = await client.videos.retrieve("video_abc123");

console.log(`Status: ${video.status}`);

لیست تمام ویدیوها

بازیابی تمام job‌های تولید ویدیو:

bash
curl -X GET https://api.avalai.ir/v1/videos \
  -H "Authorization: Bearer $AVALAI_API_KEY"
python
from openai import OpenAI

client = OpenAI(
    api_key="your-avalai-api-key",
    base_url="https://api.avalai.ir/v1",
)

# لیست تمام ویدیوها
videos = client.videos.list()

for video in videos.data:
    print(f"{video.id}: {video.status}")
javascript
import { OpenAI } from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

// لیست تمام ویدیوها
const videos = await client.videos.list();

videos.data.forEach(video => {
  console.log(`${video.id}: ${video.status}`);
});

فیلتر ویدیوها بر اساس Safety Identifier

فیلتر ویدیوها با استفاده از پارامتر اختیاری safety_identifier. این برای بازیابی ویدیوهای مرتبط با دپارتمان‌ها، پروژه‌ها یا شناسه‌های ردیابی داخلی خاص مفید است:

bash
curl -X GET "https://api.avalai.ir/v1/videos?safety_identifier=dept_123abc" \
  -H "Authorization: Bearer $AVALAI_API_KEY"
python
import requests

response = requests.get(
    "https://api.avalai.ir/v1/videos",
    params={"safety_identifier": "dept_123abc"},
    headers={"Authorization": f"Bearer {api_key}"},
)

videos = response.json()
for video in videos["data"]:
    print(f"{video['id']}: {video['safety_identifier']}")
javascript
const response = await fetch(
  "https://api.avalai.ir/v1/videos?safety_identifier=dept_123abc",
  {
    headers: {
      Authorization: `Bearer ${process.env.AVALAI_API_KEY}`,
    },
  }
);

const videos = await response.json();
videos.data.forEach(video => {
  console.log(`${video.id}: ${video.safety_identifier}`);
});

فیلتر ویدیوها بر اساس Request ID

بازیابی یک ویدیوی خاص بر اساس request_id. این زمانی مفید است که نیاز دارید یک ویدیو را بر اساس شناسه ردیابی درخواست پیدا کنید:

bash
curl -X GET "https://api.avalai.ir/v1/videos?request_id=019b4797-14a2-79a0-8635-2cf8dd84820c" \
  -H "Authorization: Bearer $AVALAI_API_KEY"
python
import requests

response = requests.get(
    "https://api.avalai.ir/v1/videos",
    params={"request_id": "019b4797-14a2-79a0-8635-2cf8dd84820c"},
    headers={"Authorization": f"Bearer {api_key}"},
)

videos = response.json()
if videos["data"]:
    video = videos["data"][0]
    print(f"ویدیو پیدا شد: {video['id']}")
javascript
const response = await fetch(
  "https://api.avalai.ir/v1/videos?request_id=019b4797-14a2-79a0-8635-2cf8dd84820c",
  {
    headers: {
      Authorization: `Bearer ${process.env.AVALAI_API_KEY}`,
    },
  }
);

const videos = await response.json();
if (videos.data.length > 0) {
  console.log(`ویدیو پیدا شد: ${videos.data[0].id}`);
}

ریمیکس ویدیوی موجود

ایجاد یک نسخه از یک ویدیوی موجود:

bash
curl -X POST https://api.avalai.ir/v1/videos/video_691bab4a12248190b1e9123d8648ff4d/remix \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Extend the scene with the cat taking a bow to the cheering audience"
  }'
python
from openai import OpenAI

client = OpenAI(
    api_key="your-avalai-api-key",
    base_url="https://api.avalai.ir/v1",
)

# ریمیکس یک ویدیوی موجود
remixed_video = client.videos.remix(
    video_id="video_691bab4a12248190b1e9123d8648ff4d",
    prompt="Extend the scene with the cat taking a bow to the cheering audience",
)

print(f"Remixed video ID: {remixed_video.id}")

# سپس با client.videos.retrieve(remixed_video.id) وضعیت را بررسی کنید
# و زمانی که تکمیل شد با GET /v1/videos/{remixed_video.id}/content دانلود کنید
javascript
import { OpenAI } from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

// ریمیکس یک ویدیوی موجود
const remixedVideo = await client.videos.remix({
  videoId: "video_691bab4a12248190b1e9123d8648ff4d",
  prompt: "Extend the scene with the cat taking a bow to the cheering audience"
});

console.log(`Remixed video ID: ${remixedVideo.id}`);

// سپس با client.videos.retrieve(remixedVideo.id) وضعیت را بررسی کنید
// و زمانی که تکمیل شد با GET /v1/videos/{remixedVideo.id}/content دانلود کنید

حذف ویدیو

حذف یک job تولید ویدیو و محتوای آن:

bash
curl -X DELETE https://api.avalai.ir/v1/videos/video_abc123 \
  -H "Authorization: Bearer $AVALAI_API_KEY"
python
from openai import OpenAI

client = OpenAI(
    api_key="your-avalai-api-key",
    base_url="https://api.avalai.ir/v1",
)

# حذف ویدیو
result = client.videos.delete("video_abc123")
print(f"Video deleted: {result.deleted}")
javascript
import { OpenAI } from "openai";

const client = new OpenAI({
  apiKey: process.env.AVALAI_API_KEY,
  baseURL: "https://api.avalai.ir/v1",
});

// حذف ویدیو
const result = await client.videos.delete("video_abc123");
console.log(`Video deleted: ${result.deleted}`);

پاسخ حذف

json
{
  "id": "video_abc123",
  "object": "video.deleted",
  "deleted": true
}

فرمت پاسخ

شیء ویدیو

json
{
  "id": "vid_abc123",
  "object": "video",
  "request_id": "019b47a0-ece8-75b2-8a4c-40fcf4b49479",
  "status": "completed",
  "model": "sora-2",
  "prompt": "A calico cat playing a piano on stage under dramatic spotlights",
  "size": "1280x720",
  "seconds": 4,
  "created_at": "1763419001",
  "completed_at": "1763419063",
  "safety_identifier": "dept_123abc"
}

پارامترهای پاسخ

پارامترنوعتوضیحات
idstringشناسه منحصر به فرد برای job تولید ویدیو
objectstringنوع شیء، همیشه "video"
request_idstringشناسه درخواست جهانی (UUID v7) برای ردیابی و جستجوی هزینه. همان x-request-id در header است اما برای مدیریت راحت‌تر ویدیو در بدنه پاسخ گنجانده شده است. برای جزئیات بیشتر به Response Headers مراجعه کنید.
statusstringوضعیت فعلی: "queued", "processing", "completed", یا "failed"
modelstringمدل استفاده شده برای تولید ویدیو
promptstringprompt استفاده شده برای تولید ویدیو
sizestringرزولوشن ویدیوی تولید شده
secondsstringمدت زمان ویدیو به ثانیه
progressintegerدرصد پیشرفت تولید (0-100)
remixed_from_video_idstringشناسه ویدیوی اصلی اگر این یک ریمیکس است، در غیر این صورت null
safety_identifierstringشناسه سفارشی ارائه شده در درخواست، در صورت وجود
created_atintegerUnix timestamp زمان ایجاد job
completed_atintegerUnix timestamp زمان تکمیل job (null اگر تکمیل نشده)
expires_atintegerUnix timestamp زمان انقضای ویدیو (null اگر تنظیم نشده)
errorobjectجزئیات خطا اگر وضعیت "failed" است (در غیر این صورت null)

پاسخ لیست ویدیو

json
{
  "object": "list",
  "data": [
    {
      "id": "video_6949a20bad18819094b7f19168f56cbb",
      "object": "video",
      "request_id": "019b47a0-ece8-75b2-8a4c-40fcf4b49479",
      "created_at": 1766433289,
      "status": "completed",
      "completed_at": 1766433460,
      "error": null,
      "expires_at": 1766519691,
      "model": "sora-2",
      "progress": 100,
      "prompt": "A calico cat playing a piano on stage",
      "remixed_from_video_id": null,
      "seconds": "4",
      "size": null,
      "safety_identifier": "dept_123abc"
    },
    {
      "id": "video_69499f86a61c8190841c731e8bd0b4c8",
      "object": "video",
      "request_id": "019b4797-14a2-79a0-8635-2cf8dd84820c",
      "created_at": 1766432643,
      "status": "completed",
      "completed_at": 1766432819,
      "error": null,
      "expires_at": 1766519046,
      "model": "sora-2",
      "progress": 100,
      "prompt": "A calico cat playing a piano on stage",
      "remixed_from_video_id": null,
      "seconds": "4",
      "size": null
    }
  ],
  "first_id": "video_6949a20bad18819094b7f19168f56cbb",
  "last_id": "video_69499f86a61c8190841c731e8bd0b4c8",
  "has_more": true
}

مدل‌های موجود

مدلتوضیحاتحداکثر مدت زمانرزولوشن‌هاقیمت به ازای هر ثانیه
sora-2تولید ویدیوی کیفیت استاندارد با حرکت طبیعی12 ثانیه720x1280, 1280x720$0.10
sora-2-proتولید ویدیوی با کیفیت بالا با جزئیات و حرکت پیشرفته12 ثانیه720x1280, 1280x720, 1024x1792, 1792x1024$0.30 (استاندارد)
$0.50 (رزولوشن بالا)
gen4.5پیشرفته‌ترین مدل تولید ویدیوی RunwayML با واقع‌گرایی و انسجام استثنایی10 ثانیهچندین رزولوشن$0.12
gen4_turboتولید ویدیوی سریع RunwayML با کیفیت بالا و سرعت بهینه‌شده10 ثانیهچندین رزولوشن$0.10

Sora 2

  • تولید سریع ویدیو با حرکت طبیعی

  • پشتیبانی از جهت‌گیری عمودی و افقی

  • ایده‌آل برای شبکه‌های اجتماعی و برنامه‌های استاندارد

  • رزولوشن‌های 720x1280 و 1280x720

Sora 2 Pro

  • کیفیت پیشرفته با جزئیات و حرکت برتر
  • پشتیبانی از رزولوشن گسترده شامل خروجی‌های با رزولوشن بالا
  • درک پیشرفته prompt
  • انسجام زمانی و ترکیب صحنه بهتر
  • گزینه‌های رزولوشن بالای 1024x1792 و 1792x1024

RunwayML gen4.5

  • پیشرفته‌ترین مدل تولید ویدیوی RunwayML
  • واقع‌گرایی و انسجام استثنایی با فیزیک و نورپردازی دقیق
  • پشتیبانی از تولید با مرجع تصویر
  • مناسب برای تولید محتوای حرفه‌ای و خلاقانه

RunwayML gen4_turbo

  • تولید سریع با کیفیت بالا
  • تعادل بهینه بین سرعت و کیفیت
  • پشتیبانی از تصاویر مرجع برای کنترل بیشتر

وضعیت تولید ویدیو

تولید ویدیو ناهمزمان است و از طریق وضعیت‌های زیر می‌گذرد:

وضعیتتوضیحات
queuedjob ایجاد شده و در انتظار شروع است
processingویدیو در حال تولید است
completedتولید ویدیو با موفقیت به پایان رسید
failedتولید ویدیو با شکست مواجه شد (برای جزئیات به فیلد error مراجعه کنید)

بهترین شیوه‌ها

Prompting مؤثر

  1. مشخص و توصیفی باشید

    • جزئیات در مورد موضوعات، اقدامات، تنظیمات، نورپردازی و حرکت دوربین را شامل شوید
    • مثال: "توله سگ گلدن رتریور در حال دویدن در یک چمنزار آفتابی، دوربین در سطح زمین دنبال می‌کند با عمق میدان کم"
  2. کار دوربین را مشخص کنید

    • حرکات دوربین مورد نظر را ذکر کنید: "زوم آهسته به بیرون"، "نمای پیگیری"، "نمای بالا سری"
    • مثال: "نمای هوایی پهپاد در حال فرود بر روی یک شهر ساحلی در غروب آفتاب"
  3. عناصر زمانی را شامل شوید

    • توالی رویدادها یا تغییرات را توصیف کنید
    • مثال: "یک گل در حال شکوفه شدن به صورت تایم‌لپس از جوانه تا شکوفایی کامل"
  4. حال و هوا را تنظیم کنید

    • از صفات توصیفی برای جو و احساسات استفاده کنید
    • مثال: "کابین دنج در فضای داخلی با نور گرم شومینه، جو آرام و دلپذیر"

استفاده از تصاویر مرجع

  • تصاویر مرجع با کیفیت بالا برای نتایج بهتر ارائه دهید
  • تصاویر باید واضح و خوب ترکیب شده باشند
  • تصویر مرجع صحنه را تنظیم می‌کند؛ prompt حرکت و تغییرات را توصیف می‌کند
  • مثال: یک عکس چشم‌انداز را با prompt "دوربین به آرامی به سمت چپ حرکت می‌کند تا یک آبشار پنهان را نشان دهد" آپلود کنید

نکات بهینه‌سازی

  1. با ویدیوهای کوتاه‌تر شروع کنید - قبل از تولید محتوای طولانی‌تر با ویدیوهای 4 ثانیه‌ای تست کنید
  2. بررسی کارآمد - از فواصل مناسب (مثلا 10 ثانیه) هنگام بررسی برای تکمیل استفاده کنید
  3. نتایج را کش کنید - ویدیوهای موفق را ذخیره کنید تا از تولید مجدد جلوگیری کنید
  4. شکست‌ها را به درستی مدیریت کنید - منطق تلاش مجدد با backoff نمایی را پیاده‌سازی کنید
  5. هزینه‌ها را نظارت کنید - استفاده از تولید ویدیو را پیگیری کنید، به ویژه برای ویدیوهای Sora 2 Pro با رزولوشن بالا

مدیریت خطا

API ممکن است کدهای خطای مختلفی را برگرداند:

کد وضعیتتوضیحات
400درخواست نادرست - پارامترهای نامعتبر (مثلا سایز یا مدت زمان پشتیبانی نشده)
401غیرمجاز - کلید API نامعتبر
403ممنوع - مجوزهای ناکافی یا دسترسی سطح tier
404یافت نشد - شناسه ویدیو وجود ندارد
429درخواست‌های بیش از حد - محدودیت نرخ فراتر رفته است
500خطای داخلی سرور - خطای سمت سرور رخ داده است

مثال پاسخ خطا

json
{
  "error": {
    "message": "Invalid video size for model sora-2. Supported sizes: 720x1280, 1280x720",
    "type": "invalid_request_error",
    "code": "invalid_size"
  }
}

نظارت بر محتوا

تمام درخواست‌های تولید ویدیو مشمول نظارت بر محتوا هستند. Prompt‌هایی که سیاست محتوا را نقض می‌کنند رد می‌شوند. ویدیوها نیز پس از تولید برای اطمینان از انطباق تجزیه و تحلیل می‌شوند.

محدودیت‌های نرخ

تولید ویدیو محدودیت‌های نرخ جداگانه‌ای از سایر نقاط پایانی API به دلیل فشردگی منابع دارد:

  • Sora 2: تا 10 تولید همزمان ویدیو
  • Sora 2 Pro: تا 5 تولید همزمان ویدیو

برای اطلاعات بیشتر، به راهنمای محدودیت‌های نرخ مراجعه کنید.

منابع مرتبط