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

تولید ویدیو با استفاده از Runway

نحوه تولید ویدیوهای مبتنی بر هوش مصنوعی با استفاده از مدل‌های Gen-4 از RunwayML را از طریق AvalAI API بیاموزید.

مقدمه

API ویدیو AvalAI اندپوینت‌هایی برای تولید ویدیو با استفاده از مدل‌های پیشرفته Gen-4 از RunwayML ارائه می‌دهد، از جمله مدل جدید gen4.5 - پیشرفته‌ترین مدل تولید ویدیوی آن‌ها. این مدل‌های پیشرفته می‌توانند ویدیوهای واقع‌گرایانه و خلاقانه از توضیحات متنی همراه با تصاویر مرجع ایجاد کنند، با پشتیبانی از:

  • تصویر به ویدیو: تولید ویدیوهای پویا با شروع از یک تصویر مرجع
  • تولید هدایت‌شده با متن: کنترل محتوای ویدیو با پرامپت‌های متنی دقیق
  • مدت زمان انعطاف‌پذیر: ایجاد ویدیوهای 2 تا 10 ثانیه‌ای
  • پردازش ناهمزمان: تولید ویدیو با دریافت وضعیت
  • رزولوشن‌های متعدد: پشتیبانی از نسبت‌های ابعاد و رزولوشن‌های مختلف

این راهنما استفاده از این قابلیت‌ها را از طریق AvalAI برای ایجاد محتوای ویدیویی جذاب با تکنولوژی Gen-4 از RunwayML پوشش می‌دهد.

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

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

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

  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"): تولید شروع شده یا تکمیل شده است و هزینه محاسبه خواهد شد. منتظر تکمیل این ویدیو بمانید به جای ایجاد درخواست تکراری.

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

درباره gen4.5 (جدید)

مدل gen4.5 از RunwayML پیشرفته‌ترین مدل تولید ویدیوی آن‌هاست و مرز جدیدی در تولید ویدیو را نشان می‌دهد:

  • واقع‌گرایی استثنایی: کیفیت بصری پیشرو در صنعت با فیزیک و نورپردازی طبیعی
  • انسجام برتر: ثبات زمانی پیشرفته برای حرکت روان و باورپذیر
  • مدت زمان: تا 10 ثانیه ویدیوی تولید شده
  • قیمت: $0.12 به ازای هر ثانیه ویدیوی تولید شده
  • پشتیبانی ورودی: متن به ویدیو با تصویر مرجع اختیاری
  • موارد استفاده: تولید محتوای حرفه‌ای، صحنه‌های سینمایی، تولیدات خلاقانه
  • پردازش: ناهمزمان با دریافت وضعیت

Gen4.5 در ایجاد محتوای ویدیویی بسیار واقع‌گرایانه با توجه استثنایی به فیزیک، نورپردازی و حرکت طبیعی عالی عمل می‌کند.

درباره gen4_turbo

مدل gen4_turbo از RunwayML یک مدل تولید ویدیوی با کارایی بالا است که برای سرعت و کیفیت بهینه شده:

  • پشتیبانی رزولوشن: رزولوشن‌های متعدد از 720x720 تا 2112x912
  • مدت زمان: 2 تا 10 ثانیه (انعطاف‌پذیر)
  • قیمت: $0.10 به ازای هر ثانیه ویدیوی تولید شده
  • نیاز به ورودی: نیاز به تصویر مرجع (input_reference)
  • موارد استفاده: محتوای خلاقانه، ویدیوهای شبکه‌های اجتماعی، دموهای محصول، داستان‌سرایی
  • پردازش: ناهمزمان با دریافت وضعیت

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

⚠️ مهم: محدودیت تعداد کاراکترهای پرامپت

فیلد prompt حداکثر 1000 کاراکتر را می‌پذیرد. اگر پرامپت شما از این حد بیشتر شود، API خطا برمی‌گرداند و تولید ویدیو با شکست مواجه می‌شود. پرامپت‌های خود را مختصر نگه دارید و روی مهم‌ترین عناصر بصری و حرکتی تمرکز کنید.

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

