Composant COM
Scene Detector
Détection de scènes vidéo pour les développeurs. Intégrez-la à votre application via COM.
À propos
Scene Detector est un composant COM basé sur la technologie de reconnaissance de scènes de HandySaw DS. Il analyse un fichier vidéo et renvoie une liste des scènes détectées avec des limites précises à l'image près. Le composant peut également générer des miniatures pour chaque scène et signaler les nouvelles scènes trouvées en temps réel via des interfaces de rappel (callback). Vous n'avez pas besoin d'attendre la fin de l'analyse complète.
Un composant COM suit une architecture standard, ce qui le rend utilisable depuis pratiquement n'importe quel environnement de développement Windows. Si vous recherchez un outil de bureau autonome plutôt qu'un composant pour développeur, HandySaw DS est le choix idéal.
Fonctionnalités
Large support des formats
Analyse tout fichier vidéo lisible par Windows Media Player via l'API DirectShow.
Rappels en temps réel
Signale chaque nouvelle scène dès sa détection. Votre application reçoit les résultats pendant le traitement.
Génération de miniatures
Enregistre optionnellement la première et la dernière image de chaque scène au format BMP ou JPEG, à l'échelle de votre choix.
Espaces colorimétriques RGB et YUV
La détection peut s'effectuer en espace colorimétrique RGB24 ou YUY2 ; chacun possède ses propres valeurs de seuil recommandées.
Détection de scènes blanches et noires
Des seuils de luminance configurables permettent d'identifier les transitions vers le blanc (fade-to-white) et vers le noir (fade-to-black) comme des scènes distinctes.
Traitement partiel de fichier
Spécifiez des positions de début et de fin pour détecter les scènes uniquement dans un segment choisi du fichier média.
Pipeline de filtres personnalisé
Remplacez les filtres DirectShow de source, de splitteur et de décodeur utilisés en interne pour une compatibilité maximale.
Fusion de scènes courtes
Les scènes dont la durée est inférieure à un minimum configurable sont automatiquement fusionnées avec leurs voisines ou supprimées.
Démo & Prix
Contactez-moi pour obtenir la version de démonstration et les informations tarifaires.
Référence API
sdScenesMergeKind enum
Spécifie la manière dont les scènes courtes sont traitées après la détection.
| sdMergeDelete = 0 | La scène courte est supprimée. |
| sdMergeWithPrev = 1 | La scène courte est fusionnée avec la scène précédente. |
| sdMergeWithNext = 2 | La scène courte est fusionnée avec la scène suivante. |
| sdMergeWithBoth = 3 | La scène courte, la scène précédente et la scène suivante sont toutes fusionnées en une seule. |
DetectorParameters structure
Paramètres du moteur de détection de scènes principal.
| BSTR VideoFileName | Chemin complet vers le fichier vidéo à traiter. |
| int Threshold | Sensibilité de la détection. Plage 0–255. Valeurs recommandées : 19 (RGB) et 5 (YUV). Une nouvelle scène commence lorsque la différence entre deux images consécutives dépasse cette valeur. Des valeurs plus basses produisent plus de scènes. |
| int UpLumaTresh | Seuil de transition vers le blanc. Plage -1–255. Une valeur de -1 désactive cette fonction. Lorsque la luminosité globale de l'image dépasse cette valeur, une nouvelle scène commence, regroupant les images claires. |
| int BottomLumaTresh | Seuil de transition vers le noir. Plage -1–255. Une valeur de -1 désactive cette fonction. Lorsque la luminosité globale de l'image descend en dessous de cette valeur, une nouvelle scène commence, regroupant les images sombres. |
| int MinSceneLength | Durée minimale d'une scène en images. Les scènes plus courtes que cette valeur sont modifiées selon le champ Merge. Valeur recommandée : 5. |
| int RegisterGraph | Enregistrement ROT du graphe de traitement interne. 1 : enregistrer. 0 : ne pas enregistrer. |
| BSTR SourceFilterMoniker | Nom d'affichage du filtre source souhaité. NULL : utiliser le filtre par défaut. |
| BSTR SplitterFilterMoniker | Nom d'affichage du filtre splitteur souhaité. NULL : utiliser le filtre par défaut. |
| BSTR DecoderFilterMoniker | Nom d'affichage du filtre décodeur souhaité. NULL : utiliser le filtre par défaut. |
| sdScenesMergeKind Merge | Stratégie de fusion appliquée lorsqu'une scène détectée est plus courte que MinSceneLength. |
DetectorParameters2 structure
Extension de DetectorParameters avec la sélection de l'espace colorimétrique et le traitement partiel de fichier. Contient tous les champs de DetectorParameters plus les suivants.
| int UseYUV | Espace colorimétrique. 1 : YUY2. 0 : RGB24. |
| int Pad | Réservé. |
| double StartPosition | Position de début du traitement en secondes. Lorsqu'elle est non nulle, tous les temps de scène renvoyés sont relatifs à ce décalage. |
| double StopPosition | Position de fin du traitement en secondes. 0 : traiter jusqu'à la fin du fichier. |
ThumbnailsParameters structure
Contrôle la génération de miniatures. Passez un pointeur vers cette structure pour activer les miniatures, ou NULL pour les désactiver.
| int JpegFormat | Format de sortie. 0 : BMP. 1 : JPEG. |
| int JpegQuality | Qualité de compression JPEG, 0–100. |
| int ImagesPerScene | 1 : image de début uniquement. 2 : images de début et de fin par scène. |
| double Scale | Facteur d'échelle des miniatures. 1.0 : taille réelle. |
| BSTR FileName | Modèle de nom de fichier utilisant la syntaxe printf du C avec un champ entier, ex: d:\dir\frame%05d.jpg. Le numéro de l'image remplace le marqueur %d. Nécessite le chemin complet avec l'extension correcte. |
ISceneDetector interface
Interface principale de détection de scènes.
DetectScenesInFile
HRESULT _stdcall DetectScenesInFile(
[in] DetectorParameters *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
Méthode de détection principale. L'appelant n'a pas besoin de créer le SafeArray au préalable - passez un pointeur vers une variable SAFEARRAY. Si *Scenes est non NULL après l'appel, l'appelant doit le détruire. Le résultat est un tableau bidimensionnel. Pour chaque scène, deux valeurs long indiquent les numéros d'image de début et de fin relatifs à la position de début du traitement. Passez un ThumbnailsParams non NULL pour activer la génération de miniatures.
| HRESULT | Signification |
|---|---|
| 0 | Succès |
| 0x80040601 | Erreur non spécifiée |
| 0x80040602 | DirectShow non installé ou version trop ancienne |
| 0x80040603 | Impossible d'obtenir la durée de la vidéo - peut être une image fixe |
| 0x80040604 | Argument incorrect |
| 0x80040605 | Impossible de créer le contexte de l'appareil |
| 0x80040606 | L'objet est occupé par une autre tâche |
| 0x80040607 | La cadence d'images est égale à zéro - peut être une image fixe |
| 0x80040608 | Impossible de construire le graphe |
ISceneDetector2 interface
Extension de ISceneDetector. Hérite de toutes ses méthodes et ajoute les suivantes.
DetectScenesInFile2
HRESULT _stdcall DetectScenesInFile2(
[in] DetectorParameters2 *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
Identique à DetectScenesInFile, mais utilise DetectorParameters2, permettant la sélection de l'espace colorimétrique et le traitement partiel de fichier. Les valeurs de début et de fin de scène renvoyées sont relatives à Params.StartPosition.
GetFrameRate
HRESULT _stdcall GetFrameRate(
[out, retval] double *pFrameRate
);
Renvoie la cadence d'images du dernier fichier traité. Utile pour convertir les numéros d'image en horodatages. Renvoie S_OK, ou E_INVALIDARG si pFrameRate est NULL.
ISceneDetectorEvents interface
Interface de rappel pour les événements de détection en temps réel. Implémentez-la dans votre application pour recevoir les résultats au fur et à mesure de leur détection.
NewScene
HRESULT NewScene(
[in] long SceneIndex,
[in] long Start,
[in] long Stop
);
Déclenché lorsqu'une nouvelle scène est finalisée. SceneIndex commence à 0. Start et Stop sont des numéros d'image commençant à 0. Lorsque le traitement a été lancé via DetectScenesInFile2, les deux valeurs sont relatives à Params.StartPosition.
Status
HRESULT Status(
[in] long ScenesFound,
[in] long CurrentFrame,
[in] long TotalFrames,
[out] long *AbortProcess
);
Déclenché toutes les 50 ms avec la progression actuelle du traitement. Définissez *AbortProcess à 1 pour annuler la détection en cours.