ترجمة الفيديو: دمج ملف SRT نهائيًا باستخدام Rendi
تعلّم ترجمة الفيديو بدمج ملف SRT داخل MP4 عبر Rendi، من إرسال مهمة FFmpeg وتنسيق النص إلى التحقق من اكتمال المعالجة ومراجعة الناتج قبل تشغيل الدفعات.

إذا كانت ترجمة الفيديو جاهزة ومعتمدة في ملف SRT، فيمكن تحويلها مع الفيديو إلى ملف MP4 بترجمة مثبّتة من دون إضافة عامل لمعالجة الفيديو إلى بنيتك التحتية. يستقبل Rendi مرشح الترجمة المعتاد في FFmpeg على هيئة مهمة API، ويمنحك معرّف أمر، ثم يعيد ملفًا محفوظًا بعد نجاح المعالجة. والحد الفاصل هنا واضح: هذه العملية تثبّت الترجمة الموجودة داخل البكسلات؛ فهي لا تفرّغ الكلام المنطوق ولا تحكم على صحة الكلمات.
الخلاصة: متى تختار ترجمة الفيديو الثابتة؟
اختر دمج الترجمة مع الفيديو عندما يجب أن يرى جميع المشاهدين النص نفسه، بصرف النظر عن طريقة تعامل المشغّل مع مسارات الترجمة. وأبقِ ملف SRT منفصلًا عندما يحتاج المشاهد إلى إخفاء الترجمة أو تبديل اللغة أو استخدام عناصر التحكم في إمكانية الوصول التي يوفّرها المشغّل.
المسار العملي مع Rendi هو:
- راجع الفيديو النهائي وملف SRT معًا.
- ضع الملفين على رابطين يستطيع Rendi الوصول إليهما، أو ارفع الملفين المحليين إلى Rendi أولًا.
- أرسل أمر ترجمة الفيديو الموثّق في FFmpeg.
- استعلم دوريًا باستخدام معرّف الأمر، أو دع webhook يستقبل النتيجة النهائية.
- افحص بيانات MP4 الوصفية وشاهد الناتج كاملًا قبل إرسال مزيد من المهام.
لهذا الترتيب أهميته. فقد ينجح برنامج الترميز تقنيًا، بينما يظل الملف غير صالح للتسليم لأن سطرًا ظهر مبكرًا، أو اسمًا كُتب خطأ، أو نصًا اختفى خلف واجهة المنصة.

ماذا يفعل Rendi بالضبط؟
Rendi هو غرفة المحركات، لا غرفة التحرير. ترسل إليه تعليمة FFmpeg نفسها التي كنت ستشغّلها محليًا، لكن عبر HTTP API. تعامل مع الطلب كأنه أمر تشغيل: أسماء الإدخال تخبر النظام بمكان المواد، وسلسلة FFmpeg تحدد العملية المطلوبة، واسم الإخراج يحدد القطعة النهائية.
يتطلب مخطط الطلب الحالي الحقلين ffmpeg_command وoutput_files. تبدأ مفاتيح الإدخال بـ in_، وتبدأ مفاتيح الإخراج بـ out_، ثم تظهر هذه الأسماء نفسها داخل الأمر بين قوسين معقوفين مزدوجين. وعند قبول الطلب بنجاح، تحصل على command_id، وهو تذكرة متابعة المهمة.
في أبسط مسار، يوجد الفيديو وملف SRT على روابط HTTP عامة أو موقّعة ومحدودة المدة، على أن يظهر اسم الملف في نهاية كل رابط. أما المسار المحلي على حاسوبك المحمول فليس رابط إدخال. ويوفّر Rendi أيضًا مسار رفع مباشر متعدد الأجزاء للملفات المحلية، مع دعم ملفات يصل حجمها إلى 5 TB، لكنه خطوة تجهيز منفصلة.
الترجمة المثبّتة والمسار القابل للاختيار نتيجتان مختلفتان
تصبح الترجمة المثبّتة جزءًا من كل إطار بعد فك ترميزه. وهذا يضمن مظهرًا متسقًا، لكنه يجعل القرار نهائيًا أيضًا؛ فأي تصحيح إملائي يتطلب معالجة الفيديو من جديد، ولا يستطيع المشاهد إخفاء الترجمة.
أما مسار الترجمة القابل للاختيار فيبقى منفصلًا عن الصورة. يوصي مثال Rendi نفسه باستخدام mov_text لمسار ترجمة مرن داخل MP4، من دون مرشح الفيديو. بذلك تحتفظ للمشاهد بالتحكم وتتجنب تثبيت النص داخل الصورة.

