ساخت ویدیوی کوتاه از روی توصیف متنی، با مدلهای Sora شرکت OpenAI و Veo گوگل. خروجی یک فایل MP4 همراه با صداست و هر دو خانواده با همین endpoint و همین کلید کار میکنند. فهرست مدلها و قیمت هر ثانیه در صفحهٔ مدلها.
رندر یک ویدیو یک تا چند دقیقه طول میکشد و هیچ درخواست HTTP اینقدر باز نمیماند. پس POST /videos بلافاصله یک شناسهٔ کار (vid_…) میدهد؛ شما هر چند ثانیه وضعیتش را میپرسید و وقتی status برابر completed شد، فایل را میگیرید.
سه قدم کامل
import time
job = client.videos.create(
model="sora-2",
prompt="نمای هوایی از جادهٔ کوهستانی در مه صبحگاهی، دوربین آرام جلو میرود",
seconds="8",
size="1280x720",
)
while job.status in ("queued", "in_progress"):
time.sleep(5)
job = client.videos.retrieve(job.id)
if job.status == "completed":
content = client.videos.download_content(job.id)
content.write_to_file("clip.mp4")
import { writeFile } from "node:fs/promises";
let job = await client.videos.create({
model: "sora-2",
prompt: "نمای هوایی از جادهٔ کوهستانی در مه صبحگاهی، دوربین آرام جلو میرود",
seconds: "8",
size: "1280x720",
});
while (job.status === "queued" || job.status === "in_progress") {
await new Promise((r) => setTimeout(r, 5000));
job = await client.videos.retrieve(job.id);
}
if (job.status === "completed") {
const file = await client.videos.downloadContent(job.id);
await writeFile("clip.mp4", Buffer.from(await file.arrayBuffer()));
}
# ۱) ساخت کار
curl https://netarz.ir/api/ai/v1/videos \
-H "Authorization: Bearer $NETARZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "sora-2",
"prompt": "نمای هوایی از جادهٔ کوهستانی در مه صبحگاهی",
"seconds": "8",
"size": "1280x720"
}'
# ۲) پرسیدن وضعیت (هر چند ثانیه یکبار)
curl https://netarz.ir/api/ai/v1/videos/vid_xxx \
-H "Authorization: Bearer $NETARZ_API_KEY"
# ۳) گرفتن فایل، وقتی status برابر completed شد
curl https://netarz.ir/api/ai/v1/videos/vid_xxx/content \
-H "Authorization: Bearer $NETARZ_API_KEY" -o clip.mp4
{
"id": "vid_9f2c4a1b7e5d3c8a0b6f1e2d",
"object": "video",
"created_at": 1790108108,
"completed_at": null,
"expires_at": null,
"model": "sora-2",
"status": "queued",
"progress": 0,
"seconds": "8",
"size": "1280x720",
"usd": "1.120000",
"refunded": false,
"error": null
}
پارامترها
| پارامتر | توضیح |
|---|---|
model الزامی | sora-2، sora-2-pro، veo-3.1، veo-3.1-fast، veo-3.1-lite یا یکی از مدلهای OpenRouter. مدتها و ابعاد مجاز هر مدل در capabilities.seconds و capabilities.sizes آمده است. |
prompt الزامی | توصیف صحنه، تا ۴۰۰۰ کاراکتر. فارسی را مستقیم بفرستید. |
seconds | مدت ویدیو. Sora: 4، 8 یا 12؛ Veo: 4، 6 یا 8 (قاعدهٔ 1080p و 4K). پیشفرض ۴ ثانیه. هزینه دقیقاً به همین نسبت بالا میرود. |
size | قاب تصویر: 1280x720 و 720x1280 روی هر دو مدل؛ 1792x1024 و 1024x1792 فقط روی sora-2-pro. اندازههای Veo در بخش Veo آمده است. اگر نفرستید یا auto بگذارید، اولین اندازهٔ همان مدل انتخاب میشود. |
وضعیت کار
| status | یعنی |
|---|---|
queued | پذیرفته شده و در نوبت رندر است. |
in_progress | در حال ساخت؛ progress درصد پیشرفت را میگوید. |
completed | آماده است؛ فایل را از /videos/{id}/content بگیرید. |
failed | ساخته نشد. علت در error میآید و هزینه به اعتبارتان برمیگردد. |
Endpointهای دیگر این خانواده
GET /videos— فهرست کارهای این پروژه، تازهترین اول. پارامترlimitتا ۱۰۰.GET /videos/{id}— وضعیت یک کار.GET /videos/{id}/content— خود فایل. در Sora با?variant=thumbnailتصویر بندانگشتی (WebP) و با?variant=spritesheetنوار فریمها (JPEG) را میگیرید؛ Veo این دو را نمیسازد و فقط خود ویدیو را دارد.DELETE /videos/{id}— لغو یک رندر. اگر هنوز تحویل نشده باشد، هزینهاش برمیگردد.
Veo (Google)
مدلهای ویدیوی گوگل همان سه قدم بالا را دارند: ساخت کار، پرسیدن وضعیت و گرفتن فایل. کد Sora را فقط با عوض کردن model و در صورت نیاز seconds و size برای Veo به کار میبرید و به کلید یا کتابخانهٔ گوگل نیازی ندارید.
curl https://netarz.ir/api/ai/v1/videos \
-H "Authorization: Bearer $NETARZ_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo-3.1-fast",
"prompt": "دستهای نانوا خمیر را ورز میدهند، صدای ملایم نانوایی",
"seconds": "8",
"size": "1920x1080"
}'
| شناسهٔ مدل | قابها (size) |
|---|---|
veo-3.1 | 1280x720، 720x1280، 1920x1080، 1080x1920، 3840x2160، 2160x3840 |
veo-3.1-fast | همان شش قاب، از جمله 4K |
veo-3.1-lite | 1280x720، 720x1280، 1920x1080، 1080x1920 (بدون 4K) |
- مدت:
4،6یا8ثانیه. قابهای 1080p و 4K فقط ۸ ثانیهای ساخته میشوند؛ مدت دیگر در این قابها خطای ۴۰۰ با کدinvalid_secondsمیگیرد، پیش از آنکه هزینهای کم شود. پیشفرضsecondsچهار ثانیه است، پس برای 1080p و 4K مقدار"8"را حتماً بفرستید. - صدا: Veo همیشه ویدیو را همراه صدا میسازد.
- فیلتر محتوا: اگر فیلتر محتوایی گوگل رندر را متوقف کند،
statusبرابرfailedمیشود و کل هزینه خودکار برمیگردد. توصیف را تغییر دهید و دوباره بفرستید. - فایل: گوگل فایل را حدود ۴۸ ساعت نگه میدارد؛ همان اول دانلودش کنید. برای Veo تصویر بندانگشتی و نوار فریم ساخته نمیشود.
ویدیو از راه OpenRouter
مدلهای ویدیوی دیگر، مثل Kling، Seedance، Wan، Hailuo، Grok Imagine، Runway Gen-4.5 و FLUX Video، با شناسهٔ openrouter/… همین سه قدم را دارند. فقط model، seconds و size را با مقدارهای همان مدل بفرستید.
- مدت و قاب: هر مدل مدتها (
capabilities.seconds) و قابهای خودش (capabilities.sizes) را دارد؛ مثلاً بعضی تا ۱۵ یا ۳۰ ثانیه میسازند. مقداری که مدل نداشته باشد، پیش از هر هزینهای خطای ۴۰۰ با کدinvalid_secondsیاinvalid_sizeو فهرست مقدارهای مجاز میگیرد. - تصویر اول: مدلی که
capabilities.image_inputدارد، تصویر اول ویدیو را از فیلدimage(base64 یا data URI) میگیرد. اگر سرویسدهنده برای تصویر ورودی جدا هزینه بگیرد، همان مبلغ (capabilities.image_input_cost) به هزینهٔ ویدیو اضافه میشود. - صدا: مدلی که
capabilities.audioدارد، ویدیو را همراه صدا میسازد و قیمتش هم قیمت همراه صداست. - فایل: فقط خود MP4؛ تصویر بندانگشتی و نوار فریم برای این مدلها ساخته نمیشود. لغو با
DELETEهزینه را برمیگرداند، ولی رندری که سرویسدهنده شروع کرده متوقف نمیشود.
قیمتگذاری
ویدیو بهازای هر ثانیهٔ ویدیوی ساختهشده حساب میشود، و نرخ هر ثانیه به ابعاد تصویر بستگی دارد. طول پرامپت در هزینه اثری ندارد.
- هزینه در همان لحظهای که ارائهدهنده کار را میپذیرد از اعتبارتان کم میشود؛ مبلغ دقیق در فیلد
usdهمان پاسخ اول آمده است. - اگر رندر با شکست تمام شود یا ارائهدهنده تحویلش ندهد، کل مبلغ خودکار به اعتبارتان برمیگردد و
refundedبرابرtrueمیشود. لازم نیست چیزی بخواهید. - در Sora، قاب
1024pحدود ۱٫۶۷ برابر720pهزینه دارد. - در Veo، هر مدل ضریب قابهای خودش را دارد و قاب بزرگتر ممکن است نرخ ثانیه را بالا ببرد. ضریب هر قاب در
capabilities.size_multipliersهمان مدل آمده است (GET /models)، و مدتهای مجاز هر قاب درcapabilities.seconds_by_size. - نرخ دقیق هر مدل به تومان و دلار در صفحهٔ مدلها و کلید
per_secondدر فهرست قیمتها.
نکات
- فایل ساختهشده ۴۸ ساعت در دسترس است؛ همان اول دانلودش کنید و در فضای خودتان نگه دارید. بعد از آن
/contentخطایvideo_expiredمیدهد. - هر کار متعلق به همان پروژهای است که ساخته شده؛ کلید پروژهٔ دیگر آن را نمیبیند.
- کاری که بیش از ۲۵ دقیقه باز بماند، ناموفق حساب و هزینهاش برگردانده میشود.
- ویرایش ویدیوی موجود، ادامهدادن (extend) و remix روی درگاه ارائه نمیشود.