برای تولید ویدیو با RunwayML، باید هم یک پرامپت متنی و هم یک تصویر مرجع ارائه دهید. مدل از تصویر به عنوان نقطه شروع استفاده کرده و آن را طبق پرامپت شما متحرک می‌کند.

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

python
from openai import OpenAI
import time

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

# ایجاد درخواست تولید ویدیو با تصویر مرجع
video = client.videos.create(
    model="gen4_turbo",
    prompt="در یخچال باز می‌شود. یک هیولای بامزه و چاق بنفش از آن بیرون می‌آید.",
    input_reference=open("monster_original_720p.jpeg", "rb"),
    size="1280x720",
    seconds="2",
    safety_identifier="project_demo_001",  # اختیاری: برای ردیابی داخلی
)

print(f"تولید ویدیو شروع شد: {video.id}")
print(f"Request ID: {video.request_id}")  # برای ردیابی هزینه استفاده کنید

# دریافت وضعیت برای تکمیل
while True:
    video_status = client.videos.retrieve(video.id)

    if video_status.status == "completed":
        print(f"ویدیو آماده است! ID: {video.id}")

        # دانلود محتوای ویدیو
        with client.with_streaming_response.videos.retrieve_content(
            video.id
        ) as response:
            with open("runway_output.mp4", "wb") as f:
                for chunk in response.iter_bytes():
                    f.write(chunk)
        print("ویدیو در runway_output.mp4 دانلود شد")
        break
    elif video_status.status == "failed":
        print(f"تولید ناموفق بود: {video_status.error}")
        break

    time.sleep(10)
bash
# ایجاد درخواست تولید ویدیو با تصویر مرجع و safety_identifier
curl -X POST "https://api.avalai.ir/v1/videos" \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F "prompt=در یخچال باز می‌شود. یک هیولای بامزه و چاق بنفش از آن بیرون می‌آید." \
  -F "model=gen4_turbo" \
  -F "size=1280x720" \
  -F "seconds=2" \
  -F "safety_identifier=project_demo_001" \
  -F "input_reference=@monster_original_720p.jpeg;type=image/jpeg"

# بررسی وضعیت تولید
curl -X GET https://api.avalai.ir/v1/videos/video_45d4cf58-6c37-43f1-b7ca-8f349f280a3e \
  -H "Authorization: Bearer $AVALAI_API_KEY"

# دانلود ویدیوی تکمیل شده
curl -X GET https://api.avalai.ir/v1/videos/video_45d4cf58-6c37-43f1-b7ca-8f349f280a3e/content \
  -H "Authorization: Bearer $AVALAI_API_KEY" \
  --output runway_video.mp4
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'
});

async function generateVideo() {
    // ایجاد درخواست تولید ویدیو با تصویر مرجع
    const video = await client.videos.create({
        model: 'gen4_turbo',
        prompt: 'در یخچال باز می‌شود. یک هیولای بامزه و چاق بنفش از آن بیرون می‌آید.',
        input_reference: fs.createReadStream('monster_original_720p.jpeg'),
        size: '1280x720',
        seconds: '2',
        safety_identifier: 'project_demo_001'  // اختیاری: برای ردیابی داخلی
    });

    console.log(`تولید ویدیو شروع شد: ${video.id}`);
    console.log(`Request ID: ${video.request_id}`);  // برای ردیابی هزینه استفاده کنید

    // دریافت وضعیت برای تکمیل
    while (true) {
        const videoStatus = await client.videos.retrieve(video.id);
        
        if (videoStatus.status === 'completed') {
            console.log(`ویدیو آماده است! ID: ${video.id}`);
            
            // دانلود محتوای ویدیو
            const response = await client.videos.retrieveContent(video.id);
            const buffer = Buffer.from(await response.arrayBuffer());
            fs.writeFileSync('runway_output.mp4', buffer);
            console.log('ویدیو در runway_output.mp4 دانلود شد');
            break;
        } else if (videoStatus.status === 'failed') {
            console.log(`تولید ناموفق بود: ${videoStatus.error}`);
            break;
        }

        await new Promise(resolve => setTimeout(resolve, 10000));
    }
}