قاعدتي واضحة: استخدم نسخة مراجعة أو ملفًا مخصصًا للنشر الاجتماعي بترجمة مثبّتة عندما يكون الاتساق البصري هو المطلوب. واحتفظ بملف SRT الأصلي، وقدّم مسارًا قابلًا للاختيار أو ملفًا مرافقًا حيث تكون إمكانية الوصول أو البحث أو الترجمة أو حرية المشاهد عوامل مهمة.
افحص ملف SRT قبل استهلاك مهمة معالجة
أوفر عملية معالجة هي التي لا تضطر إلى تكرارها. راجع ملف SRT مقابل النسخة النهائية نفسها، لا مقابل تصدير أقدم. تحقق من ترتيب المقاطع، وأوقات البداية والنهاية، وكتابة الأسماء والأرقام، وفواصل الأسطر المقصودة، وعينة ممثلة من الأحرف ذات العلامات النطقية أو غير اللاتينية. وانتبه إلى ترجمة تتصادم مع العناصر الرسومية في الثلث السفلي أو تقترب أكثر من اللازم من الحافة السفلية.
لا تخلط ذهنيًا بين هذه الخطوة والتفريغ بالذكاء الاصطناعي. يمكن لتقنية التعرف على الكلام أن تنشئ مسودة SRT في مرحلة سابقة، لكن ينبغي ألا يدخل الملف هذا المسار إلا بعد أن يعتمد شخص أو إجراء مراجعة موثوق النص والتوقيت. مهمة Rendi هنا هي المعالجة المرئية.
أرسل مهمة Rendi بتنسيق مخصص
يستخدم هذا المثال بلغة Node.js فيديو Rendi التجريبي العام وملف SRT التجريبي، لذلك لا تحتاج لتشغيله إلا إلى RENDI_API_KEY. تتطابق الحمولة مع أسماء الحقول وقواعد الأسماء البديلة في مخطط OpenAPI المنشور لدى Rendi. تنشئ قيم force_style نصًا أبيض بحد أسود وهامش سفلي، بينما ينتج libx264 مع AAC ملف MP4 الوارد في وصفة الترجمة لدى Rendi.
const headers = {
"X-API-KEY": process.env.RENDI_API_KEY,
"Content-Type": "application/json",
};
const submit = await fetch("https://api.rendi.dev/v1/run-ffmpeg-command", {
method: "POST",
headers,
body: JSON.stringify({
input_files: {
in_video: "https://storage.rendi.dev/sample/big_buck_bunny_720p_16sec.mp4",
in_srt: "https://storage.rendi.dev/sample/subtitles.srt",
},
output_files: { out_1: "subtitled.mp4" },
ffmpeg_command:
"-i {{in_video}} -vf \"subtitles={{in_srt}}:force_style='FontSize=22,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,Outline=2,Shadow=0,MarginV=36'\" -c:v libx264 -crf 20 -c:a aac -b:a 192k {{out_1}}",
}),
});
if (!submit.ok) throw new Error(await submit.text());
const { command_id } = await submit.json();
for (;;) {
const poll = await fetch(
`https://api.rendi.dev/v1/commands/${command_id}`,
{ headers: { "X-API-KEY": process.env.RENDI_API_KEY } },
);
const job = await poll.json();
if (job.status === "SUCCESS") {
console.log(job.output_files.out_1);
break;
}
if (job.status === "FAILED") throw new Error(job.error_message);
await new Promise((resolve) => setTimeout(resolve, 2000));
}يغيّر مرشح الترجمة إطارات الفيديو، لذلك لا بد من إعادة ترميز الفيديو. يمكنك ضبط النمط والترميز والجودة، لكن تعامل مع كل تغيير بوصفه ناتجًا جديدًا يحتاج إلى مراجعة. كما يوثّق دليل FFmpeg الرسمي لدى Rendi استخدام الخطوط المخصصة عبر fontsdir وFontName. اختبر الخط ومجموعة المحارف الفعلية قبل تطبيقهما على مكتبة كاملة.
ما الذي اختُبر فعليًا؟
في 11 سبتمبر 2026، جرت مطابقة نقطة النهاية وحقول الطلب وقواعد الأسماء البديلة وقيم الحالة وحقول الاستجابة الواردة أعلاه مع ملف OpenAPI المباشر لدى Rendi. كذلك شُغّل مرشح الترجمة نفسه محليًا باستخدام FFmpeg 8.0.1 على فيديو Rendi التجريبي العام وملف SRT الخاص به. وكانت النتيجة ملف MP4 مدته 16 ثانية، بأبعاد 1280 في 720، وفيديو H.264 وصوت AAC، كما أظهر إطار عند الثانية الخامسة الترجمة المتوقعة بوضوح.
لم تُرسل مهمة إلى سحابة Rendi لأن هذه البيئة لم تتضمن مفتاح Rendi API. جرت مطابقة الشيفرة مع المخطط والتحقق محليًا من عملية FFmpeg، لكننا لا نزعم تشغيلها سحابيًا.
استخدم الاستعلام الدوري للمهام القصيرة وwebhook للأطول
قد تعيد نقطة نهاية الحالة في Rendi إحدى القيم QUEUED أو PROCESSING أو PREPARED_FFMPEG_COMMAND أو FAILED أو SUCCESS. لا تعتبر قبول طلب POST دليلًا على اكتمال الفيديو. انتظر وصول المهمة إلى حالة نهائية، وأظهر error_message عند الفشل، ولا تقرأ الناتج إلا بعد النجاح.
يوصي Rendi بالاستعلام الدوري للمهام المتوقع انتهاؤها خلال نحو 30 ثانية أو أقل، واستخدام webhook للأعمال الأطول. يحمل webhook بيانات الأمر المكتمل نفسها التي يعيدها الاستعلام الدوري. وفي بيئة الإنتاج، اجعل معالج الاكتمال متحملًا للتكرار، وأعد الاستجابة سريعًا، واحتفظ بالاستعلام الدوري مسارًا احتياطيًا إذا تعذر تسليم webhook لاحقًا.
للملفات الحساسة، اضبط is_private: true ضمن خطة مدفوعة، ثم اطلب رابطًا موقّعًا مسبقًا عند الاستعلام. التخزين العام هو الوضع الافتراضي. لا يملك الملف الخاص رابطًا عامًا دائمًا، ولا يمكن أن تتجاوز صلاحية رابط التنزيل المطلوب 7 أيام.
افحص الناتج قبل تشغيل الدفعات
تثبت SUCCESS أن FFmpeg أنهى التنفيذ، لكنها لا تثبت جودة الترجمة. افحص الاستجابة المقروءة آليًا والصورة الفعلية معًا.
ابدأ بالتأكد من وجود output_files.out_1 ومن أن storage_url يعمل. قارن المدة والأبعاد والترميز وتنسيق الملف المعادة مع مواصفات التسليم المطلوبة. ثم شاهد الفيديو كاملًا، وركّز خصوصًا على أول مقطع وآخر مقطع وأسرع حوار وفواصل الأسطر والأسماء والأرقام والترجمة القريبة من مواضع القطع أو العناصر الرسومية المتراكبة.
بعد هذه المراجعة فقط يمكن إدخال إعداد النمط نفسه في قائمة انتظار. خزّن معًا نسخة فيديو المصدر، ونسخة SRT، وأمر FFmpeg، ومعرّف أمر Rendi، ومعرّف ملف الناتج، وقرار المراجع. هذا السجل يحوّل كومة من الملفات المعالجة إلى نظام إنتاج.
حساب التكلفة يعتمد على البايتات لا الدقائق
يحسب Rendi الحجم المجمع لوسائط الإدخال والإخراج. ففي مثال التسعير لديه، يساوي إدخال بحجم 1 GB مع إخراج بحجم 0.5 GB معالجة مقدارها 1.5 GB. ووفق هذا المثال تحديدًا، تكفي سعة 50 GB في خطة Free لتنفيذ 33 مهمة كاملة مع بقاء 0.5 GB، بينما تكفي سعة 250 GB في أولى خطط Pro لتنفيذ 166 مهمة كاملة مع بقاء 1 GB.

