محوّل الترجمات إلى نص — SRT و VTT و SBV و ASS

حوّل ترجمات SRT و VTT و SBV و ASS إلى نصّ نظيف. يحذف الطوابع الزمنية، ويلمّ الجمل المقطوعة، ويزيل تكرار الترجمات التلقائية.

تحويل ملفات الترجمة إلى نص: لماذا نزع الأكواد الزمنية هو النصف السهل

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

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

مشكلة التكرار المتدحرج

هذه هي التي تباغت الناس. فالترجمة الآلية في YouTube وفي معظم أنظمة البثّ الحيّ لا تُخرج كتلًا نصية منفصلة. تُخرج نافذة متحركة كي يرى المشاهد الكلمات تتراكم. وفي الملف يبدو ذلك هكذا:

  • اللقطة 1: من طلب العلا
  • اللقطة 2: من طلب العلا سهر
  • اللقطة 3: العلا سهر الليالي

والجمع بلا تفكير يعطيك «من طلب العلا من طلب العلا سهر العلا سهر الليالي» — عشر كلمات حيث قيلت ستّ. وعلى محاضرة من ساعة يضاعف ذلك الطول ثلاث مرات تقريبًا ويجعل النصّ عديم الفائدة للقراءة والبحث والتلخيص.

والعلاج أن نُبقي ما تضيفه كل لقطة فقط. فمع كل لقطة جديدة تبحث الأداة عن أطول سلسلة كلمات تكون في آن واحد لاحقةً للنص المتراكم وسابقةً للقطة الجديدة، ثم تحذفها. وبتطبيق ذلك على المثال أعلاه تستعيد «من طلب العلا سهر الليالي» مرة واحدة بالضبط. وتجري المقارنة على نافذة محدودة من الكلمات الأخيرة لا على النص كله، فيبقى الأداء سريعًا في ملف من ثلاث ساعات، ولا تُحذف عبارة تكرّرت بحقّ بعد عشرين دقيقة.

إعادة وصل الجمل

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

يجمع وضع الفقرات اللقطات ويقطع حين يجتمع شرطان: أن يكون النص المتراكم كافيًا لفقرة، وأن تنتهي اللقطة الحالية بعلامة ترقيم تُنهي جملة. وهكذا لا يقع القطع في منتصف فكرة أبدًا. وثمّة سقف صارم يفرض القطع في النهاية، لأن بعض المتحدثين يمضون وقتًا طويلًا جدًا بلا نقطة، والجدار النصّي المتصل نوع آخر من انعدام القراءة. وتغيّر المتحدث يبدأ فقرة جديدة دائمًا، وهو ما يهمّ في المقابلات والندوات.

أربع صيغ وفكرة واحدة

تُكتشف الصيغة من محتوى الملف نفسه لا من امتداده، لأن ملفات الترجمة يُعاد تسميتها باستمرار، وملف .txt يحوي بيانات SubRip أمر شائع.

  • SubRip (.srt) — فهرس رقمي، ثم مدى زمني بفاصلة عشرية بالفاصلة، ثم النص. أوسع الصيغ إنتاجًا وأبسطها.
  • WebVTT (.vtt) — معيار المتصفحات. نقطة عشرية بدل الفاصلة، وكتل NOTE وSTYLE وREGION الاختيارية التي ليست كلامًا وتُزال قبل التحليل. ويسمح VTT أيضًا بترميز مضمّن: <v Speaker> يسمّي المتحدث، و<c.classname> يطبّق تنسيقًا، والطوابع الزمنية المجرّدة داخل اللقطة تُبرز الكلمات على طريقة الكاريوكي. وكلها تُفكّ، ويصير وسم الصوت اسمًا للمتحدث.
  • YouTube (.sbv) — زوج أكواد زمنية مفصول بفاصلة في سطر مستقل، ثم النص. بلا فهرس وبلا ترميز.
  • Advanced SubStation (.ass و.ssa) — قائمة أحداث بترتيب أعمدة معلن. يقرأ المحلّل سطر Format: ذاك بدل افتراض المواضع، لأن حقل النص أخير تحديدًا كي يستطيع أن يحوي فواصل. وكتل التجاوز بين قوسين معقوفين تعليمات تنسيق تُزال؛ وفواصل الأسطر \N تصير مسافات. وعمود Name، حين يكون مملوءًا، هو المتحدث.

المتحدثون والمؤثرات الصوتية وما يستحقّ البقاء

تصل نسبة الكلام إلى قائله بثلاث طرق مختلفة بحسب الصيغة: حقل مخصّص في ASS، أو وسم صوت في VTT، أو مجرّد العُرف القاضي بكتابة الاسم: في أول السطر في SRT، التي لا تملك حقل متحدث أصلًا. والثلاثة تُميَّز وتُوحَّد في المخرجات. والاستدلال في الحالة الثالثة ضيّق عن عمد — سلسلة قصيرة بأحرف كبيرة يتبعها نقطتان — لأن بادئة بأحرف صغيرة كانت ستطابق جملًا عادية تحتوي نقطتين وتمزّق النصّ.

والإشارات الصوتية بين قوسين مثل [MUSIC] و(laughter) و[APPLAUSE] تبقى افتراضيًا ويمكن إزالتها بمفتاح. وأيّهما الصواب يتوقف تمامًا على الغرض: ففي أرشيف قابل للبحث أو سجلّ إتاحة هي جزء من المحتوى، وفي محاضرة تُطعمها لنموذج ليلخّصها هي ضجيج.

ثلاثة أشكال للمخرجات

تغطّي الإعدادات الجاهزة ما يريده الناس فعلًا. نصّ نظيف فقرات متصلة بلا أكواد زمنية، للقراءة أو الاقتباس أو التسليم إلى نموذج. ومع الطوابع الزمنية يُبقي الفقرات ويعلّم كلًّا منها بوقت بدايتها، وهو ما تريده حين يكون النصّ وسيلة للعودة إلى لحظة في الفيديو. وأسطر الترجمة يُبقي سطرًا لكل لقطة مع كودها الزمني وبلا إزالة تكرار — أقرب شيء إلى الملف الأصلي، ومفيد حين تفحص الترجمات نفسها لا حين تقرأها.

وإلى جانب المخرجات تُبلّغ الأداة بالصيغة المكتشفة وعدد اللقطات وعدد الكلمات والمدة المغطّاة وكم تكرارًا أُزيل. والرقم الأخير هو الصادق: إن كان كبيرًا فالمصدر آليّ ومتدحرج، وترى بالضبط كم من الملف الخام كان تكرارًا.

لا شيء يغادر المتصفح

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