فحص التوقيت ذي الإسقاط ومن دون إسقاط
تتعرف هذه الأداة إلى القاعدة التي تدل عليها علامة الفصل في التوقيت، وتتحقق من صلاحيتها لمعدل الإطارات المُدخل، ثم تحول العلامة إلى عدد مطلق للإطارات يبدأ من الصفر.
شغّل الأداة مجانًا
وهي تراعي أرقام الإطارات المحذوفة من التسميات في صيغ الإسقاط المشتقة من NTSC، بدلاً من معاملة كل الدقائق بالطريقة نفسها. وتعرض النتيجة أيضاً معدل العد الاسمي، ومعدل التشغيل الفعلي، وعدد التسميات المتجاوزة، والثواني المنقضية، مما يفيد في قرارات المونتاج والتحقق من البيانات الوصفية ومسارات معالجة الوسائط المؤتمتة.
ما الذي يسقطه توقيت drop-frame فعلياً
لا يحذف توقيت drop-frame أي صورة فيديو، ولا يقصر مدة البرنامج، ولا يغير سرعة التشغيل. إنما يتجاوز أرقاماً محددة من التسميات كي تبقى الساعة المعروضة قريبة من الزمن الحقيقي عند المعدلات الكسرية المشتقة من NTSC. فعند 29.97 fps، يؤدي العد كما لو كان المعدل 30 fps بالضبط إلى انحراف يقارب 3.6 ثوانٍ كل ساعة. تصحح القاعدة ذلك بتجاوز التسميتين 00 و01 في بداية كل دقيقة، باستثناء كل دقيقة عاشرة. وعند 59.94 fps تتجاوز أربع تسميات، وعند 119.88 fps تتجاوز ثماني تسميات. تفسر الأداة الفاصلة المنقوطة أو النقطة قبل حقل الإطار على أنها drop-frame، بينما تدل النقطتان الرأسيتان على non-drop. لذلك يطرح العدد المصحح تسميات لم يكن ينبغي أن توجد، ولا يطرح إطارات من المادة المصورة، وبذلك يحول مرجعاً مقروءاً إلى موضع دقيق يبدأ من الصفر.
كيفية حساب عدد الإطارات
تربط الأداة أولاً معدل التشغيل بقاعدة العد الاسمية الصحيحة. فمثلاً يستخدم 29.97 عدداً اسمياً قدره 30 تسمية في الثانية، بينما يستخدم 23.976 عدداً قدره 24. ثم تتحقق من الدقائق والثواني وحقل الإطارات وفق تلك القاعدة. في نمط non-drop، تحول الساعات والدقائق والثواني مباشرة بالمعدل الاسمي وتضيف حقل الإطار الأخير. أما في نمط drop-frame، فتحسب كل الدقائق المكتملة السابقة، وتستثني كل دقيقة عاشرة من التصحيح، وتطرح تسميتين أو أربعاً أو ثمانياً بحسب المعدل. كما ترفض علامة مستحيلة مثل 00:01:00;00 عند 29.97، لأن أول علامة صحيحة في تلك الدقيقة هي 00:01:00;02. وتحسب الثواني المنقضية بقسمة العدد المصحح على معدل التشغيل الكسري الدقيق، مثل 30000/1001، لا على القيمة المقربة المعروضة. وهكذا تبقى العلاقة العملية بين الموضع والمدة محفوظة.
اختاروا القاعدة المثبتة في المصدر
لا يثبت معدل الإطارات الكسري وحده أن التوقيت يستخدم drop-frame. فقد يستخدم مشروع بمعدل 29.97 أو 59.94 تسميات drop-frame أو non-drop وفق متطلبات الإنتاج وإعدادات الأجهزة. لذلك تقرأ الأداة علامة الفصل الأخيرة ولا تفرض قاعدة: استخدموا الفاصلة المنقوطة أو النقطة عندما يحدد المصدر drop-frame، والنقطتين الرأسيتين عند تحديد non-drop. ولا تستخدم معدلات مثل 23.976 و24 و25 تصحيح التسميات القياسي المدعوم هنا، ولذلك تعيد علامة drop-frame معها خطأ بدلاً من رقم مضلل. احفظوا معدل الإطارات والتوقيت الكامل معاً في مسار الوسائط، لأن حذف علامة الفصل قد يمحو معلومات القاعدة. استخدموا عدد الإطارات الناتج كموضع يبدأ من الصفر، ثم أضيفوا أي إزاحة مستقلة لبداية المصدر عند الحاجة. يمنع هذا الفحص تحول الانحراف الصغير كل ساعة إلى خطأ ظاهر في المزامنة أو المونتاج.
حالات الاستخدام
التحقق من قائمة قرارات المونتاج
ارفضوا علامات drop-frame المستحيلة، وحولوا التوقيتات الصحيحة إلى مواضع مطلقة قابلة للمقارنة.
فحص مدة البث
أكدوا قاعدة برنامج مشتق من NTSC، واحسبوا الثواني من عدد الإطارات المصحح.
توحيد بيانات الوسائط الوصفية
سجلوا القاعدة والمعدل الاسمي ومعدل التشغيل الدقيق وعدد الإطارات قبل الفهرسة أو تحويل الترميز.
الأسئلة الشائعة
هل يحذف توقيت drop-frame إطارات الفيديو؟
لا. إنه يتجاوز تسميات رقمية محددة فقط، وتبقى جميع إطارات الفيديو المسجلة موجودة.
كيف تختار الأداة قاعدة التوقيت؟
تختار الفاصلة المنقوطة أو النقطة drop-frame، وتختار النقطتان الرأسيتان non-drop.
هل يمكن استخدام drop-frame مع 23.976؟
ليس وفق القاعدة القياسية المطبقة هنا. تعيد تلك العلامة مع 23.976 خطأ في الإدخال.
لماذا تكون 00:01:00;00 غير صالحة عند 29.97؟
لأن التسميتين 00 و01 تُتجاوزان في بداية تلك الدقيقة، وأول علامة صالحة هي 00:01:00;02.
ما تكلفة طلب API؟
يكلف كل طلب API مبلغ $0.002. ويمكن استخدام حاسبة المتصفح من دون طلب API.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/video2/drop-frame-timecode-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"framerate":29.97,"timecode":"01:00:00;00"}'const res = await fetch("https://api.kit.forhosting.com/video2/drop-frame-timecode-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"framerate": 29.97,
"timecode": "01:00:00;00"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/video2/drop-frame-timecode-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"framerate": 29.97,
"timecode": "01:00:00;00"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/video2/drop-frame-timecode-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"framerate":29.97,"timecode":"01:00:00;00"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"framerate":29.97,"timecode":"01:00:00;00"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/video2/drop-frame-timecode-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"framerate": 29.97,
"timecode": "01:00:00;00"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "video2.drop_frame_timecode_check",
"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 | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |