محاذاة النص مع توقيتات SRT وإنشاء الترجمة
حوّل نصاً نهائياً بسيطاً وخريطة توقيت موجودة إلى ترجمة SRT جاهزة للاستخدام. يصبح كل طابع زمني مقطعاً مرقماً، بينما يوفّر النص الكلمات الدقيقة التي ستظهر للمشاهد.
شغّل الأداة مجانًا
يحدد النص المرجعي الاختياري عدد الكلمات التابعة لكل مقطع زمني، لذلك لا تؤدي تصحيحات الإملاء وعلامات الترقيم إلى إفساد البنية الزمنية الأصلية. تستخدم النتيجة رموز توقيت SRT القياسية، وترقيماً ثابتاً، وأسطراً فارغة بين المقاطع، وحداً أقصى قابلاً للضبط لعدد المحارف في كل سطر.
جهّز النص وخريطة التوقيت
ابدأ بالنسخة النهائية من النص كما ينبغي أن تظهر في الترجمة. تُوحّد المسافات بين الكلمات، مع الاحتفاظ بالإملاء وحالة الأحرف وعلامات الترقيم. بعد ذلك قدّم قائمة مرتبة من الطوابع الزمنية. يحتاج كل عنصر إلى وقت بداية ووقت نهاية بالثواني، ويتحول إلى مقطع SRT واحد. ويمكن أن يتضمن أيضاً نصاً مرجعياً مأخوذاً من التفريغ الأصلي. لا تنسخ الأداة ذلك النص إلى الناتج، بل تحسب كلماته وتأخذ العدد نفسه من النص المصحح. يفيد ذلك في الاحتفاظ بأزمنة المقاطع الناتجة عن التفريغ الآلي بعد مراجعة الأسماء أو الصياغة. عند غياب النص المرجعي يستهلك كل طابع زمني كلمة واحدة، وهو مناسب لتوقيت الكلمات المفردة. يجب أن تغطي الأعداد المجمعة النص كاملاً. تؤدي الكلمات الزائدة أو الأعداد التي تتجاوز النص إلى خطأ إدخال صريح بدلاً من إسقاط المحتوى بصمت. تقبل الأوقات كسور الثواني مثل 1.25 أو 8.9.
اضبط طول أسطر الترجمة
اضبط max_chars_per_line وفق الحد الذي يتطلبه مسار التسليم أو المشغل أو جهة البث أو إرشادات الإتاحة. القيمة الافتراضية هي 42 محرفاً، والقيم المقبولة من 8 إلى 120. يحدث التفاف السطر عند حدود الكلمات فقط. تضيف الخوارزمية الكلمات إلى السطر حتى تصبح الكلمة التالية متجاوزة للحد، ثم تبدأ سطراً جديداً. لا تغيّر كلمة ولا تحذف علامة ترقيم ولا تضيف واصلة. إذا كانت كلمة واحدة أطول من الحد المطلوب، يُرفض الطلب برسالة واضحة حفاظاً على النص. يمكن عندئذ رفع الحد أو تحرير تلك الكلمة عن قصد. يبقى كل طابع زمني مقطعاً واحداً حتى عندما ينتج الالتفاف عدة أسطر؛ فلا تُنشأ أوقات جديدة ولا تُقسّم أثناء التنسيق. للحصول على ترجمة تقليدية من سطرين، جهّز مقاطع قصيرة بما يكفي لتلائم سطرين عند الحد المختار. تفرض القدرة عدد المحارف في السطر، ولا تطبق سياسة خفية لطول المقطع كله.
تحقق من التوقيت واستخدم ناتج SRT
قبل إنشاء أي مقاطع ترجمة، تتحقق الأداة من كل إدخال زمني. يجب أن تكون البداية والنهاية قيمتين محدودتين وغير سالبتين بالثواني، وأن تأتي النهاية بعد البداية. كما يجب أن تبقى العناصر مرتبة زمنياً؛ فلا يجوز أن يبدأ المقطع التالي قبل انتهاء السابق. يمكن لمقطعين متجاورين أن يلتقيا عند اللحظة نفسها. عند وجود تداخل أو مجال معكوس تتوقف المعالجة وتحدد العنصر الذي فشل عنده الترتيب. يمنع هذا السلوك ملف SRT من إخفاء عيوب توقيت قد تعرضها المشغلات بصورة غير متسقة. تُقرّب الثواني الصحيحة إلى أقرب ميلي ثانية وتنسق وفق HH:MM:SS,mmm. تشمل النتيجة سلسلة srt كاملة للنسخ أو الحفظ، ومصفوفة blocks للتطبيقات التي تحتاج بيانات منظمة. يبدأ ترقيم المقاطع من واحد، وتكون النتيجة حتمية دائماً عند تكرار المدخل نفسه. استخدمها تفاعلياً في المتصفح أو استدعِ API مقابل $0.002 ضمن مسار وسائط آلي.
حالات الاستخدام
تطبيق التصحيحات التحريرية
احتفظ بتوقيت المقاطع الآلي مع استبدال صياغته بنص مصحح ومعتمد.
تحويل توقيت الكلمات إلى SRT
حوّل طابعاً زمنياً لكل كلمة إلى مقاطع SRT سليمة دون تنسيق الرموز الزمنية أو الترقيم يدوياً.
الالتزام بحدود طول السطر
التف نص الترجمة عند حد معروف للمحارف قبل استيراده إلى مشغل أو نظام تحرير.
الأسئلة الشائعة
ما كلفة طلب API؟
تبلغ كلفة كل طلب API مقدار $0.002. يمكن استخدام نسخة المتصفح تفاعلياً دون إرسال المحتوى إلى نموذج بعيد.
هل يظهر النص المرجعي في الترجمة؟
لا. يحدد النص المرجعي عدد الكلمات فقط، أما الصياغة الظاهرة فتأتي دائماً من النص المقدم.
هل يمكن أن تتداخل الطوابع الزمنية؟
لا. يجب أن ينتهي كل مقطع بعد بدايته، وأن يبدأ المقطع التالي عند نهاية السابق أو بعدها.
ماذا يحدث إذا لم تتطابق أعداد الكلمات؟
يفشل الطلب إذا بقيت كلمات بلا تعيين أو إذا تطلبت الطوابع الزمنية كلمات أكثر مما يحتويه النص.
هل تُقسّم الكلمة الطويلة لتلائم الحد؟
لا. تؤدي الكلمة الأطول من max_chars_per_line إلى خطأ إدخال، وبذلك يبقى النص دون تغيير صامت.
كيف تُنسق كسور الثواني؟
تُقرّب الثواني إلى أقرب ميلي ثانية وتُكتب باستخدام الفاصلة القياسية في SRT.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/audio/audio-to-text-srt-align \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"transcript":"Welcome to the demonstration. This subtitle wraps cleanly.","timestamps":[{"start":0,"end":2.4,"text":"Welcome to the demonstration."},{"start":2.4,"end":5.2,"text":"This subtitle wraps cleanly."}]}'const res = await fetch("https://api.kit.forhosting.com/audio/audio-to-text-srt-align", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"transcript": "Welcome to the demonstration. This subtitle wraps cleanly.",
"timestamps": [
{
"start": 0,
"end": 2.4,
"text": "Welcome to the demonstration."
},
{
"start": 2.4,
"end": 5.2,
"text": "This subtitle wraps cleanly."
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/audio/audio-to-text-srt-align",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"transcript": "Welcome to the demonstration. This subtitle wraps cleanly.",
"timestamps": [
{
"start": 0,
"end": 2.4,
"text": "Welcome to the demonstration."
},
{
"start": 2.4,
"end": 5.2,
"text": "This subtitle wraps cleanly."
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/audio/audio-to-text-srt-align", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"transcript":"Welcome to the demonstration. This subtitle wraps cleanly.","timestamps":[{"start":0,"end":2.4,"text":"Welcome to the demonstration."},{"start":2.4,"end":5.2,"text":"This subtitle wraps cleanly."}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"transcript":"Welcome to the demonstration. This subtitle wraps cleanly.","timestamps":[{"start":0,"end":2.4,"text":"Welcome to the demonstration."},{"start":2.4,"end":5.2,"text":"This subtitle wraps cleanly."}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/audio/audio-to-text-srt-align", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"transcript": "Welcome to the demonstration. This subtitle wraps cleanly.",
"timestamps": [
{
"start": 0,
"end": 2.4,
"text": "Welcome to the demonstration."
},
{
"start": 2.4,
"end": 5.2,
"text": "This subtitle wraps cleanly."
}
]
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.audio_to_text_srt_align",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_items | 10000 |
max_chars | 500000 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |