يمكن أن تتداخل المقاطع مع ترتيب بداياتها؛ وتعيد activeCues قائمة المقاطع النشطة حاليا. نختبر ذلك في ملف من ثلاثة مقاطع. [1] [2]
الخلاصة السريعة
- في قياسنا عند3.5 ثانية ظهرت الهويتان A وB معا.
- عند4.5 بقي B وحده، وعند6.5 ظهر C.
- عند0.5 و7.5 كانت القائمة فارغة؛ الملف نفسه ظل يحتوي ثلاثة مقاطع.
- اختبرنا ست لحظات بعيدة عن حدود المقاطع، باستخدام صوت صامت أنشأناه.
ثلاث فترات في ملف قصير
جعلنا A من الثانية1 إلى4، وB من3 إلى6، وC من6 إلى7. وضعنا حرفا عربيا واحدا في كل مقطع: أ، ثم ب، ثم ج. الهويات اللاتينية تسهل قراءة سجل الاختبار، والحروف العربية تؤكد أن النص الذي قرأه المتصفح هو نصنا الأصلي.
حفظنا المحتوى التالي باسم overlap.vtt بترميز UTF-8. يبدأ الملف بعلامة WEBVTT، والنهاية تتجاوز البداية لكل مقطع؛ هويات المقاطع فريدة. [1]
WEBVTT
A
00:00:01.000 --> 00:00:04.000
أ
B
00:00:03.000 --> 00:00:06.000
ب
C
00:00:06.000 --> 00:00:07.000
ج
كيف جهزنا الثواني الثماني؟
أنشأنا ملف WAV صامتا بهذه الشيفرة في مجلد تجريبي خال من ملف باسم silence.wav، باستخدام Python 3.12.14. يحتوي مولدنا64000 عينة أحادية، ومعدلها8000 عينة في الثانية؛ لذلك مدته ثماني ثوان. لا يوجد متحدث ولا تسجيل صوتي لشخص في هذا الاختبار.
import wave
with wave.open("silence.wav","wb") as w:
w.setnchannels(1)
w.setsampwidth(2)
w.setframerate(8000)
w.writeframes(b"\0\0"*8*8000)
كانت صفحة التجربة هي المقطع التالي؛ وضعناها مع ملف الصوت وملف النص في مصدر الاختبار نفسه. الرابطان فيها يشيران إلى الملفين اللذين أنشأناهما، لا إلى ملفات من خدمة خارجية.
<!doctype html>
<meta charset="utf-8">
<audio preload="auto" src="silence.wav">
<track kind="subtitles" src="overlap.vtt" srclang="ar">
</audio>
في أداة الاختبار اعترضنا طلبات هذه الصفحة وأعدنا البايتات محليا. طلب الصوت مدى من البايتات، فأعدنا له206 مع Content-Range وAccept-Ranges. في محاولة أقدم كانت الخدمة التجريبية تعيد200 فقط، وبقي وقت القياس صفرا؛ لذلك استبعدنا نتيجتها وأصلحنا إعداد المدى قبل القياسات المنشورة.
قراءات الست لحظات
أعدنا تشغيل JavaScript التالية داخل صفحة التجربة المحملة. ينتظر البرنامج تجهيز الصوت والمقاطع، ثم يسجل الوقت الفعلي والهويات بعد كل انتقال. [2]
نفذها في وحدة تحكم صفحة التجربة بعد تحميل ملفاتها بنجاح. [2]
(async () => {
const a = document.querySelector("audio");
const t = document.querySelector("track").track;
t.mode = "hidden";
while(a.readyState < 4 || t.cues?.length !== 3)
await new Promise(r => setTimeout(r, 10));
for(const time of [0.5, 2, 3.5, 4.5, 6.5, 7.5]){
await new Promise(r => {
a.addEventListener("seeked", r, {once:true});
a.currentTime = time;
});
await new Promise(r => setTimeout(r, 0));
console.log(a.currentTime, [...t.activeCues].map(c => c.id));
}
})();
أجرت النسخة المعروضة القياسات الست في Edge 155.0.4283.45. طابق الوقت المقروء الوقت المطلوب في كل مرة؛ لم نكتف بأن يكون طلب الانتقال قد أرسل. كما قارن فحص مستقل الفترات المكتوبة في الملف بكل نقطة قياس وحصل على القوائم نفسها.
| الثانية المطلوبة والفعلية | الهويات المقروءة | عددها |
|---|---|---|
| 0.5 | لا شيء | 0 |
| 2 | A | 1 |
| 3.5 | A + B | 2 |
| 4.5 | B | 1 |
| 6.5 | C | 1 |
| 7.5 | لا شيء | 0 |
اقرأ نقطة التداخل والخانتين الفارغتين
عند3.5 يقع موضعنا داخل الفترة1 إلى4 وداخل الفترة3 إلى6 في رسمنا. لذلك توقع فحص الأعداد وجود A وB؛ وكانت هاتان الهويتان أيضا في قائمة المتصفح. عند4.5 خرج موضعنا من فترة A وبقي في فترة B، وهو ما أظهره السجل التالي.
لم يختف الملف عندما قرأنا قائمة فارغة عند0.5 أو7.5؛ فحصنا قائمة المقاطع الكاملة فوجدنا الهويات الثلاث ونصوصها وأوقاتها. الذي تغير بين خانات جدولنا هو نتيجة القراءة عند كل موضع، وليس عدد الأسطر التي حفظناها في ملفنا.

حدود النتيجة وطريقة المقارنة
اخترنا عمدا3.5 و4.5، ولم نقس الثانية4 نفسها. كما اخترنا6.5 بدلا من6. هذا يمنع الجدول من أن يوحي بأنه يختبر ترتيب الأحداث عند لحظة بداية أو نهاية مشتركة؛ لا توجد في سجلنا قراءة عند تلك الحدود الدقيقة.
لإعادة تدقيق النتائج، ارسم فترات ملفنا على الورق ثم ضع نقاط الجدول الست. قارن الهويات التي تتوقعها بما طبعه البرنامج. إذا بقي الوقت صفرا في إعدادك، فالقراءة لا تمثل النقطة المطلوبة؛ سجل الوقت الفعلي أولا قبل تفسير قائمة الأسماء.
هذه تجربة بيانات توقيت فقط. لم نختبر تنسيق الترجمة فوق الفيديو، ولم نطابق النص بكلام مسموع، ولم نصدر شهادة لإتاحة المحتوى. الحرف أ في الملف علامة تجربة؛ لا يثبت وجود متحدث قاله عند بداية الفترة.
المراجع
- W3C — WebVTT
https://www.w3.org/TR/webvtt1/ - MDN — activeCues
https://developer.mozilla.org/en-US/docs/Web/API/TextTrack/activeCues
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي وراجعته أدوات ذكاء اصطناعي. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
