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 (источник, сплиттер, декодер) для максимальной совместимости.

Объединение коротких сцен

Сцены, короче заданного минимума, автоматически объединяются с соседними или удаляются.

Свяжитесь со мной для получения демо-версии и информации о ценах.

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Неопределенная ошибка
0x80040602DirectShow не установлен или версия слишком старая
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, чтобы отменить текущее обнаружение.