API تولید ویدیو
API تولید ویدیو به شما امکان میدهد با استفاده از مدلهای Sora از OpenAI و مدلهای Veo از گوگل، ویدیوهای تولید شده توسط هوش مصنوعی را از طریق پلتفرم AvalAI ایجاد کنید. تولید ویدیو به صورت ناهمزمان است - شما یک درخواست ارسال میکنید و با استفاده از endpoint وضعیت برای تکمیل آن بررسی میکنید.
⚠️ مهم: اگر ارتباط قطع شد
عملیات تولید ویدیو و ریمیکس به صورت ناهمزمان هستند - سرور بلافاصله پس از دریافت درخواست شما، پردازش را شروع میکند. اگر ارتباط شما در حین یا پس از ارسال قطع شود، فورا درخواست جدیدی برای تولید ارسال نکنید، زیرا این کار ممکن است منجر به شارژ تکراری شود.
در صورت قطع ارتباط چه باید کرد:
از endpoint لیست ویدیوها برای دریافت تمام ویدیوهای خود استفاده کنید:
curl -X GET https://api.avalai.ir/v1/videos/
-H "Authorization: Bearer $AVALAI_API_KEY"فیلد
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_identifier | string | فیلتر ویدیوها بر اساس safety identifier |
request_id | string | فیلتر ویدیوها بر اساس 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)
| پارامتر | نوع | الزامی | توضیحات |
|---|---|---|---|
model | string | بله | شناسه مدل مورد استفاده: "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" |
prompt | string | بله | توضیح متنی ویدیوی مورد نظر. حداکثر طول 1000 کاراکتر. |
seconds | string | خیر | مدت زمان ویدیو به ثانیه. برای مدلهای Sora حداقل مدت زمان 4 ثانیه است و مقادیر پشتیبانیشده عبارتاند از "4"، "8" و "12". مقدار پیشفرض "4" است. از فرمت رشته استفاده کنید. |
size | string | خیر | رزولوشن ویدیوی تولید شده. سایزهای پشتیبانی شده را در زیر ببینید. پیشفرض "720x1280". |
input_reference | file | خیر | فایل تصویر برای استفاده به عنوان مرجع تولید ویدیو (multipart/form-data). |
safety_identifier | string | خیر | شناسه اختیاری برای ردیابی داخلی. از این برای مرتبط کردن درخواستها با سیستمهای خود استفاده کنید (مثلا شناسههای دپارتمان، کدهای پروژه، شناسههای کاربر). حداکثر 256 کاراکتر. میتواند برای فیلتر کردن ویدیوها هنگام لیست کردن استفاده شود. برای جزئیات بیشتر به User API مراجعه کنید. |
سایزهای ویدیوی پشتیبانی شده
Sora 2
| سایز | نسبت تصویر | توضیحات |
|---|---|---|
720x1280 | 9:16 | عمودی (پیشفرض) |
1280x720 | 16:9 | افقی |
Sora 2 Pro
| سایز | نسبت تصویر | توضیحات |
|---|---|---|
720x1280 | 9:16 | عمودی (پیشفرض) |
1280x720 | 16:9 | افقی |
1024x1792 | 9:16 | عمودی با رزولوشن بالا |
1792x1024 | 16:9 | افقی با رزولوشن بالا |
Veo 3.1 Generate Preview
| سایز | نسبت تصویر | توضیحات |
|---|---|---|
720x1280 | 9:16 | عمودی |
1280x720 | 16:9 | افقی |
1080x1920 | 9:16 | عمودی با رزولوشن بالا |
1920x1080 | 16:9 | افقی با رزولوشن بالا |
Veo 3.1 Fast Generate Preview
| سایز | نسبت تصویر | توضیحات |
|---|---|---|
720x1280 | 9:16 | عمودی |
1280x720 | 16:9 | افقی |
1080x1920 | 9:16 | عمودی با رزولوشن بالا |
1920x1080 | 16:9 | افقی با رزولوشن بالا |
مدتزمانهای پشتیبانیشده ویدیو
برای مدلهای Sora، حداقل مدت زمان ویدیو 4 ثانیه است. مقادیر پشتیبانیشده برای پارامتر seconds عبارتاند از "4"، "8" و "12".
⚠️ هشدار: مدت زمان باید مضربی از 4 ثانیه باشد
مدلهای تولید ویدیو معمولا مدتزمانهایی را میپذیرند که مضربی از 4 ثانیه باشند (مانند
"4"،"8"و"12"). این الگو در بیشتر مدلهای تولید ویدیو رایج است، اما برای همه مدلها تضمین نمیشود. درخواست مدت زمان پشتیبانینشده با خطای400 Bad Requestمواجه خواهد شد. پیش از ارسال درخواست، مقادیر پشتیبانیشده مدل موردنظر را بررسی کنید.
مثالها
تولید ویدیوی پایه
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"
}'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}")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
تولید ویدیو با استفاده از یک تصویر به عنوان نقطه مرجع:
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"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}")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 تولید ویدیو:
curl https://api.avalai.ir/v1/videos/video_abc123 \
-H "Authorization: Bearer $AVALAI_API_KEY"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}")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های تولید ویدیو:
curl -X GET https://api.avalai.ir/v1/videos \
-H "Authorization: Bearer $AVALAI_API_KEY"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}")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. این برای بازیابی ویدیوهای مرتبط با دپارتمانها، پروژهها یا شناسههای ردیابی داخلی خاص مفید است:
curl -X GET "https://api.avalai.ir/v1/videos?safety_identifier=dept_123abc" \
-H "Authorization: Bearer $AVALAI_API_KEY"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']}")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. این زمانی مفید است که نیاز دارید یک ویدیو را بر اساس شناسه ردیابی درخواست پیدا کنید:
curl -X GET "https://api.avalai.ir/v1/videos?request_id=019b4797-14a2-79a0-8635-2cf8dd84820c" \
-H "Authorization: Bearer $AVALAI_API_KEY"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']}")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}`);
}ریمیکس ویدیوی موجود
ایجاد یک نسخه از یک ویدیوی موجود:
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"
}'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 دانلود کنید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 تولید ویدیو و محتوای آن:
curl -X DELETE https://api.avalai.ir/v1/videos/video_abc123 \
-H "Authorization: Bearer $AVALAI_API_KEY"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}")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}`);پاسخ حذف
{
"id": "video_abc123",
"object": "video.deleted",
"deleted": true
}فرمت پاسخ
شیء ویدیو
{
"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"
}پارامترهای پاسخ
| پارامتر | نوع | توضیحات |
|---|---|---|
id | string | شناسه منحصر به فرد برای job تولید ویدیو |
object | string | نوع شیء، همیشه "video" |
request_id | string | شناسه درخواست جهانی (UUID v7) برای ردیابی و جستجوی هزینه. همان x-request-id در header است اما برای مدیریت راحتتر ویدیو در بدنه پاسخ گنجانده شده است. برای جزئیات بیشتر به Response Headers مراجعه کنید. |
status | string | وضعیت فعلی: "queued", "processing", "completed", یا "failed" |
model | string | مدل استفاده شده برای تولید ویدیو |
prompt | string | prompt استفاده شده برای تولید ویدیو |
size | string | رزولوشن ویدیوی تولید شده |
seconds | string | مدت زمان ویدیو به ثانیه |
progress | integer | درصد پیشرفت تولید (0-100) |
remixed_from_video_id | string | شناسه ویدیوی اصلی اگر این یک ریمیکس است، در غیر این صورت null |
safety_identifier | string | شناسه سفارشی ارائه شده در درخواست، در صورت وجود |
created_at | integer | Unix timestamp زمان ایجاد job |
completed_at | integer | Unix timestamp زمان تکمیل job (null اگر تکمیل نشده) |
expires_at | integer | Unix timestamp زمان انقضای ویدیو (null اگر تنظیم نشده) |
error | object | جزئیات خطا اگر وضعیت "failed" است (در غیر این صورت null) |
پاسخ لیست ویدیو
{
"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
- تولید سریع با کیفیت بالا
- تعادل بهینه بین سرعت و کیفیت
- پشتیبانی از تصاویر مرجع برای کنترل بیشتر
وضعیت تولید ویدیو
تولید ویدیو ناهمزمان است و از طریق وضعیتهای زیر میگذرد:
| وضعیت | توضیحات |
|---|---|
queued | job ایجاد شده و در انتظار شروع است |
processing | ویدیو در حال تولید است |
completed | تولید ویدیو با موفقیت به پایان رسید |
failed | تولید ویدیو با شکست مواجه شد (برای جزئیات به فیلد error مراجعه کنید) |
بهترین شیوهها
Prompting مؤثر
مشخص و توصیفی باشید
- جزئیات در مورد موضوعات، اقدامات، تنظیمات، نورپردازی و حرکت دوربین را شامل شوید
- مثال: "توله سگ گلدن رتریور در حال دویدن در یک چمنزار آفتابی، دوربین در سطح زمین دنبال میکند با عمق میدان کم"
کار دوربین را مشخص کنید
- حرکات دوربین مورد نظر را ذکر کنید: "زوم آهسته به بیرون"، "نمای پیگیری"، "نمای بالا سری"
- مثال: "نمای هوایی پهپاد در حال فرود بر روی یک شهر ساحلی در غروب آفتاب"
عناصر زمانی را شامل شوید
- توالی رویدادها یا تغییرات را توصیف کنید
- مثال: "یک گل در حال شکوفه شدن به صورت تایملپس از جوانه تا شکوفایی کامل"
حال و هوا را تنظیم کنید
- از صفات توصیفی برای جو و احساسات استفاده کنید
- مثال: "کابین دنج در فضای داخلی با نور گرم شومینه، جو آرام و دلپذیر"
استفاده از تصاویر مرجع
- تصاویر مرجع با کیفیت بالا برای نتایج بهتر ارائه دهید
- تصاویر باید واضح و خوب ترکیب شده باشند
- تصویر مرجع صحنه را تنظیم میکند؛ prompt حرکت و تغییرات را توصیف میکند
- مثال: یک عکس چشمانداز را با prompt "دوربین به آرامی به سمت چپ حرکت میکند تا یک آبشار پنهان را نشان دهد" آپلود کنید
نکات بهینهسازی
- با ویدیوهای کوتاهتر شروع کنید - قبل از تولید محتوای طولانیتر با ویدیوهای 4 ثانیهای تست کنید
- بررسی کارآمد - از فواصل مناسب (مثلا 10 ثانیه) هنگام بررسی برای تکمیل استفاده کنید
- نتایج را کش کنید - ویدیوهای موفق را ذخیره کنید تا از تولید مجدد جلوگیری کنید
- شکستها را به درستی مدیریت کنید - منطق تلاش مجدد با backoff نمایی را پیادهسازی کنید
- هزینهها را نظارت کنید - استفاده از تولید ویدیو را پیگیری کنید، به ویژه برای ویدیوهای Sora 2 Pro با رزولوشن بالا
مدیریت خطا
API ممکن است کدهای خطای مختلفی را برگرداند:
| کد وضعیت | توضیحات |
|---|---|
| 400 | درخواست نادرست - پارامترهای نامعتبر (مثلا سایز یا مدت زمان پشتیبانی نشده) |
| 401 | غیرمجاز - کلید API نامعتبر |
| 403 | ممنوع - مجوزهای ناکافی یا دسترسی سطح tier |
| 404 | یافت نشد - شناسه ویدیو وجود ندارد |
| 429 | درخواستهای بیش از حد - محدودیت نرخ فراتر رفته است |
| 500 | خطای داخلی سرور - خطای سمت سرور رخ داده است |
مثال پاسخ خطا
{
"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 تولید همزمان ویدیو
برای اطلاعات بیشتر، به راهنمای محدودیتهای نرخ مراجعه کنید.
منابع مرتبط
- راهنمای تولید ویدیو با استفاده از Sora - راهنمای جامع برای تولید ویدیو
- مدلها - درباره مدلهای Sora به تفصیل بیاموزید
- احراز هویت - درباره روشهای احراز هویت بیاموزید
- مدیریت خطا - درباره استراتژیهای مدیریت خطا بیاموزید
- قیمتگذاری - جزئیات قیمتگذاری تولید ویدیو