رفتن به محتوا

ورودی ویدیو (Video Input)

فرستادن یک کلیپ ویدئویی همراه با پیام، تا مدل آن را ببیند و پاسخ بگوید

مستندات

کدام مدل‌ها ویدیو می‌پذیرند

ورودی ویدیو فقط روی مدل‌هایی کار می‌کند که قابلیت «ورودی ویدیو» دارند. فرستادن video_url به مدل‌های دیگر با خطای video_input_not_supported رد می‌شود. فهرست زیر مستقیم از کاتالوگ مدل‌ها خوانده می‌شود و همیشه به‌روز است:

در حال بارگذاری فهرست مدل‌ها… فهرست به‌روز همیشه در لیست مدل‌ها با فیلتر «ورودی ویدیو» هست، جایی که قیمت‌ها هم کنارش است.

ساختار content

فقط Base64، نشانی https پذیرفته نمی‌شود. برخلاف ورودی تصویر و ورودی فایل که یک نشانی عمومی را هم می‌پذیرند و خودشان دانلودش می‌کنند، ویدیو فقط به شکل data URI می‌آید، دقیقاً مثل ورودی صوت. یک نشانی فرستادن، از جمله لینک یوتیوب، با unsupported_attachment رد می‌شود.

مثل تصویر، فایل و صوت، content از یک رشتهٔ ساده به آرایه‌ای از «بخش»ها تبدیل می‌شود:

بخش‌های آرایهٔ content
نوع بخشفیلد دادهتوضیح
type: "text"textمتن پیام کاربر، در همان بخش کنار ویدیو.
type: "video_url"video_url.urlخود کلیپ ویدئویی: یک data URI با Base64 (مثل data:video/mp4;base64,...). نشانی https پذیرفته نمی‌شود.
{  "type": "video_url",  "video_url": {    "url": "data:video/mp4;base64,<Base64 کلیپ ویدئویی>"  }}

بقیهٔ درخواست تغییری نمی‌کند: همان model، همان messages، همان پارامترهای Chat Completions. حداکثر ۲ بخش video_url در یک درخواست جا می‌شود؛ بیشتر از آن با too_many_attachments رد می‌شود.

نمونه‌کد

فایل ویدئویی را بخوانید، Base64 کنید، و در یک بخش video_url بگذارید. به‌جای مدل نمونه، هر مدلی از فهرست بالا را می‌توانید بگذارید.

# ویدیو باید Base64 باشد؛ نشانی https پذیرفته نمی‌شود (حتی یوتیوب).VIDEO=$(base64 -w0 video.mp4) curl https://api-ai.hibanacloud.ir/v1/chat/completions \  -H "Authorization: Bearer YOUR_API_KEY" \  -H "Content-Type: application/json" \  -d '{    "model": "gemini-2.5-flash",    "messages": [{      "role": "user",      "content": [        {"type": "text", "text": "این ویدیو دربارهٔ چیست؟ در یک جمله بگو."},        {          "type": "video_url",          "video_url": {"url": "data:video/mp4;base64,'"$VIDEO"'"}        }      ]    }],    "max_completion_tokens": 1000  }'

فرمت‌ها و محدودیت‌ها

فرمت‌های پذیرفته‌شده
MIMEپسوند
video/mp4.mp4
video/mpeg.mpeg / .mpg
video/quicktime.mov (به‌صورت video/mov هم پذیرفته می‌شود)
video/webm.webm
محدودیت‌های ورودی ویدیو
محدودیتتوضیح
حجم۲۰ مگابایت برای هر کلیپ، پس از رمزگشایی از Base64 (نه حجم رشتهٔ Base64 خام).
تعدادحداکثر ۲ ویدیو در یک درخواست.
فقط Base64نشانی https پذیرفته نمی‌شود؛ حتی نشانی یوتیوب هم رد می‌شود. فقط data URI.
مدلفقط مدل‌هایی با قابلیت «ورودی ویدیو» (فهرست بالا)؛ روی مدل دیگری خطای video_input_not_supported برمی‌گردد.

روی endpoint دیگر

همین قابلیت روی /v1/responses هم کار می‌کند، اما با شکل کمی متفاوت. برخلاف صوت که دقیقاً همان بخش را روی هر دو endpoint می‌پذیرد، اینجا نوع بخش input_video است، نه video_url:

{  "type": "input_video",  "video_url": "data:video/mp4;base64,<Base64 کلیپ ویدئویی>"}

فیلد video_url در اینجا یک رشتهٔ ساده است، ولی شکل شیءِ {"video_url": {"url": "..."}} هم پذیرفته می‌شود اگر ترجیح می‌دهید همان ساختار Chat Completions را نگه دارید.

هزینه

ویدیو نرخ جداگانه ندارد. برخلاف صوت که به نرخ ورودی صوت خودش حساب می‌شود، ویدیو مثل متن معمولی با همان نرخ ورودی عادی مدل حساب‌وکتاب می‌شود، نه با نرخ جدا.

تعداد توکن یک کلیپ به مدل، طول کلیپ و کیفیت تصویر بستگی دارد و بین مدل‌ها می‌تواند چند برابر فرق کند. عدد دقیق هر درخواست در usage.prompt_tokens پاسخ برمی‌گردد، مثل همیشه.

بعضی مدل‌ها صدای همراه کلیپ را جداگانه به‌عنوان توکن صوت حساب می‌کنند؛ آن بخش به نرخ ورودی صوت همان مدل قیمت می‌خورد؛ همان نرخی که ورودی صوت توضیح داده. بقیهٔ prompt با نرخ معمول ورودی حساب می‌شود.

توضیح کلی محاسبهٔ هزینه در قیمت‌گذاری.

خطاها و رفع اشکال

خطاهای مخصوص ورودی ویدیو
کدمعنی
video_input_not_supportedمدل انتخاب‌شده ویدیو نمی‌پذیرد؛ از جدول بالا یک مدل بردارید.
video_too_largeکلیپ پس از رمزگشایی از ۲۰ مگابایت بزرگ‌تر است.
unsupported_video_typeفرمت جزو فهرست فرمت‌های پذیرفته‌شده نیست.
invalid_videoرمزگشایی Base64 شکست خورد یا داده خراب است.

فهرست کامل خطاها و معنی هرکدام در مدیریت خطاها آمده است. اگر کد خطا ندارید ولی نتیجه درست نیست، از حل مشکلات شروع کنید.