generateVideo();

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

مدل gen4_turbo از RunwayML طیف وسیعی از رزولوشن‌ها را برای موارد استفاده مختلف پشتیبانی می‌کند:

رزولوشن‌های استاندارد

  • 1024x1024 - مربع (پیش‌فرض)
  • 1080x1080 - مربع HD
  • 720x720 - مربع کوچک

رزولوشن‌های افقی

  • 1920x1080 - Full HD افقی
  • 1280x720 - HD افقی
  • 1808x768 - فوق‌العاده پهن افقی
  • 2112x912 - سینمایی افقی
  • 1680x720 - پهن افقی
  • 1168x880 - پهن افقی
  • 1360x768 - استاندارد افقی

رزولوشن‌های عمودی

  • 1080x1920 - Full HD عمودی
  • 720x1280 - HD عمودی
  • 1080x1440 - بلند عمودی
  • 720x960 - استاندارد عمودی

رزولوشنی را انتخاب کنید که بهترین تطابق را با پلتفرم محتوای شما و نیازهای نسبت ابعاد داشته باشد.

بررسی وضعیت ویدیو

برای برنامه‌های تولیدی، دریافت وضعیت راهی قابل اعتماد برای بررسی زمان تکمیل تولید ویدیو فراهم می‌کند.

python
from openai import OpenAI
import time

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


def check_video_status(video_id):
    """دریافت وضعیت برای تکمیل ویدیو با backoff نمایی"""
    max_attempts = 60
    wait_time = 10

    for attempt in range(max_attempts):
        video_status = client.videos.retrieve(video_id)

        if video_status.status == "completed":
            print(f"ویدیو {video_id} تکمیل شد!")
            print(f"استفاده: {video_status.usage}")
            print(f"هزینه تخمینی: {video_status.estimated_cost}")

            # دانلود ویدیو
            with client.with_streaming_response.videos.retrieve_content(
                video_id
            ) as response:
                with open(f"runway_{video_id}.mp4", "wb") as f:
                    for chunk in response.iter_bytes():
                        f.write(chunk)

            return True

        elif video_status.status == "failed":
            print(f"تولید ویدیو ناموفق بود: {video_status.error}")
            return False

        print(f"وضعیت: {video_status.status}, پیشرفت: {video_status.progress}%")
        time.sleep(wait_time)

    print("تایم‌اوت در انتظار تکمیل ویدیو")
    return False


# مثال استفاده
video = client.videos.create(
    model="gen4_turbo",
    prompt="حرکت نرم دوربین در یک منظره شهری آینده‌نگر در شب",
    input_reference=open("city_image.jpg", "rb"),
    size="1920x1080",
    seconds="5",
)

check_video_status(video.id)
bash
# دریافت وضعیت ویدیو
VIDEO_ID="video_45d4cf58-6c37-43f1-b7ca-8f349f280a3e"

while true; do
  STATUS=$(curl -s -X GET https://api.avalai.ir/v1/videos/$VIDEO_ID \
    -H "Authorization: Bearer $AVALAI_API_KEY" | jq -r '.status')

  if [ "$STATUS" = "completed" ]; then
    echo "ویدیو تکمیل شد! در حال دانلود..."
    curl -X GET https://api.avalai.ir/v1/videos/$VIDEO_ID/content \
      -H "Authorization: Bearer $AVALAI_API_KEY" \
      --output runway_$VIDEO_ID.mp4
    break
  elif [ "$STATUS" = "failed" ]; then
    echo "تولید ویدیو ناموفق بود"
    break
  else
    echo "وضعیت: $STATUS - در حال انتظار..."
    sleep 10
  fi
done
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'
});

