Componente COM
Scene Detector
Detección de escenas de vídeo para desarrolladores. Intégralo en tu aplicación a través de COM.
Acerca de
Scene Detector es un componente COM basado en la tecnología de reconocimiento de escenas de HandySaw DS. Procesa un archivo de vídeo y devuelve una lista de las escenas detectadas con límites precisos a nivel de fotograma. El componente también puede generar miniaturas de cada escena e informar de las escenas recién encontradas en tiempo real mediante interfaces de callback. No tienes que esperar a que termine el paso completo de detección.
Un componente COM sigue una arquitectura estándar, lo que lo hace utilizable desde prácticamente cualquier entorno de desarrollo de Windows. Si necesitas una herramienta de escritorio independiente en lugar de un componente para desarrolladores, HandySaw DS es la elección correcta.
Características
Soporte amplio de formatos
Procesa cualquier archivo de vídeo reproducible con Windows Media Player a través de la API DirectShow.
Callbacks en tiempo real
Informa de cada nueva escena inmediatamente después de encontrarla. Tu aplicación recibe los resultados durante el procesamiento.
Generación de miniaturas
Opcionalmente guarda los primeros y últimos fotogramas de cada escena como archivos BMP o JPEG a cualquier escala.
Espacios de color RGB y YUV
La detección puede ejecutarse en el espacio de color RGB24 o YUY2; cada uno tiene sus propios valores de umbral recomendados por defecto.
Detección de escenas blancas y negras
Los umbrales de luma configurables identifican las transiciones de fundido a blanco y fundido a negro como escenas independientes.
Procesamiento de archivos parciales
Especifica las posiciones de inicio y fin para detectar escenas solo dentro de un segmento elegido del archivo multimedia.
Pipeline de filtros personalizado
Anula los filtros DirectShow de origen, divisor (splitter) y decodificador utilizados internamente para obtener la máxima compatibilidad.
Fusión de escenas cortas
Las escenas más cortas que un mínimo configurable se fusionan automáticamente con sus vecinas o se eliminan.
Demo y Precio
Contacta conmigo para obtener la versión de demostración y la información de precios.
Referencia de la API
sdScenesMergeKind enum
Especifica cómo se gestionan las escenas cortas después de la detección.
| sdMergeDelete = 0 | Short scene is removed. |
| sdMergeWithPrev = 1 | Short scene is merged with the previous scene. |
| sdMergeWithNext = 2 | Short scene is merged with the next scene. |
| sdMergeWithBoth = 3 | Short scene, the previous scene, and the next scene are all merged into one. |
DetectorParameters structure
Parámetros del motor principal de detección de escenas.
| BSTR VideoFileName | Full path to the video file to process. |
| int Threshold | Detection sensitivity. Range 0–255. Recommended defaults: 19 (RGB) and 5 (YUV). A new scene begins when the difference between two consecutive frames exceeds this value. Lower values produce more scenes. |
| int UpLumaTresh | Fade-to-white threshold. Range -1–255. A value of -1 disables this feature. When overall frame brightness exceeds this value, a new scene begins, grouping bright frames together. |
| int BottomLumaTresh | Fade-to-black threshold. Range -1–255. A value of -1 disables this feature. When overall frame brightness falls below this value, a new scene begins, grouping dark frames together. |
| int MinSceneLength | Minimum scene duration in frames. Scenes shorter than this value are modified according to the Merge field. Recommended default: 5. |
| int RegisterGraph | ROT registration of the internal processing graph. 1: register. 0: do not register. |
| BSTR SourceFilterMoniker | Display name of the desired source filter. NULL: use default. |
| BSTR SplitterFilterMoniker | Display name of the desired splitter filter. NULL: use default. |
| BSTR DecoderFilterMoniker | Display name of the desired decoder filter. NULL: use default. |
| sdScenesMergeKind Merge | Merge strategy applied when a detected scene is shorter than MinSceneLength. |
DetectorParameters2 structure
Extiende DetectorParameters con la selección del espacio de color y el procesamiento de archivos parciales. Contiene todos los campos de DetectorParameters más los siguientes.
| int UseYUV | Color space. 1: YUY2. 0: RGB24. |
| int Pad | Reserved. |
| double StartPosition | Processing start position in seconds. When non-zero, all returned scene times are relative to this offset. |
| double StopPosition | Processing stop position in seconds. 0: process to end of file. |
ThumbnailsParameters structure
Controla la generación de miniaturas. Pasa un puntero a esta estructura para activar las miniaturas, o NULL para desactivarlas.
| int JpegFormat | Output format. 0: BMP. 1: JPEG. |
| int JpegQuality | JPEG compression quality, 0–100. |
| int ImagesPerScene | 1: start frame only. 2: start and end frames per scene. |
| double Scale | Thumbnail scale factor. 1.0: full size. |
| BSTR FileName | Filename template using C printf syntax with one integer field, e.g. d:\dir\frame%05d.jpg. The frame number replaces the %d placeholder. Requires full path with correct extension. |
ISceneDetector interface
Interfaz principal de detección de escenas.
DetectScenesInFile
HRESULT _stdcall DetectScenesInFile(
[in] DetectorParameters *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
Método de detección principal. El llamador no necesita crear el SafeArray de antemano; pasa un puntero a una variable SAFEARRAY. Si *Scenes no es NULL después de la llamada, el llamador debe destruirlo. El resultado es una matriz bidimensional. Para cada escena, dos valores long dan los números de fotograma de inicio y fin relativos a la posición de inicio del procesamiento. Pasa un ThumbnailsParams no NULL para activar la generación de miniaturas.
| HRESULT | Meaning |
|---|---|
| 0 | Success |
| 0x80040601 | Unspecified error |
| 0x80040602 | DirectShow not installed or version too old |
| 0x80040603 | Cannot obtain video duration - may be a still image |
| 0x80040604 | Bad argument |
| 0x80040605 | Cannot create device context |
| 0x80040606 | Object is busy with another task |
| 0x80040607 | Frame rate equals zero - may be a still image |
| 0x80040608 | Cannot build graph |
ISceneDetector2 interface
Extiende ISceneDetector. Hereda todos sus métodos y añade los siguientes.
DetectScenesInFile2
HRESULT _stdcall DetectScenesInFile2(
[in] DetectorParameters2 *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
Igual que DetectScenesInFile, pero utiliza DetectorParameters2, permitiendo la selección del espacio de color y el procesamiento de archivos parciales. Los valores de inicio y fin de la escena devueltos son relativos a Params.StartPosition.
GetFrameRate
HRESULT _stdcall GetFrameRate(
[out, retval] double *pFrameRate
);
Devuelve la tasa de fotogramas del último archivo procesado. Útil para convertir números de fotograma en marcas de tiempo. Devuelve S_OK, o E_INVALIDARG si pFrameRate es NULL.
ISceneDetectorEvents interface
Interfaz de callback para eventos de detección en tiempo real. Impleméntala en tu aplicación para recibir los resultados a medida que se encuentran.
NewScene
HRESULT NewScene(
[in] long SceneIndex,
[in] long Start,
[in] long Stop
);
Se dispara cuando se finaliza una nueva escena. SceneIndex comienza desde 0. Start y Stop son números de fotograma que comienzan desde 0. Cuando el procesamiento se inició a través de DetectScenesInFile2, ambos valores son relativos a Params.StartPosition.
Status
HRESULT Status(
[in] long ScenesFound,
[in] long CurrentFrame,
[in] long TotalFrames,
[out] long *AbortProcess
);
Se dispara cada 50 ms con el progreso actual del procesamiento. Establece *AbortProcess en 1 para cancelar la detección en curso.