ffmpeg Python

كلما استعملت خط عربي مع ffmpeg بالبايثون ل لصق ملفات ترجمة على فيديوهات تظهر لي بعض المربعات و المستطيلات وسط الأحرف لم أجد أي خط مناسب سوي Noto Sans Arabic لم يُظهر مربعات او شئ لكن مشكلته هي ظهور علامات التشكيل و التنوين لاصقه على بعض الأحرف و ليست بعيده عنها

حاولت باستخدام https://glyphrstudio.com/app

تعديل الـ glyphrs الخاصه بعلامات التشكيل و التنوين بإزاحتها للأعلي قليلاً لكن كلما فعلت ذلك و اعدت التجربة باستخدام الخط أجد أن الحروف التي عليها تشكيل تنفصل عن البقيه كحروف منفصله

فما الحل؟

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

تعديل الـ glyphs يدويًا في Glyphr Studio ستؤدي إلى فصل الحروف لأنك بذلك تجاوزت قواعد التشكيل والترابط OpenType features المدمجة في الخط.

فالخط العربي معقد بسبب تغير شكل الحرف حسب موضعه، وجود حركات التشكيل، والترابط بين الحروف، لذا يجب استخدام خطوط عربية مصممة خصيصًا لدعم تلك التعقيدات بشكل صحيح، والتأكد من أن FFmpeg يستخدم محرك عرض نصوص يدعم تشكيل النص المعقد مثل HarfBuzz الذي تستخدمه مكتبة libass التي يعتمد عليها FFmpeg لعرض الترجمات.

الأفضل هو خط Amiri المبني على خط النسخ، ويودعم كامل للحركات والتشكيلات، كذلك الخطوط التالية:

  • Cairo 
  • Tajawal 
  • Scheherazade New
  • IBM Plex Sans Arabic

تستطيع تحميلها مجانًا من Google Fonts ويجب تحميل ملف .ttf أو .otf

وعند استخدام فلتر subtitles في FFmpeg، يجب أن تُحدد بوضوح أين يجد ملف الخط.

وهناك حل آخر، وهو إزالة التشكيل والتنوين من النص بواسطة مكتبة re وكتابة regex لذلك:

import re


def remove_tashkeel(text):
    arabic_diacritics = re.compile(r'[\u064B-\u065F\u0670]')
    return arabic_diacritics.sub('', text)


text_without_tashkeel = remove_tashkeel("مَرْحَباً بِكَ")

شكراً لك

حاولت تثبيت نسخة ffmpeg تدعم HarfBuzz و لكن لم يتغير شئ للاسف و نفس الشئ مع الخطوط

بالنهايه وجدت ان المشكله ليست بالخطوط بل الحل في تحويل ملفات ال subtitle ل صيغه ass

أولاً قبل أي شئ نحول ملفات الترجمة من نوع SRT إلى صيغة ASS باستخدام FFmpeg فهي مصممة خصيصاً للتحكم الكامل في شكل الترجمة، بما في ذلك نوع الخط، حجمه، لونه، ومكانه.

بعد ذلك قم بتغيير اسم الخط إلى اسم الخط العربي الذي تريد استخدامه وبعد ذلك يمكنك دمج الترجمة مع الفيديو، ويجب أن نستخدم فلتر ass ونخبره بمكان وجود الخطوط. هذا يضمن أن FFmpeg سيجد الخط الذي حددته في ملف الـ ASS.

شكراً لك نجحت فكرة تحويل الملف لـ ass بكفاءة