COM-компонент
Scene Detector
Виявлення сцен у відео для розробників. Інтегруйте його у свій додаток через COM.
Про продукт
Scene Detector — це COM-компонент, побудований на технології розпізнавання сцен HandySaw DS. Він обробляє відеофайл і повертає список виявлених сцен із точністю до кадру. Компонент також може створювати мініатюри для кожної сцени та повідомляти про щойно знайдені сцени в режимі реального часу через інтерфейси зворотного виклику (callback). Вам не потрібно чекати завершення повного циклу виявлення.
COM-компонент відповідає стандартній архітектурі, що робить його придатним для використання практично в будь-якому середовищі розробки Windows. Якщо вам потрібен окремий настільний інструмент, а не компонент для розробників, HandySaw DS — це правильний вибір.
Можливості
Широка підтримка форматів
Обробляє будь-який відеофайл, який відтворюється Windows Media Player через API DirectShow.
Зворотні виклики в реальному часі
Повідомляє про кожну нову сцену відразу після її виявлення. Ваш додаток отримує результати під час обробки.
Створення мініатюр
Опціонально зберігає перший і останній кадри кожної сцени як файли BMP або JPEG у будь-якому масштабі.
Колірні простори RGB та YUV
Виявлення може виконуватися в колірному просторі RGB24 або YUY2; кожен має свої рекомендовані значення порогів за замовчуванням.
Виявлення білих та чорних сцен
Налаштовувані пороги яскравості (luma) дозволяють ідентифікувати переходи до білого та до чорного як окремі сцени.
Часткова обробка файлів
Вкажіть початкову та кінцеву позиції, щоб виявляти сцени лише в обраному сегменті медіафайлу.
Користувацький конвеєр фільтрів
Перевизначайте фільтри DirectShow (джерело, спліттер, декодер), що використовуються внутрішньо, для максимальної сумісності.
Об'єднання коротких сцен
Сцени, коротші за мінімально налаштовану тривалість, автоматично об'єднуються з сусідніми або видаляються.
Демо та ціна
Зв'яжіться зі мною для отримання демо-версії та інформації про ціни.
Довідник API
sdScenesMergeKind enum
Визначає, як обробляються короткі сцени після виявлення.
| sdMergeDelete = 0 | Коротка сцена видаляється. |
| sdMergeWithPrev = 1 | Коротка сцена об'єднується з попередньою сценою. |
| sdMergeWithNext = 2 | Коротка сцена об'єднується з наступною сценою. |
| sdMergeWithBoth = 3 | Коротка сцена, попередня та наступна сцени об'єднуються в одну. |
DetectorParameters structure
Основні параметри механізму виявлення сцен.
| BSTR VideoFileName | Повний шлях до відеофайлу для обробки. |
| int Threshold | Чутливість виявлення. Діапазон 0-255. Рекомендовані значення за замовчуванням: 19 (RGB) та 5 (YUV). Нова сцена починається, коли різниця між двома послідовними кадрами перевищує це значення. Менші значення створюють більше сцен. |
| int UpLumaTresh | Поріг переходу до білого. Діапазон -1-255. Значення -1 вимикає цю функцію. Коли загальна яскравість кадру перевищує це значення, починається нова сцена, групуючи яскраві кадри разом. |
| int BottomLumaTresh | Поріг переходу до чорного. Діапазон -1-255. Значення -1 вимикає цю функцію. Коли загальна яскравість кадру падає нижче цього значення, починається нова сцена, групуючи темні кадри разом. |
| int MinSceneLength | Мінімальна тривалість сцени в кадрах. Сцени, коротші за це значення, змінюються відповідно до поля Merge. Рекомендоване значення за замовчуванням: 5. |
| int RegisterGraph | Реєстрація внутрішнього графа обробки в ROT. 1: реєструвати. 0: не реєструвати. |
| BSTR SourceFilterMoniker | Відображуване ім'я бажаного фільтра-джерела. NULL: використовувати стандартний. |
| BSTR SplitterFilterMoniker | Відображуване ім'я бажаного фільтра-спліттера. NULL: використовувати стандартний. |
| BSTR DecoderFilterMoniker | Відображуване ім'я бажаного фільтра-декодера. NULL: використовувати стандартний. |
| sdScenesMergeKind Merge | Стратегія об'єднання, що застосовується, коли виявлена сцена коротша за MinSceneLength. |
DetectorParameters2 structure
Розширює DetectorParameters вибором колірного простору та частковою обробкою файлів. Містить усі поля DetectorParameters плюс наступні.
| int UseYUV | Колірний простір. 1: YUY2. 0: RGB24. |
| int Pad | Зарезервовано. |
| double StartPosition | Початкова позиція обробки в секундах. Якщо не дорівнює нулю, усі повернуті часові мітки сцен відносні до цього зміщення. |
| double StopPosition | Кінцева позиція обробки в секундах. 0: обробляти до кінця файлу. |
ThumbnailsParameters structure
Керує створенням мініатюр. Передайте вказівник на цю структуру, щоб увімкнути мініатюри, або NULL, щоб вимкнути.
| int JpegFormat | Формат виводу. 0: BMP. 1: JPEG. |
| int JpegQuality | Якість стиснення JPEG, 0-100. |
| int ImagesPerScene | 1: тільки початковий кадр. 2: початковий та кінцевий кадри для кожної сцени. |
| double Scale | Коефіцієнт масштабування мініатюри. 1.0: повний розмір. |
| BSTR FileName | Шаблон імені файлу з використанням синтаксису C printf з одним цілим полем, наприклад d:\dir\frame%05d.jpg. Номер кадру замінює заповнювач %d. Потребує повного шляху з правильним розширенням. |
ISceneDetector interface
Основний інтерфейс виявлення сцен.
DetectScenesInFile
HRESULT _stdcall DetectScenesInFile(
[in] DetectorParameters *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
Основний метод виявлення. Викликаючому не потрібно заздалегідь створювати SafeArray — передайте вказівник на змінну SAFEARRAY. Якщо після виклику *Scenes не дорівнює NULL, викликаючий повинен знищити його. Результатом є двовимірний масив. Для кожної сцени два значення типу long вказують номери початкового та кінцевого кадрів відносно початкової позиції обробки. Передайте не-NULL ThumbnailsParams, щоб увімкнути створення мініатюр.
| HRESULT | Значення |
|---|---|
| 0 | Успіх |
| 0x80040601 | Невизначена помилка |
| 0x80040602 | DirectShow не встановлено або версія застаріла |
| 0x80040603 | Неможливо отримати тривалість відео — можливо, це статичне зображення |
| 0x80040604 | Невірний аргумент |
| 0x80040605 | Неможливо створити контекст пристрою |
| 0x80040606 | Об'єкт зайнятий іншим завданням |
| 0x80040607 | Частота кадрів дорівнює нулю — можливо, це статичне зображення |
| 0x80040608 | Неможливо побудувати граф |
ISceneDetector2 interface
Розширює ISceneDetector. Успадковує всі його методи та додає наступні.
DetectScenesInFile2
HRESULT _stdcall DetectScenesInFile2(
[in] DetectorParameters2 *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
Те саме, що й DetectScenesInFile, але використовує DetectorParameters2, що дозволяє вибір колірного простору та часткову обробку файлів. Повернуті значення початку та кінця сцени відносні до Params.StartPosition.
GetFrameRate
HRESULT _stdcall GetFrameRate(
[out, retval] double *pFrameRate
);
Повертає частоту кадрів останнього обробленого файлу. Корисно для перетворення номерів кадрів у часові мітки. Повертає S_OK або E_INVALIDARG, якщо pFrameRate дорівнює NULL.
ISceneDetectorEvents interface
Інтерфейс зворотного виклику для подій виявлення в реальному часі. Реалізуйте його у своєму додатку, щоб отримувати результати в міру їх виявлення.
NewScene
HRESULT NewScene(
[in] long SceneIndex,
[in] long Start,
[in] long Stop
);
Викликається, коли нова сцена завершена. SceneIndex починається з 0. Start та Stop — це номери кадрів, починаючи з 0. Коли обробка була розпочата через DetectScenesInFile2, обидва значення відносні до Params.StartPosition.
Status
HRESULT Status(
[in] long ScenesFound,
[in] long CurrentFrame,
[in] long TotalFrames,
[out] long *AbortProcess
);
Викликається кожні 50 мс із поточним прогресом обробки. Встановіть *AbortProcess у 1, щоб скасувати поточне виявлення.