async function checkVideoStatus(videoId) {
    const maxAttempts = 60;
    const waitTime = 10000;
    
    for (let attempt = 0; attempt < maxAttempts; attempt++) {
        const videoStatus = await client.videos.retrieve(videoId);
        
        if (videoStatus.status === 'completed') {
            console.log(`ویدیو ${videoId} تکمیل شد!`);
            console.log(`استفاده: ${JSON.stringify(videoStatus.usage)}`);
            console.log(`هزینه تخمینی: ${JSON.stringify(videoStatus.estimated_cost)}`);
            
            // دانلود ویدیو
            const response = await client.videos.retrieveContent(videoId);
            const buffer = Buffer.from(await response.arrayBuffer());
            fs.writeFileSync(`runway_${videoId}.mp4`, buffer);
            
            return true;
        } else if (videoStatus.status === 'failed') {
            console.log(`تولید ویدیو ناموفق بود: ${videoStatus.error}`);
            return false;
        }
        
        console.log(`وضعیت: ${videoStatus.status}, پیشرفت: ${videoStatus.progress}%`);
        await new Promise(resolve => setTimeout(resolve, waitTime));
    }
    
    console.log('تایم‌اوت در انتظار تکمیل ویدیو');
    return false;
}

// مثال استفاده
const video = await client.videos.create({
    model: 'gen4_turbo',
    prompt: 'حرکت نرم دوربین در یک منظره شهری آینده‌نگر در شب',
    input_reference: fs.createReadStream('city_image.jpg'),
    size: '1920x1080',
    seconds: '5'
});

await checkVideoStatus(video.id);

بهترین شیوه‌ها برای پرامپت‌نویسی

ایجاد پرامپت‌های مؤثر برای تولید ویدیوهای با کیفیت بالا با RunwayML حیاتی است. این دستورالعمل‌ها را دنبال کنید:

توصیفی و خاص باشید

توضیحات دقیق شامل موارد زیر ارائه دهید:

  • عناصر بصری: رنگ‌ها، نورپردازی، ترکیب‌بندی
  • حرکت: حرکات دوربین، اقدامات سوژه، سبک انیمیشن
  • سبک: سینمایی، واقع‌گرایانه، هنری، دراماتیک
  • حال و هوا: جوی، پرانرژی، آرام، مرموز

مثال خوب:

در یخچال به آرامی باز می‌شود و نور بنفش ملایمی از داخل آن نمایان می‌شود.
یک هیولای بامزه و چاق بنفش با احتیاط بیرون می‌آید و با چشمان کنجکاو به اطراف نگاه می‌کند.
انیمیشن روان با تغییرات ظریف نورپردازی.

مثال ضعیف:

هیولا بیرون می‌آید

حرکت و تحول را توصیف کنید

RunwayML در متحرک‌سازی تصاویر ایستا عالی است، پس روی حرکت تمرکز کنید:

  • "دوربین به آرامی به سمت جلو به داخل صحنه حرکت می‌کند..."
  • "سوژه با لبخند به سمت دوربین می‌چرخد..."
  • "آب شروع به جریان و موج‌زنی روی سطح می‌کند..."
  • "ابرها با تغییر نور در آسمان حرکت می‌کنند..."

زمینه صحنه را تنظیم کنید

جو و زمان‌بندی را مشخص کنید:

  • زمان روز (سحر، ساعت طلایی، شب)
  • آب و هوا و محیط (بادی، مه‌آلود، آفتابی)
  • جهت نورپردازی (نورپردازی از پشت، سایه‌های دراماتیک، درخشش ملایم)
  • سرعت (آرام و نرم، پویا و پرانرژی)

از توصیفات زمانی استفاده کنید

نحوه تکامل صحنه را در طول زمان توصیف کنید:

  • "شروع از سکون، به تدریج ایجاد حرکت..."
  • "سوژه به آرامی به سمت نور می‌چرخد..."
  • "حرکت ملایم دوربین برای نمایش بیشتر محیط..."
  • "عناصر یکی پس از دیگری به ترتیب زنده می‌شوند..."

راهنمای مدت زمان و قیمت‌گذاری

انتخاب مدت زمان مناسب

2-3 ثانیه: حلقه‌های سریع، کلیپ‌های شبکه‌های اجتماعی، انتقال‌ها

  • 4-6 ثانیه: محتوای استاندارد، نمایش محصولات، بخش‌های داستان
  • 7-10 ثانیه: توالی‌های توسعه‌یافته، انیمیشن‌های دقیق، محتوای روایی

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

با $0.05 به ازای هر ثانیه، هزینه‌های خود را بهینه کنید:

python
# 2 ثانیه = $0.10
# 5 ثانیه = $0.25
# 10 ثانیه = $0.50

# با مدت زمان‌های کوتاه‌تر برای تست شروع کنید
test_video = client.videos.create(
    model="gen4_turbo",
    prompt="پرامپت تست شما",
    input_reference=open("test_image.jpg", "rb"),
    size="1280x720",
    seconds="2",  # تست با حداقل مدت زمان
)

# فقط زمانی که نیاز دارید از مدت زمان‌های بلندتر استفاده کنید
final_video = client.videos.create(
    model="gen4_turbo",
    prompt="پرامپت نهایی شما",
    input_reference=open("final_image.jpg", "rb"),
    size="1920x1080",
    seconds="10",  # مدت زمان کامل برای خروجی نهایی
)

بهترین شیوه‌های تصویر مرجع

از آنجایی که gen4_turbo به تصویر ورودی نیاز دارد، این دستورالعمل‌ها را برای بهترین نتایج دنبال کنید:

کیفیت تصویر

  • از تصاویر منبع با کیفیت بالا استفاده کنید (حداقل 720p)
  • نورپردازی خوب و ترکیب‌بندی واضح را تضمین کنید
  • از تصاویر بسیار فشرده یا دارای artifact اجتناب کنید

محتوای تصویر

  • سوژه‌های واضح بهترین کار را انجام می‌دهند
  • پیش‌زمینه و پس‌زمینه به خوبی تعریف شده
  • کنتراست و جداسازی رنگ خوب
  • ترکیب‌بندی که امکان حرکت را می‌دهد

فرمت‌ها و اندازه فایل

  • فرمت‌های پشتیبانی شده: JPEG، PNG
  • اندازه توصیه شده: کمتر از 10MB برای آپلود سریع‌تر
  • رزولوشن: مطابق یا بیشتر از رزولوشن ویدیوی هدف شما

مقایسه با مدل‌های ویدیوی دیگر

RunwayML در مقابل Sora

RunwayML gen4_turbo:

  • ✅ نیاز به تصویر مرجع (تصویر به ویدیو)
  • ✅ کنترل بیشتر بر سبک بصری از طریق تصویر ورودی
  • ✅ هزینه کمتر با $0.05/ثانیه
  • ✅ مدت زمان‌های انعطاف‌پذیر (2-10 ثانیه)
  • ✅ پشتیبانی گسترده از رزولوشن

مدل‌های Sora:

  • ✅ متن به ویدیو (بدون نیاز به تصویر)
  • ✅ می‌توان از تصویر مرجع اختیاری استفاده کرد
  • ✅ هزینه بالاتر ($0.10-$0.50/ثانیه)
  • ✅ مدت زمان‌های ثابت (4 یا 8 ثانیه)
  • ✅ تخصصی در تولید ویدیوی خالص از متن

چه زمانی از RunwayML استفاده کنیم:

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

چه زمانی از Sora استفاده کنیم:

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

نکات یکپارچه‌سازی

با OpenAI SDK

مدل‌های RunwayML به طور یکپارچه با OpenAI SDK کار می‌کنند:

python
from openai import OpenAI

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

# همان رابط مانند سایر مدل‌های ویدیو
video = client.videos.create(
    model="gen4_turbo",
    prompt="پرامپت انیمیشن شما",
    input_reference=open("reference.jpg", "rb"),
    size="1920x1080",
    seconds="5",
)

پردازش دسته‌ای

پردازش کارآمد چندین ویدیو:

python
import concurrent.futures
from openai import OpenAI

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


def generate_video(image_path, prompt, duration):
    with open(image_path, "rb") as img:
        video = client.videos.create(
            model="gen4_turbo",
            prompt=prompt,
            input_reference=img,
            size="1280x720",
            seconds=str(duration),
        )
    return video.id


# ارسال چندین تولید به صورت موازی
video_requests = [
    ("image1.jpg", "انیمیشن صحنه 1", 4),
    ("image2.jpg", "انیمیشن صحنه 2", 5),
    ("image3.jpg", "انیمیشن صحنه 3", 6),
]

with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
    futures = [executor.submit(generate_video, *req) for req in video_requests]
    video_ids = [f.result() for f in concurrent.futures.as_completed(futures)]

print(f"ارسال شد {len(video_ids)} تولید ویدیو")

بهینه‌سازی عملکرد

کاهش فرکانس دریافت وضعیت

تعادل بین پاسخگویی و کارایی API:

python
import time


def smart_polling(video_id, initial_wait=15, max_wait=60):
    """دریافت وضعیت هوشمند با فواصل انطباقی"""
    wait_time = initial_wait

    while True:
        video_status = client.videos.retrieve(video_id)

        if video_status.status in ["completed", "failed"]:
            return video_status

        # زمان انتظار انطباقی بر اساس پیشرفت
        if hasattr(video_status, "progress") and video_status.progress:
            if video_status.progress > 80:
                wait_time = 10  # بررسی مکرر نزدیک به تکمیل
            elif video_status.progress > 50:
                wait_time = 20
            else:
                wait_time = min(wait_time * 1.5, max_wait)

        time.sleep(wait_time)

ردیابی و شناسایی

استفاده از safety_identifier برای ردیابی داخلی

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

  • ردیابی دپارتمان: شناسایی اینکه کدام تیم یا دپارتمان ویدیو را تولید کرده است
  • مدیریت پروژه: مرتبط کردن ویدیوها با پروژه‌ها یا کمپین‌های خاص
  • تخصیص هزینه: ردیابی هزینه‌ها در واحدهای تجاری مختلف
  • مسیرهای حسابرسی: نگهداری سوابق برای اهداف انطباق
python
# مثال: استفاده از safety_identifier برای ردیابی پروژه
video = client.videos.create(
    model="gen4_turbo",
    prompt="نمایش محصول با حرکت پویای دوربین",
    input_reference=open("product_image.jpg", "rb"),
    size="1920x1080",
    seconds="8",
    safety_identifier="marketing_dept_q4_campaign",
)

فیلتر ویدیوها بر اساس شناسه

می‌توانید لیست ویدیوهای خود را با استفاده از پارامتر safety_identifier فیلتر کنید:

bash
# لیست تمام ویدیوها برای یک پروژه خاص
curl -X GET "https://api.avalai.ir/v1/videos?safety_identifier=marketing_dept_q4_campaign" \
  -H "Authorization: Bearer $AVALAI_API_KEY"

استفاده از request_id برای ردیابی هزینه

هر پاسخ ویدیو شامل یک request_id (UUID v7) است که می‌توانید برای ردیابی دقیق هزینه استفاده کنید:

python
video = client.videos.create(
    model="gen4_turbo",
    prompt="پرامپت ویدیوی شما",
    input_reference=open("reference.jpg", "rb"),
    size="1920x1080",
    seconds="8",
)

# ذخیره request_id برای جستجوی هزینه
request_id = video.request_id
print(f"Request ID برای ردیابی هزینه: {request_id}")

# بعدا از /user/v1/transactions/lookup برای دریافت هزینه‌های دقیق استفاده کنید

همچنین می‌توانید ویدیوها را بر اساس 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"

برای جزئیات بیشتر در مورد ردیابی هزینه، به مستندات Response Headers و User API مراجعه کنید.

منابع مرتبط

مستندات رسمی

برای اطلاعات بیشتر درباره تکنولوژی و قابلیت‌های Gen-4 از RunwayML، از مستندات رسمی API RunwayML دیدن کنید.