انتقل إلى المحتوى الرئيسي

لماذا تنقلب الحروف العربية في أدوات الكابشن؟ وكيف تعالج المشكلة

عندما يمر النص العربي في مسار إخراج لا ينفذ وصل الحروف وترتيب الاتجاه، قد يظهر مفكك الحروف أو معكوس الكلمات. المشكلة ليست في الخط ولا في جودة الفيديو، بل في خطوتين تقنيتين يمكن اختبارهما بوضوح.

هيئة تحرير ريفنا · نشر · روجع

تسميات توضيحية عربية بلا وصل حروف: حروف مقطعة وكلمات معكوسة الاتجاه
بلا وصل حروف ولا ترتيب اتجاه: الحروف منفصلة والكلمات معكوسة.
تسميات توضيحية عربية صحيحة بحروف موصولة واتجاه صحيح من اليمين إلى اليسار
مع وصل الحروف وUAX#9: النص نفسه مقروءا.

المحرك والخط والنص نفسها؛ والفرق هو تفعيل خطوتي المعالجة العربية. بيانات إعادة الإنتاج والبصمات الرقمية

العربية ليست «إنجليزية بحروف أخرى»

أغلب محركات النصوص تفترض ضمنا نموذج الكتابة اللاتيني: حرف مستقل، يليه حرف مستقل، من اليسار إلى اليمين. هذا الافتراض لا يصح في العربية.

العربية تحتاج شيئين لا تحتاجهما اللاتينية: أولا، أن يتصل الحرف بجاره ويتغير شكله حسب موضعه (أول الكلمة، وسطها، آخرها، أو منفصلا)، وهذا اسمه «وصل الحروف» (Shaping)، وهو غير التشكيل بالحركات. وثانيا، أن يعاد ترتيب النص للعرض من اليمين إلى اليسار وفق خوارزمية معيارية اسمها UAX#9 (Bidi).

إذا سقطت أي من الخطوتين لا يظهر خطأ ولا تحذير، بل نص غير مقروء.

البرهان: اختبار مضبوط، والفرق خطوة واحدة

الصورتان في الأعلى ناتجتان من مولد واحد قابل لإعادة الإنتاج، وبنفس الخلفية وخط Cairo والنص «أفضل كابشن عربي صحيح». يستخدم إطار الضبط محرك Pillow BASIC من دون وصل أو ترتيب ثنائي الاتجاه، بينما يستخدم إطار الإنتاج Pillow RAQM مع وصل الحروف وتطبيق UAX#9. يثبت بيان إعادة الإنتاج أسماء المحركات وبصمات الملفات.

انظر إلى النتيجة الأولى: «حيحص يبرع نشباك فض أ». هذه ليست لغة، بل كلمات صحيحة قرئت بالاتجاه المعكوس وحروفها لم تتصل. وهذا ما تنتجه أي أداة لا تنفذ الخطوتين.

والنتيجة الثانية هي النص نفسه: «أفضل كابشن عربي صحيح»، حروف موصولة واتجاه قراءة صحيح. الفرق كله في هاتين الخطوتين.

لماذا تسقط هذه الخطوة في أدوات كثيرة؟

السلسلة كلها بنيت على افتراض لاتيني. كثير من مسارات المعالجة تكتب النص مباشرة على الإطار عبر أدوات لا تصل الحروف. النص يظهر بلا خطأ، فيمر الاختبار دون أن يلاحظ أحد أن المخرج غير مقروء بالعربية.

وهنا مفارقة يقع فيها من يحاول الإصلاح بنفسه: بعض المحركات الحديثة تصل الحروف تلقائيا. فإن وصلت الحروف مسبقا ثم مررت النص إليها، جرى الوصل مرتين، والنتيجة أسوأ من الأصل: حروف مشوهة وترتيب معكوس. القاعدة: صل الحروف بنفسك فقط مع المحركات التي لا تصلها، واترك النص كما هو مع المحركات التي تصلها.

# محرك لا يصل الحروف (مثال: drawtext مع تعطيل الوصل)
#   → حروف منفصلة + ترتيب معكوس
ffmpeg -vf "drawtext=text_shaping=0:text='أضف كابشن عربي صحيح'" ...

# محرك يصل الحروف ويطبق UAX#9 (libass عبر مسار ASS)
#   → حروف موصولة + اتجاه صحيح
ffmpeg -vf "ass=subs.ass:fontsdir=/fonts" ...

الحل الصحيح، عمليا

الحل هو تمرير النص عبر محرك إخراج ينفذ وصل الحروف وخوارزمية الاتجاه معا: مسار حقيقي للترجمة النصية (ASS/libass) بدل كتابة النص خاما على الإطار.

وتبقى تفاصيل تفسد النتيجة إن أهملت: الأرقام (العربية الهندية مقابل اللاتينية حسب لغة المخرج)، والكلمات اللاتينية داخل جملة عربية (يجب عزلها كجزيرة اتجاه مستقلة وإلا انقلب ترتيبها)، ومنطقة الأمان في كل منصة حتى لا يختفي النص خلف الأزرار.

في مسار الفيديو في ريفنا تمر التسميات التوضيحية عبر ASS/libass، وهو مسار الإنتاج المسؤول عن دمجها في الفيديو. أما المقارنة المصورة أعلاه فهي اختبار مصغر بـPillow RAQM يعزل متغيري وصل الحروف والاتجاه حتى يمكن إعادة إنتاج البرهان وفحص بصماته.

أسئلة شائعة

هل تغيير الخط يحل المشكلة؟
لا. الخط يحمل أشكال الحروف، لكن الذي يقرر أي شكل يستخدم وبأي ترتيب هو محرك الإخراج. خط عربي ممتاز مع محرك لا يصل الحروف يخرج حروفا منفصلة معكوسة.
هل المشكلة في الذكاء الاصطناعي أو دقة التفريغ؟
لا علاقة لها بذلك. قد يكون التفريغ صحيحا 100% والنص سليما في الملف، ويقع العطل لاحقا لحظة رسم النص على الإطار.
وصلت الحروف بنفسي قبل التمرير فصار الناتج أسوأ. لماذا؟
لأن المحرك لديك يصل الحروف أصلا، فجرى الوصل مرتين. صل الحروف بنفسك فقط إذا كان المحرك لا يصلها، ومع libass أو raqm مرر النص المنطقي كما هو.
كيف أتحقق أن المخرج صحيح؟
اقرأ الكلمة الأولى: إن بدأت من اليمين وكانت حروفها موصولة، فوصل الحروف والاتجاه سليمان. وإن ظهرت مقلوبة أو رأيت حروفا منفصلة، فإحدى الخطوتين ساقطة.

المصادر الأولية

صيغ هذا الدليل لأغراض تحريرية وتشغيلية، ولا يمثل اعتمادا حكوميا أو رأيا قانونيا.