COM-компонент
Scene Detector
Обнаружение сцен в видео для разработчиков. Интегрируйте его в свое приложение через COM.
О продукте
Scene Detector — это COM-компонент, построенный на технологии распознавания сцен HandySaw DS. Он обрабатывает видеофайл и возвращает список обнаруженных сцен с точностью до кадра. Компонент также может создавать миниатюры для каждой сцены и сообщать о новых сценах в режиме реального времени через интерфейсы обратного вызова. Вам не нужно ждать завершения полного цикла обнаружения.
COM-компонент следует стандартной архитектуре, что делает его пригодным для использования практически в любой среде разработки под Windows. Если вам нужен отдельный настольный инструмент, а не компонент для разработчиков, HandySaw DS — это правильный выбор.
Возможности
Широкая поддержка форматов
Обрабатывает любые видеофайлы, воспроизводимые в Windows Media Player через API DirectShow.
Обратные вызовы в реальном времени
Сообщает о каждой новой сцене сразу после её обнаружения. Ваше приложение получает результаты в процессе обработки.
Создание миниатюр
Опционально сохраняет первый и последний кадры каждой сцены в виде файлов BMP или JPEG в любом масштабе.
Цветовые пространства RGB и YUV
Обнаружение может выполняться в цветовом пространстве RGB24 или YUY2; для каждого из них предусмотрены свои рекомендуемые пороговые значения.
Обнаружение белых и черных сцен
Настраиваемые пороги яркости позволяют идентифицировать переходы к белому и черному экрану как отдельные сцены.
Частичная обработка файла
Укажите начальную и конечную позиции, чтобы обнаруживать сцены только в выбранном сегменте медиафайла.
Пользовательский конвейер фильтров
Переопределяйте внутренние фильтры 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, чтобы отменить текущее обнаружение.