Componente COM
Scene Detector
Detección de escenas de vídeo para desarrolladores. Intégrelo en su aplicación mediante COM.
Acerca de
Scene Detector es un componente COM construido sobre la tecnología de reconocimiento de escenas HandySaw DS. Procesa un archivo de vídeo y devuelve una lista de escenas detectadas con límites precisos a nivel de fotograma. El componente también puede generar miniaturas para cada escena e informar de las escenas recién encontradas en tiempo real a través de interfaces de devolución de llamada (callback). No tiene que esperar a que finalice todo el proceso 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 necesita una herramienta de escritorio independiente en lugar de un componente para desarrolladores, HandySaw DS es la elección correcta.
Características
Amplia compatibilidad de formatos
Procesa cualquier archivo de vídeo que pueda reproducirse con Windows Media Player a través de la API DirectShow.
Devoluciones de llamada en tiempo real
Informa de cada nueva escena inmediatamente después de encontrarla. Su aplicación recibe los resultados durante el procesamiento.
Generación de miniaturas
Guarda opcionalmente el primer y el último fotograma 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 predeterminados de umbral recomendados.
Detección de escenas blancas y negras
Los umbrales de luminancia configurables identifican las transiciones a blanco y a negro como escenas independientes.
Procesamiento parcial de archivos
Especifique las posiciones de inicio y fin para detectar escenas solo dentro de un segmento elegido del archivo multimedia.
Canalización de filtros personalizada
Anule los filtros DirectShow de origen, división y decodificación 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
Contácteme para obtener información sobre la versión de demostración y los precios.
Referencia de la API
sdScenesMergeKind enum
Especifica cómo se manejan las escenas cortas después de la detección.
| sdMergeDelete = 0 | La escena corta se elimina. |
| sdMergeWithPrev = 1 | La escena corta se fusiona con la escena anterior. |
| sdMergeWithNext = 2 | La escena corta se fusiona con la escena siguiente. |
| sdMergeWithBoth = 3 | La escena corta, la escena anterior y la escena siguiente se fusionan en una sola. |
DetectorParameters structure
Parámetros principales del motor de detección de escenas.
| BSTR VideoFileName | Ruta completa al archivo de vídeo que se va a procesar. |
| int Threshold | Sensibilidad de detección. Rango 0-255. Valores predeterminados recomendados: 19 (RGB) y 5 (YUV). Una nueva escena comienza cuando la diferencia entre dos fotogramas consecutivos supera este valor. Los valores más bajos producen más escenas. |
| int UpLumaTresh | Umbral de fundido a blanco. Rango -1-255. Un valor de -1 desactiva esta función. Cuando el brillo general del fotograma supera este valor, comienza una nueva escena, agrupando los fotogramas brillantes. |
| int BottomLumaTresh | Umbral de fundido a negro. Rango -1-255. Un valor de -1 desactiva esta función. Cuando el brillo general del fotograma cae por debajo de este valor, comienza una nueva escena, agrupando los fotogramas oscuros. |
| int MinSceneLength | Duración mínima de la escena en fotogramas. Las escenas más cortas que este valor se modifican según el campo Merge. Valor predeterminado recomendado: 5. |
| int RegisterGraph | Registro ROT del grafo de procesamiento interno. 1: registrar. 0: no registrar. |
| BSTR SourceFilterMoniker | Nombre para mostrar del filtro de origen deseado. NULL: usar el predeterminado. |
| BSTR SplitterFilterMoniker | Nombre para mostrar del filtro de división deseado. NULL: usar el predeterminado. |
| BSTR DecoderFilterMoniker | Nombre para mostrar del filtro de decodificación deseado. NULL: usar el predeterminado. |
| sdScenesMergeKind Merge | Estrategia de fusión aplicada cuando una escena detectada es más corta que MinSceneLength. |
DetectorParameters2 structure
Extiende DetectorParameters con selección de espacio de color y procesamiento de archivos parciales. Contiene todos los campos de DetectorParameters más los siguientes.
| int UseYUV | Espacio de color. 1: YUY2. 0: RGB24. |
| int Pad | Reservado. |
| double StartPosition | Posición de inicio del procesamiento en segundos. Cuando no es cero, todos los tiempos de escena devueltos son relativos a este desplazamiento. |
| double StopPosition | Posición de parada del procesamiento en segundos. 0: procesar hasta el final del archivo. |
ThumbnailsParameters structure
Controla la generación de miniaturas. Pase un puntero a esta estructura para habilitar las miniaturas, o NULL para desactivarlas.
| int JpegFormat | Formato de salida. 0: BMP. 1: JPEG. |
| int JpegQuality | Calidad de compresión JPEG, 0-100. |
| int ImagesPerScene | 1: solo fotograma inicial. 2: fotogramas inicial y final por escena. |
| double Scale | Factor de escala de la miniatura. 1.0: tamaño completo. |
| BSTR FileName | Plantilla de nombre de archivo usando la sintaxis printf de C con un campo entero, p. ej. d:\dir\frame%05d.jpg. El número de fotograma reemplaza al marcador de posición %d. Requiere la ruta completa con la extensión correcta. |
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: pase 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 largos proporcionan los números de fotograma de inicio y fin relativos a la posición de inicio del procesamiento. Pase ThumbnailsParams distinto de NULL para habilitar la generación de miniaturas.
| HRESULT | Significado |
|---|---|
| 0 | Éxito |
| 0x80040601 | Error no especificado |
| 0x80040602 | DirectShow no instalado o versión demasiado antigua |
| 0x80040603 | No se puede obtener la duración del vídeo: puede ser una imagen fija |
| 0x80040604 | Argumento incorrecto |
| 0x80040605 | No se puede crear el contexto del dispositivo |
| 0x80040606 | El objeto está ocupado con otra tarea |
| 0x80040607 | La velocidad de fotogramas es cero: puede ser una imagen fija |
| 0x80040608 | No se puede construir el grafo |
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, lo que permite la selección del espacio de color y el procesamiento de archivos parciales. Los valores de inicio y fin de escena devueltos son relativos a Params.StartPosition.
GetFrameRate
HRESULT _stdcall GetFrameRate(
[out, retval] double *pFrameRate
);
Devuelve la velocidad de fotogramas del último archivo procesado. Útil para convertir números de fotograma a marcas de tiempo. Devuelve S_OK, o E_INVALIDARG si pFrameRate es NULL.
ISceneDetectorEvents interface
Interfaz de devolución de llamada para eventos de detección en tiempo real. Impleméntela en su 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. Establezca *AbortProcess en 1 para cancelar la detección en curso.