ffmpeg Python

mveghgv

كلما استعملت خط عربي مع 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