پردازش ویدیوهای طولانی و استخراج لحظات دقیق، یکی از چالشهای پرهزینه در سیستمهای چندحالته (Multimodal) است. هرچند مدلهای زبانی بینایی نوین پنجرههای متنی بزرگی دارند، اما ارسال مستقیم دهها ساعت محتوای خام تصویری به آنها توجیه فنی و اقتصادی ندارد. راهکار استاندارد صنعتی، تجزیهی هوشمند ویدیو به صحنهها، همگامسازی صوت و تصویر، و جستوجوی برداری ترکیبی است.
در این پروژهی پایانی، یک پایپلاین استاندارد برای ایندکس و جستوجوی 100 ساعت ویدیو پیاده میکنید. این سیستم با تقطیع صحنهها، استخراج متن گفتار و امبدینگهای چندگانه، امکان پرسش و پاسخ متنی را با ارجاع ثانیهای دقیق به صحنهها فراهم میسازد و خطای توهم مدلها را در شمارش و رویدادهای حرکتی اندازه میگیرد.
اگر برای بخش کپشننویسی یا پاسخدهی سراغ APIهای بینالمللی مانند Gemini بروید، با توجه به محدودیتهای پرداخت ارزی و انسداد دسترسی به برخی سرویسهای خارجی از IP ایران، میتوانید از گیتویهای ارائهدهندهی داخلی با ساختار سازگار با OpenAI استفاده کنید یا مدلهای متنبازی مانند Molmo 2 و Qwen را جایگزین سازید.
شرکت Twelve Labs مدلهای Marengo و Pegasus را تجاریسازی کرد. VideoDB رابط برنامهنویسی (API) مدل CRUD را برای ویدیو عرضه کرد. مؤسسهی AI2 چکپوینتهای متنباز Molmo 2 را منتشر کرد. پنجرهی زمینهی طولانی Gemini ساعتها ویدیو را بهصورت نیتیو پردازش میکند. مجموعهدادهی TimeLens-100K استاندارد ارجاع زمانی (Temporal Grounding) در مقیاس بالا را تعریف کرد. پایپلاین سال 2026 دیگر کاملاً جا افتاده و نهایی است: بخشبندی صحنه (Scene Segmentation)، تولید کپشن و امبدینگ (Embedding) به ازای هر صحنه، همگامسازی متن پیادهشده، ایندکس چندبرداری (Multi-vector) و در نهایت پاسخی به پرسش که بازههای زمانی (شروع، پایان) را همراه با پیشنمایش فریمها ارائه میدهد. پروژهی پایانی شامل بارگذاری 100 ساعت ویدیو، رسیدن به نتایج بنچمارکهای عمومی و سنجش دقیق توهم مدل در سوالات شمارشی و مبتنی بر فعالیت است.
فازهای تمرینشده: P4 · P6 · P7 · P11 · P12 · P17
زمان: 30 ساعت
صورت مسئله
پرسش و پاسخ روی ویدیوهای طولانی، در مقیاس سال 2026 پرمصرفترین مسئلهی چندحالته (Multimodal) از نظر پهنای باند است. مدل Gemini 2.5 Pro میتواند یک ویدیوی 2 ساعته را بهطور نیتیو بخواند، اما وارد کردن 100 ساعت ویدیو به پیکرهای قابل جستوجو همچنان نیازمند ایندکس در سطح صحنه است. معماری استاندارد در محیط عملیاتی (پروداکشن) این بخشها را ترکیب میکند: بخشبندی صحنه با TransNetV2 یا PySceneDetect، کپشننویسی هر صحنه با یک مدل بینایی-زبانی یا VLM (مثل Gemini 2.5، Qwen3-VL-Max یا Molmo 2)، همگامسازی متن پیادهشده با Whisper-v3-turbo بههمراه برچسب زمانی کلمات، و یک ایندکس چندبرداری که کپشن، امبدینگ فریم و متن پیادهشده را در کنار هم ذخیره میکند. پایپلاین جستوجو، بازههای زمانی (شروع، پایان) را همراه با پیشنمایش فریم بازمیگرداند.
بنچمارکها شامل موارد عمومی (ActivityNet-QA و NeXT-GQA) بههمراه مجموعهی اختصاصی خودتان با 100 پرسش است. توهم مدل در پرسشهای شمارشی و مبتنی بر فعالیت (Action-type) یک رد قطعی (Hard fail) شناختهشده است؛ این پروژهی پایانی مستقیماً آن را اندازه میگیرد.
مفاهیم پایه
در مرحلهی ورود داده (Ingest)، سه پایپلاین بهصورت موازی اجرا میشوند. بخشبندی صحنه ویدیو را به صحنهها برش میزند. کپشننویسی با VLM برای هر صحنه یک کپشن و از یک فریم کلیدی (Keyframe) یک امبدینگ فریم تولید میکند. همگامسازی ASR برچسبهای زمانی را در سطح کلمه تولید میکند. این سه جریان داده بر اساس (scene_id, time range) به هم متصل میشوند. برای هر صحنه در ایندکس چندبرداری (Qdrant) سه نوع بردار ذخیره میشود: امبدینگ کپشن، امبدینگ فریم کلیدی و امبدینگ متن پیادهشده.
هنگام جستوجو، پرسشِ زبان طبیعی بهطور همزمان با هر سه بردار مقایسه میشود؛ نتایج با روش ادغام رتبههای متقابل (RRF) ادغام (merge) میشوند؛ و یک تطبیقدهندهی (Adapter) ارجاع زمانی (مشابه TimeLens) بازهی (شروع، پایان) را درون بهترین صحنه دقیقتر میکند. مدل ترکیبکنندهی VLM (مانند Gemini 2.5 Pro یا Qwen3-VL-Max) پرسش، صحنههای برتر و فریمهای برشخورده را دریافت میکند و پاسخ را با ارجاع زمانیِ مستند و پیشنمایش فریم تحویل میدهد.
سنجش میزان توهم اهمیت زیادی دارد. پرسشهای شمارشی («چند نفر وارد اتاق میشوند؟») و مبتنی بر فعالیت («آیا سرآشپز قبل از هم زدن، مایع را اضافه میکند؟») بهطور مشهودی غیرقابلاعتمادند. دقت این پرسشها را جدا از پرسشهای توصیفی گزارش کنید.
معماری سیستم
video file / URL
|
v
PySceneDetect / TransNetV2 (scene segmentation)
|
+--- per-scene keyframe --- VLM caption + frame embedding
| (Gemini 2.5 Pro / Qwen3-VL-Max / Molmo 2)
|
+--- audio channel --- Whisper-v3-turbo ASR + word timestamps
|
v
multi-vector Qdrant: {caption_emb, keyframe_emb, transcript_emb}
|
query:
dense queries against all three -> RRF merge -> top-k scenes
|
v
TimeLens / VideoITG temporal grounding (refine start/end within scene)
|
v
VLM synth: query + top scenes + frame previews
|
v
answer + (start, end) timestamps + frame thumbs + citations
ابزارها و فناوریها
- بخشبندی صحنه: TransNetV2 (بهترین مدل 2024 تا 2026) یا PySceneDetect
- تبدیل گفتار به متن (ASR): Whisper-v3-turbo با faster-whisper و برچسبهای زمانی در سطح کلمه
- کپشننویس و پاسخدهندهی VLM: مدلهای Gemini 2.5 Pro یا Qwen3-VL-Max یا Molmo 2
- ارجاع زمانی: تطبیقدهندهی آموزشدیده روی TimeLens-100K یا VideoITG
- ایندکس: Qdrant با پشتیبانی از چندبرداری (کپشن / فریم / متن پیادهشده)
- رابط کاربری: Next.js 15 با پخشکنندهی ویدیوی HTML5 و تامبنیل صحنهها
- ارزیابی: ActivityNet-QA، NeXT-GQA و مجموعهی دستچین 100 پرسشی
- بنچمارک توهم: زیرمجموعههای شمارشی و مبتنی بر فعالیت با برچسبگذاری دستی
پیادهسازی گامبهگام
-
پیمایشگر ورودی داده. لینکهای YouTube یا فایلهای محلی MP4 را بگیرید. در صورت نیاز رزولوشن را به 720p کاهش دهید. مقادیر
{video_id, file_path}را ذخیره کنید. -
بخشبندی صحنه. مدل TransNetV2 یا PySceneDetect را اجرا کنید تا خروجی
[{scene_id, start_ms, end_ms, keyframe_path}]تولید شود. هدف برای 100 ساعت: حدود 6k تا 8k صحنه. -
پردازش صوت (ASR). مدل Whisper-v3-turbo را روی صدا اجرا کنید؛ برچسبهای زمانی در سطح کلمه را خروجی بگیرید؛ و متن را به برشهای متناظر با هر صحنه تقسیم کنید.
-
کپشننویسی با VLM. به ازای هر صحنه، فریم کلیدی و یک قالب کپشننویسی کوتاه را به Gemini 2.5 Pro (یا Qwen3-VL-Max) بدهید. کپشن و امبدینگ فریم را تولید کنید.
-
ایندکس چندبرداری. یک مجموعهی Qdrant با سه بردار نامگذاریشده بسازید. بار داده (Payload):
{video_id, scene_id, start_ms, end_ms, keyframe_url}. -
جستوجو. پرسش زبان طبیعی را روی هر سه جستوجوی برداری اجرا کنید؛ نتایج را با ادغام رتبههای متقابل (RRF) ترکیب کنید؛ 5 صحنهی برتر (top-k=5) را انتخاب کنید.
-
ارجاع زمانی. تطبیقدهندهی سبک TimeLens را روی صحنهی برتر اجرا کنید تا بازهی (شروع، پایان) در دل آن صحنه دقیقتر شود.
-
تولید پاسخ با VLM. مدل Gemini 2.5 Pro را با پرسش، کلیپهای 3 صحنهی برتر (بهصورت تصویر یا ویدیوهای کوتاه) و متنهای پیادهشده فراخوانی کنید. مدل باید ارجاعهای دقیق
(video_id, start_ms, end_ms)ارائه دهد. -
ارزیابی. ActivityNet-QA و NeXT-GQA را اجرا کنید. یک مجموعهی تست اختصاصی با 100 پرسش بسازید. دقت کلی را همراه با تفکیک بر اساس نوع پرسشها (شمارشی، فعالیت، توصیفی) گزارش کنید.
استفادهی عملی
$ video-qa ask --url=https://youtube.com/watch?v=X "how many cars pass the intersection in the first minute?"
[scene] 23 scenes detected
[asr] transcript complete, 4m12s
[index] 69 vectors written (23 scenes x 3)
[query] top scene: scene 3 [01:32-01:54], confidence 0.84
[ground] refined window: [00:12-00:58]
[synth] gemini 2.5 pro, 1.4s
answer: 5 cars pass the intersection between 00:12 and 00:58.
citations: [scene 3: 00:12-00:58]
[frame preview at 00:14, 00:27, 00:44, 00:51, 00:57]
خروجی نهایی
خروجی نهایی این پروژه فایل outputs/skill-video-qa.md است. این پایپلاین با دریافت لینک YouTube یا ویدیوی آپلودشده، صحنهها را ایندکس کرده و به پرسشها با ارجاع زمانی دقیق پاسخ میدهد.
| ضریب | معیار ارزیابی | نحوهی اندازهگیری |
|---|---|---|
| 25 | شاخص IoU ارجاع زمانی | معیار اشتراک روی اجتماع (IoU) روی مجموعهی ارجاع دادههای آزمون |
| 20 | دقت پرسش و پاسخ | NeXT-GQA و مجموعهی اختصاصی 100 پرسشی |
| 20 | نرخ پردازش ورودی (Throughput) | ساعات ویدیوی پردازششده به ازای هر دلار هزینه |
| 20 | رابط کاربری و تجربه ارجاعات | لینکهای برچسب زمانی، نوار تامبنیل، پرش به فریم |
| 15 | نرخ توهم | دقت جداگانه برای پرسشهای شمارشی و مبتنی بر فعالیت |
| 100 |
تمرینها
-
در مرحلهی کپشننویسی، Qwen3-VL-Max را جایگزین Gemini 2.5 Pro کنید. اختلاف کیفیت کپشنها را روی یک نمونهی 50 صحنهای با ارزیابی انسانی گزارش دهید.
-
امبدینگهای فریم هر صحنه را بهجای روش چندبرداری، به یک بردار تجمیعی (Pooled vector) تبدیل کنید. میزان افت بازیابی اطلاعات را بسنجید.
-
یک حالت «شمارش سختگیرانه» (Counting strict) بسازید: مدل پاسخدهنده هر موردِ شمارششده را با برچسب زمانی جداگانه استخراج کند تا کاربر با کلیک روی آن، صحت شمارش را تأیید کند. بررسی کنید که آیا تأیید کاربر نرخ توهم را کاهش میدهد یا خیر.
-
هزینهی ورود داده را بنچمارک کنید: نرخ پردازش (ساعت ویدیو به ازای هر دلار) را میان سه مدل VLM مقایسه کنید و نقطهی بهینه را بیابید.
-
متن پیادهشده همراه با تفکیک گویندگان (Speaker Diarization) را اضافه کنید: تفکیک گویندگان pyannote را روی صدا اجرا کنید و متنهای هر گوینده را بهصورت جداگانه امبد کنید. پرسشهایی مثل «آلیس دربارهی موضوع X چه گفت؟» را پیادهسازی و تست کنید.
اصطلاحات کلیدی
| اصطلاح | در گفتوگوهای عامیانه | معنای دقیق فنی |
|---|---|---|
| بخشبندی صحنه (Scene segmentation) | «تشخیص شات» | بریدن ویدیو به صحنهها در مرزهای تغییر شات |
| ایندکس چندبرداری (Multi-vector index) | «کپشن + فریم + متن پیادهشده» | کالکشن Qdrant با بردارهای نامگذاریشده به ازای هر بازنمایی |
| ارجاع زمانی (Temporal grounding) | «دقیقاً کی اتفاق افتاد؟» | دقیقتر کردن بازهی (شروع، پایان) برای بخش مربوط به پاسخ پرسش |
| امبدینگ فریم (Frame embedding) | «بازنمایی بصری» | یک امبدینگ برداری از فریم کلیدی؛ برای محاسبهی شباهت بصری صحنهها |
| ادغام RRF | «ترکیب رتبههای متقابل» | استراتژی merge کردن چندین لیست رتبهبندیشده؛ روشی کلاسیک در بازیابی ترکیبی |
| توهم در شمارش (Counting hallucination) | «شمارش اشتباه» | حالت شکست شناختهشدهی مدلهای VLM در پاسخ به پرسشهای «چند تا» |
| بنچمارک ActivityNet-QA | «بنچمارک Video-QA» | بنچمارک استاندارد دقت برای پرسش و پاسخ روی ویدیوهای طولانی |
برای مطالعهی بیشتر
- AI2 Molmo 2 — چکپوینتهای باز مدلهای VLM
- TimeLens (CVPR 2026) — ارجاع زمانی در مقیاس بزرگ
- Gemini Video long-context — مستندات مرجع ابری پردازش ویدیو
- VideoDB — مرجع API مدل CRUD برای ویدیو
- Twelve Labs Marengo + Pegasus — محصول تجاری مرجع
- TransNetV2 — مدل بخشبندی صحنه
- PySceneDetect — جایگزین کلاسیک متنباز
- ActivityNet-QA — بنچمارک ارزیابی مرجع