أعداد المهام هذه ناتجة عن حساب مثال Rendi، وليست اختبارًا معياريًا للترجمة. قد يكون ملف MP4 ذو الترجمة المثبّتة أكبر أو أصغر بحسب المصدر وإعدادات الترميز والناتج. قِس إجمالي الإدخال والإخراج لديك قبل توقع حجم التشغيل.
تكلف خطة Free مبلغ $0 شهريًا، وتشمل معالجة 50 GB، وتحدد زمن الأمر بـ1 دقيقة. أما أولى خطط Pro فتكلف $25 شهريًا، وتشمل 250 GB، وترفع الحد الأقصى للأمر إلى 10 دقائق. يعرض تفصيل أسعار Rendi كاملًا الإعدادات الأكبر للمعالج وخيارات زمن التشغيل غير المحدود، لذلك لا حاجة إلى تكرار تلك المصفوفة هنا.
المقارنة المهمة تشغيلية. يبلغ السعر المعلن لـ Kapwing Pro مقدار $16 لكل عضو شهريًا عند الفوترة السنوية، أو $24 عند الدفع الشهري. المحرر المرئي أسهل لمهمة عرضية واحدة، بينما يصبح Rendi منطقيًا أكثر عندما تكون اللمسة النهائية للترجمة خطوة متكررة في النظام، تبدأ من مواد معتمدة وتُتابع من دون أن يفتح شخص آخر محررًا.
سبعة مسارات عمل تحقق أكبر فائدة
لا تناسب هذه الطريقة كل من يضيف ترجمة. أفضل المستفيدين هم الفرق التي تمتلك ملف SRT معتمدًا بالفعل وتكرر عملية الإخراج النهائية.
ثلاثة منتجات تستحق البناء
1. أداة دفعات لترجمة متسقة مع هوية العلامة
هذه أقوى فرصة. ابنِ بوابة مركزة لفرق المحتوى والوكالات تستقبل رابط الفيديو وملف SRT المعتمد وإعداد نمط مسمى، ثم توفر صفحة مراجعة وملف MP4 قابلًا للتنزيل. ما يبيعه المنتج هو قابلية التكرار والاعتماد، لا محررًا عامًا لكل الأغراض.
يذهب نحو 1,900 بحث أمريكي شهريًا إلى add subtitles to a video، بينما يبدأ Kapwing Pro من $16 لكل عضو شهريًا عند الفوترة السنوية. الطلب واسع بما يكفي لاكتساب مستخدمين، ومسار العمل المتكرر داخل الفرق محدد بما يكفي لدعم منتج متخصص.
تحتاج أصغر نسخة قابلة للبيع إلى مدخلات بروابط موقّعة، والتحقق من SRT، وعدد محدود من إعدادات العلامة المقفلة، وإرسال المهمة إلى Rendi، ومعالجة webhook، وبيانات وصفية للناتج، وقبول أو رفض بشري. أما التحدي فهو صعوبة بناء ميزة دفاعية؛ فنموذج يغلّف استدعاء FFmpeg واحدًا سهل التقليد. ينبغي أن تأتي القيمة المستدامة من سجل الاعتماد وقواعد العلامة القابلة لإعادة الاستخدام ومطابقة النسخ واستعادة موثوقة بعد الأعطال.
2. واجهة API لمعالجة الترجمة مصممة للأتمتة
قدّم نقطة نهاية مستقرة واحدة للوكالات التي لا تريد تعريض عملائها لصياغة FFmpeg. يرسل العميل رابط الفيديو ورابط SRT واسم الإعداد ورابط callback، فتترجم خدمتك الإعداد إلى أمر خضع للمراجعة وتعيد نتيجة موحدة للمهمة.
تسجل Burn subtitles into video عدد 40 بحثًا أمريكيًا شهريًا وCPC يبلغ $8.16. الحجم صغير، لكن النية شديدة التحديد. ويكاد سؤال PAA، “How can I permanently burn SRT subtitles into a video?”، أن يكون طلب المنتج نفسه.
تحتاج النسخة الأولية إلى المصادقة، والتحقق من الطلب، وربط مهام Rendi، ومفاتيح منع التكرار، والتحقق من webhook، وحالة آمنة عند إعادة المحاولة، وسجلات الاستخدام. التحدي هنا هو التوزيع؛ فالبحث وحده لن يدعم النشاط، كما أن Rendi يتيح أصلًا واجهة API الأساسية. ولكي ينجح الغلاف، عليه أن يتفوق عبر تكاملات الوكالات والإعدادات الجاهزة وقابلية الرصد والدعم.
3. فحص مسبق للترجمة وتسليم بناتجين
ابنِ بوابة مراجعة تفحص ملف SRT واحدًا مقابل فيديو نهائي واحد، ثم تنتج من الزوج المعتمد ملف MP4 للمراجعة بترجمة مثبّتة وملف MP4 للتسليم بمسار ترجمة قابل للاختيار. المشتري هو فريق توطين أو تدريب أو عمليات إعلامية يفقد باستمرار معرفة نسخة الترجمة المطابقة لأي نسخة من الفيديو.
يظهر سؤال PAA الفعلي “How do I add SRT subtitles to a video?” إلى جانب الالتباس المتكرر في النتائج الحالية بين الترجمة الدائمة والقابلة للاختيار. يعالج المنتج المهمتين من دون إجبار المشغّل على اختيار آليات الحاوية وحده.
تحتاج النسخة الأولية إلى تحليل المقاطع، ومقارنة المدة، ومعاينة المنطقة الآمنة، ومعرّفات النسخ، ووصفتين مضبوطتين في FFmpeg، وسجل اعتماد. أما التحدي فهو أن التحقق الأساسي من SRT ميزة لا شركة؛ لذلك يجب أن تكون قيمة سجل المراجعة وضوابط التسليم كافية لإبقاء المنتج ضمن عملية الإصدار لدى الفرق.
الحدود والخلاصة الصريحة
يلغي Rendi الحاجة إلى تشغيل بنية FFmpeg التحتية لهذا المسار، لكنه لا يلغي المسؤولية التحريرية. فهو لن يصحح نصًا مفرغًا، أو يصلح توقيتًا سيئًا، أو يختار فواصل أسطر مقروءة، أو يقرر ما إذا كانت الترجمة المثبّتة هي الصيغة الصحيحة لإمكانية الوصول.
كما لا يمكنه جعل التثبيت بلا فقدان. يغيّر مرشح الترجمة إطارات الفيديو، ولذلك يُعاد ترميز الصورة. وتعتمد الجودة وزمن التشغيل وحجم الناتج على الأمر والمصدر. يبلغ حد الأمان الافتراضي لواجهة API مقدار 300 ثانية، بينما تحدد الخطة أقصى مدة يمكنك طلبها. وتحتاج المهمة الطويلة أو كثيفة الحوسبة إلى خطة يناسب سقف زمن الأوامر فيها عملية الترميز الفعلية.
لا تستخدم هذا المسار لمقطع عابر واحد إذا كانت أداة مجانية في المتصفح تنجز المهمة. ولا تثبّت الترجمة عندما يحتاج المشاهدون إلى إظهارها وإخفائها. ولا تشغّل دفعات بنمط لم يُراجع. تتضح قيمة Rendi عندما يجب تطبيق قاعدة إنهاء معتمدة واحدة بموثوقية على أصول كثيرة.
خطوة عملية ليوم الاثنين
خذ فيديو قصيرًا معتمدًا وملف SRT النهائي الخاص به. ضعهما خلف رابطين يمكن الوصول إليهما، وشغّل الحمولة التجريبية بالنمط الذي اخترته، وافحص البيانات الوصفية المعادة، ثم شاهد ملف MP4 كاملًا على أصغر شاشة تدعمها. لا تحفظ الأمر المقبول بوصفه إعدادًا جاهزًا إلا بعد هذه المراجعة. بعدها صِل الإعداد بالنقطة التي يَسِم فيها مسار عملك الفيديو والترجمة بأنهما معتمدان بالفعل.
كيف يمكن حرق ترجمة SRT نهائيًا على الفيديو؟
استخدم مرشح الفيديو subtitles في FFmpeg كي يُرسم النص داخل كل إطار، ثم رمّز فيديو جديدًا. في Rendi، اربط فيديو المصدر وملف SRT بأسماء بديلة تبدأ بـ in_، واربط اسم MP4 باسم يبدأ بـ out_، ثم أرسل الأمر وانتظر SUCCESS قبل تنزيله ومراجعته.
كيف يمكن حرق الترجمة على الفيديو؟
ابدأ بالفيديو النهائي وملف ترجمة معتمد. اختر أمر التثبيت عندما يجب أن يظل النص ظاهرًا دائمًا، واختر مسار ترجمة قابلًا للاختيار عندما ينبغي أن يتحكم المشاهد فيه. في Rendi، يستخدم المسار الموثّق للتثبيت الأمر -vf subtitles={{in_srt}} ويعيد ترميز الفيديو.
كيف أضيف ملف SRT إلى فيديو؟
يمكنك إما تثبيت SRT داخل البكسلات، وإما إرفاقه كمسار ترجمة منفصل. يضمن التثبيت مظهرًا ثابتًا في كل مكان، لكن لا يمكن إخفاؤه. أما المسار المرن فيظل قابلًا للتعديل والاختيار. يوثّق Rendi مرشح subtitles للتثبيت وmov_text لمسار MP4 القابل للاختيار.
كيف أحرق الترجمة على الفيديو باستخدام HandBrake؟
يوفّر HandBrake واجهة سطح مكتب لإضافة ملف SRT خارجي وتحديده كترجمة مثبّتة. وهو خيار منطقي للمهام اليدوية العرضية. أما Rendi فيخدم غرضًا مختلفًا: إرسال عملية FFmpeg المكافئة عبر API عندما تكون المعالجة جزءًا من نظام مؤتمت.
إذا أردت دمج مسار وسائط خاضع للمراجعة كهذا في نشاطك، فاطّلع على أنظمة الإنتاج بالذكاء الاصطناعي.
- آخر تحديث
- 11 سبتمبر 2026
- التصنيف
- Build







