احسبوا إطارات GIF وقدّروا الحجم النسبي
مقطع مدته 12.5 ثانية بمعدل 10 إطارات في الثانية يعطي GIF من 125 إطارًا، مقابل 313 في المصدر بمعدل 25، أي أن الرسوم تحمل نحو خُمسي حمل الإطارات الأصلي. جرّب الإعدادات قبل التحويل. مجانًا في متصفحك.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- المدة (ث)
- 12.5
- معدل الإطارات
- 10
- معدل الإطارات المصدر
- 25
- عدد الإطارات
- 125
- عدد إطارات المصدر
- 313
- نسبة الحجم النسبي المقدّرة
- 0.399361
- الحجم النسبي المقدّر (%)
- 39.936
تحوّل هذه الحاسبة مدة مقطع الفيديو ومعدل الإطارات المطلوب للإخراج إلى عدد محدد من إطارات GIF. وتقارن النتيجة كذلك بعدد إطارات المصدر، بالاعتماد على المعدل الذي تقدمونه أو على القيمة الافتراضية 30 fps التي تظهر بوضوح في النتيجة. أما الحجم النسبي فهو تقدير للتخطيط قائم على عدد الإطارات، وليس وعداً بعدد وحدات البايت بعد الترميز، ولذلك يفيد في مقارنة الإعدادات قبل بدء التحويل الفعلي.
احسبوا الإطارات قبل بدء التحويل
قد يصبح تحويل الفيديو إلى GIF ثقيلاً بسرعة، لأن كل ثانية إضافية وكل إطار إضافي في الثانية يضيفان صورة كاملة أخرى إلى الخط الزمني للحركة. أدخلوا المدة الدقيقة للمقطع بالثواني ومعدل إطارات الإخراج الذي تنوون استخدامه. تضرب الحاسبة القيمتين ثم تقرّب الناتج إلى الأعلى، لكي تحصي جميع نقاط الإطارات المنتظمة الواقعة داخل المقطع.
فعلى سبيل المثال، ينتج المقطع الذي مدته 12.5 ثانية ومعدله 10 fps عدداً قدره 125 إطاراً. وتقبل الحاسبة المدد والمعدلات الكسرية، وهذا مفيد عندما لا ينتهي القص عند ثانية كاملة أو عندما تستخدم آلية العمل قيمة مثل 7.5 fps. ويكون عدد الإطارات صفراً إذا كانت المدة صفراً.
تعرض النتيجة المدة والمعدل بعد توحيدهما إلى جانب العدد المحسوب، حتى تتمكنوا من مراجعة الافتراضات أو حفظها مع مهمة التحويل. لا تفتح هذه العملية أي فيديو ولا تفك ترميزه ولا ترفعه ولا تعدله. إنها خطوة تخطيط سريعة تساعدكم على اختيار الإعدادات قبل تخصيص وقت المعالجة أو النقل أو التخزين لعملية إنشاء GIF الفعلية.
افهموا تقدير الحجم النسبي
يقارن تقدير الحجم النسبي عدد إطارات GIF المخطط لها بعدد الإطارات الموجودة في المقطع نفسه من المصدر. أدخلوا المعدل الحقيقي للفيديو الأصلي عندما يكون معروفاً. وإذا تركتم هذا الحقل، تستخدم الحاسبة 30 fps وتعرض هذه القيمة المرجعية في النتيجة، فلا يبقى الافتراض مخفياً.
تعني النسبة 0.5، التي تظهر أيضاً على هيئة 50 بالمئة، أن الخط الزمني المخطط له يحتوي على نصف عدد إطارات المصدر. أما النسبة الأعلى من 1 فتعني أن معدل الإخراج المطلوب ينشئ مواضع إطارات أكثر من المعدل الأصلي، وهو ما يؤدي عادة إلى تكرار المعلومات البصرية أو استيفائها بدلاً من إظهار تفاصيل جديدة. نطاق هذا القياس محدود عمداً؛ فهو يقدّر حمل الإطارات النسبي ولا يتنبأ بعدد وحدات البايت النهائية.
يستخدم GIF ضغط صور قائماً على لوحة ألوان، بينما يستخدم الفيديو غالباً الضغط بين الإطارات. لذلك قد يكون تأثير الدقة والحركة والألوان والتنقيط والشفافية وبرنامج الترميز الأصلي وإعدادات المشفر أكبر كثيراً من تأثير النسبة البسيطة. استخدموا التقدير لمقارنة معدلات متعددة للمقطع نفسه، لا بوصفه ضماناً لنسبة الضغط.
اختاروا معدل إخراج عملياً
ابدؤوا بالغرض البصري من GIF بدلاً من نسخ معدل المصدر تلقائياً. تظل عروض الواجهات القصيرة والمقاطع التفاعلية المتكررة واضحة غالباً عند معدل معتدل، بينما قد تحتاج حركة المؤشر السريعة أو مشاهد الألعاب أو الحركة الجسدية الدقيقة إلى عينات أكثر لتجنب القفزات المرئية. جرّبوا عدة معدلات مع تثبيت المدة ومعدل المصدر.
يوضح عدد الإطارات الزيادة الدقيقة في حمل الحركة، وتسهل النسبة المئوية المقارنة بين الخيارات. فإذا أدى خفض المعدل من 15 fps إلى 10 fps إلى تقليل العدد بمقدار الثلث من دون الإضرار بوضوح المحتوى، يكون التبسيط مفيداً عادة قبل التحويل. تذكروا أن تقليل أبعاد الصورة أو ألوان اللوحة قد يغير حجم الملف أكثر من خفض المعدل، ولا سيما في المناطق الفوتوغرافية أو كثيرة التشويش.
واحذفوا فترات السكون والبدايات أو النهايات الزائدة أيضاً؛ فالمدة والمعدل يُضرب أحدهما في الآخر، ولذلك يفيد القص جميع الإعدادات. تحققوا دائماً من الجودة وعدد وحدات البايت النهائي بواسطة المشفر الذي سينتج ملف GIF المطلوب.
حالات الاستخدام
توقع حمل التصدير
اعرضوا العدد المتوقع للإطارات قبل أن يرسل المستخدم مهمة تحويل فيديو إلى GIF.
مقارنة إعدادات الحركة
قيّموا عدة معدلات مستهدفة للمقطع والمصدر نفسيهما قبل اختيار إعداد مسبق للتصدير.
توضيح توقعات الرفع
استخدموا نسبة حمل الإطارات تنبيهاً واضحاً عندما يُحتمل أن تكون الحركة المطلوبة كبيرة على نحو غير معتاد.
الأسئلة الشائعة
كيف يُحسب عدد إطارات GIF؟
تُضرب المدة بالثواني في معدل الإطارات المستهدف، ثم يُقرّب الناتج إلى الأعلى ليشمل كل إطار مجدول داخل المقطع.
لماذا تحتاج الحاسبة إلى معدل إطارات المصدر؟
تستخدمه لمقارنة حمل الإخراج بالمصدر. وإذا لم تقدموا القيمة، تستخدم الحاسبة المعدل الافتراضي 30 fps وتعرضه.
هل تتنبأ النسبة المئوية بعدد وحدات البايت في GIF النهائي؟
لا. إنها نسبة بين أعداد الإطارات. تؤثر الأبعاد والألوان والحركة والتنقيط والشفافية وبرنامج الترميز وإعدادات المشفر في عدد وحدات البايت أيضاً.
ماذا يحدث إذا لم أدخل معدل إطارات المصدر؟
تفترض المقارنة حينها 30 إطارًا في الثانية وتذكر ذلك في النتيجة، فلا يبقى هذا الافتراض مخفيًا. وإذا كنت تعرف المعدل الحقيقي للمصدر فأدخله لتحصل على تقدير أدق.
ماذا تعني نسبة أكبر من 1؟
تعني أن المعدل المختار يُنشئ مواضع إطارات أكثر مما في المصدر، فيكرر GIF الصور أو يقحم صورًا وسيطة بدل إظهار تفاصيل جديدة. خفّض معدل الإخراج لتجنب ذلك.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/video/gif-frame-count \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"duration_seconds":12.5,"framerate":10}'const res = await fetch("https://api.kit.forhosting.com/video/gif-frame-count", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"duration_seconds": 12.5,
"framerate": 10
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video/gif-frame-count",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"duration_seconds": 12.5,
"framerate": 10
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video/gif-frame-count", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"duration_seconds":12.5,"framerate":10}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"duration_seconds":12.5,"framerate":10}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video/gif-frame-count", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"duration_seconds": 12.5,
"framerate": 10
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video.gif_frame_count",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_mb | 500 |
max_minutes | 60 |
max_megapixels | 3.9 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
اختاروا معدل إخراج عملياً
تكلف كل مطالبة API مبلغ $0.002 وتعيد JSON حتمياً مناسباً لأدوات التقدير والنماذج ومعاينة المهام والتخطيط الدفعي.
أسئلة تقنية
ماذا يحدث إذا كان معدل الإطارات صفراً أو سالباً؟
تفشل المطالبة بخطأ invalid_input لأن معدل الإطارات المستهدف يجب أن يكون موجباً.
ما تكلفة مطالبة API؟
تكلف كل مطالبة API مبلغ $0.002. ويمكن لحاسبة المتصفح تنفيذ العملية الحتمية نفسها محلياً.