COM-Komponente
Scene Detector
Videoszenenerkennung für Entwickler. Integrieren Sie sie über COM in Ihre Anwendung.
Über
Scene Detector ist eine COM-Komponente, die auf der Szenenerkennungstechnologie von HandySaw DS basiert. Sie verarbeitet eine Videodatei und gibt eine Liste der erkannten Szenen mit framegenauen Grenzen zurück. Die Komponente kann zudem für jede Szene Vorschaubilder (Thumbnails) generieren und neu gefundene Szenen in Echtzeit über Callback-Schnittstellen melden. Sie müssen nicht warten, bis der vollständige Erkennungsvorgang abgeschlossen ist.
Eine COM-Komponente folgt einer Standardarchitektur, wodurch sie aus nahezu jeder Windows-Entwicklungsumgebung heraus nutzbar ist. Wenn Sie eher ein eigenständiges Desktop-Tool als eine Entwicklerkomponente benötigen, ist HandySaw DS die richtige Wahl.
Funktionen
Breite Formatunterstützung
Verarbeitet jede Videodatei, die über die DirectShow-API vom Windows Media Player wiedergegeben werden kann.
Echtzeit-Callbacks
Meldet jede neue Szene sofort, sobald sie gefunden wurde. Ihre Anwendung erhält die Ergebnisse während der Verarbeitung.
Thumbnail-Generierung
Speichert optional das erste und letzte Bild jeder Szene als BMP- oder JPEG-Datei in beliebiger Skalierung.
RGB- und YUV-Farbräume
Die Erkennung kann im RGB24- oder YUY2-Farbraum ausgeführt werden; für jeden gibt es empfohlene Standard-Schwellenwerte.
Erkennung von Weiß- und Schwarzblenden
Konfigurierbare Helligkeitsschwellen identifizieren Überblendungen zu Weiß oder Schwarz als separate Szenen.
Teilweise Dateiverarbeitung
Geben Sie Start- und Stopp-Positionen an, um Szenen nur innerhalb eines ausgewählten Segments der Mediendatei zu erkennen.
Benutzerdefinierte Filter-Pipeline
Überschreiben Sie die intern verwendeten DirectShow-Quell-, Splitter- und Decoder-Filter für maximale Kompatibilität.
Zusammenführung kurzer Szenen
Szenen, die kürzer als ein konfigurierbares Minimum sind, werden automatisch mit ihren Nachbarn zusammengeführt oder entfernt.
Demo & Preis
Kontaktieren Sie mich für eine Demoversion und Preisinformationen.
API-Referenz
sdScenesMergeKind enum
Gibt an, wie kurze Szenen nach der Erkennung behandelt werden.
| sdMergeDelete = 0 | Kurze Szene wird entfernt. |
| sdMergeWithPrev = 1 | Kurze Szene wird mit der vorherigen Szene zusammengeführt. |
| sdMergeWithNext = 2 | Kurze Szene wird mit der nächsten Szene zusammengeführt. |
| sdMergeWithBoth = 3 | Kurze Szene, die vorherige Szene und die nächste Szene werden alle zu einer zusammengeführt. |
DetectorParameters structure
Kernparameter der Szenenerkennungs-Engine.
| BSTR VideoFileName | Vollständiger Pfad zur zu verarbeitenden Videodatei. |
| int Threshold | Empfindlichkeit der Erkennung. Bereich 0-255. Empfohlene Standardwerte: 19 (RGB) und 5 (YUV). Eine neue Szene beginnt, wenn der Unterschied zwischen zwei aufeinanderfolgenden Frames diesen Wert überschreitet. Niedrigere Werte erzeugen mehr Szenen. |
| int UpLumaTresh | Schwellenwert für Weißblenden. Bereich -1 bis 255. Ein Wert von -1 deaktiviert diese Funktion. Wenn die Gesamthelligkeit des Frames diesen Wert überschreitet, beginnt eine neue Szene, die helle Frames gruppiert. |
| int BottomLumaTresh | Schwellenwert für Schwarzblenden. Bereich -1 bis 255. Ein Wert von -1 deaktiviert diese Funktion. Wenn die Gesamthelligkeit des Frames unter diesen Wert fällt, beginnt eine neue Szene, die dunkle Frames gruppiert. |
| int MinSceneLength | Minimale Szenendauer in Frames. Szenen, die kürzer als dieser Wert sind, werden gemäß dem Feld Merge modifiziert. Empfohlener Standardwert: 5. |
| int RegisterGraph | ROT-Registrierung des internen Verarbeitungsgraphen. 1: registrieren. 0: nicht registrieren. |
| BSTR SourceFilterMoniker | Anzeigename des gewünschten Quellfilters. NULL: Standard verwenden. |
| BSTR SplitterFilterMoniker | Anzeigename des gewünschten Splitter-Filters. NULL: Standard verwenden. |
| BSTR DecoderFilterMoniker | Anzeigename des gewünschten Decoder-Filters. NULL: Standard verwenden. |
| sdScenesMergeKind Merge | Zusammenführungsstrategie, die angewendet wird, wenn eine erkannte Szene kürzer als MinSceneLength ist. |
DetectorParameters2 structure
Erweitert DetectorParameters um Farbraumauswahl und teilweise Dateiverarbeitung. Enthält alle Felder von DetectorParameters sowie die folgenden.
| int UseYUV | Farbraum. 1: YUY2. 0: RGB24. |
| int Pad | Reserviert. |
| double StartPosition | Startposition der Verarbeitung in Sekunden. Wenn ungleich Null, sind alle zurückgegebenen Szenenzeiten relativ zu diesem Offset. |
| double StopPosition | Stoppposition der Verarbeitung in Sekunden. 0: bis zum Ende der Datei verarbeiten. |
ThumbnailsParameters structure
Steuert die Generierung von Vorschaubildern. Übergeben Sie einen Zeiger auf diese Struktur, um Vorschaubilder zu aktivieren, oder NULL, um sie zu deaktivieren.
| int JpegFormat | Ausgabeformat. 0: BMP. 1: JPEG. |
| int JpegQuality | JPEG-Kompressionsqualität, 0-100. |
| int ImagesPerScene | 1: nur Start-Frame. 2: Start- und End-Frame pro Szene. |
| double Scale | Skalierungsfaktor für Vorschaubilder. 1.0: volle Größe. |
| BSTR FileName | Dateinamen-Vorlage unter Verwendung der C-printf-Syntax mit einem Ganzzahlfeld, z. B. d:\dir\frame%05d.jpg. Die Frame-Nummer ersetzt den %d-Platzhalter. Erfordert den vollständigen Pfad mit korrekter Erweiterung. |
ISceneDetector interface
Kern-Schnittstelle für die Szenenerkennung.
DetectScenesInFile
HRESULT _stdcall DetectScenesInFile(
[in] DetectorParameters *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
Hauptmethode zur Erkennung. Der Aufrufer muss das SafeArray nicht im Voraus erstellen – übergeben Sie einen Zeiger auf eine SAFEARRAY-Variable. Wenn *Scenes nach dem Aufruf nicht NULL ist, muss der Aufrufer es freigeben. Das Ergebnis ist ein zweidimensionales Array. Für jede Szene geben zwei Long-Werte die Start- und Stopp-Frame-Nummern relativ zur Startposition der Verarbeitung an. Übergeben Sie ein nicht-NULL ThumbnailsParams, um die Generierung von Vorschaubildern zu aktivieren.
| HRESULT | Bedeutung |
|---|---|
| 0 | Erfolg |
| 0x80040601 | Nicht spezifizierter Fehler |
| 0x80040602 | DirectShow nicht installiert oder Version zu alt |
| 0x80040603 | Videodauer kann nicht ermittelt werden - möglicherweise ein Standbild |
| 0x80040604 | Ungültiges Argument |
| 0x80040605 | Gerätekontext kann nicht erstellt werden |
| 0x80040606 | Objekt ist mit einer anderen Aufgabe beschäftigt |
| 0x80040607 | Bildrate ist Null - möglicherweise ein Standbild |
| 0x80040608 | Graph kann nicht erstellt werden |
ISceneDetector2 interface
Erweitert ISceneDetector. Erbt alle Methoden und fügt die folgenden hinzu.
DetectScenesInFile2
HRESULT _stdcall DetectScenesInFile2(
[in] DetectorParameters2 *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
Identisch mit DetectScenesInFile, verwendet jedoch DetectorParameters2, was die Farbraumauswahl und teilweise Dateiverarbeitung ermöglicht. Die zurückgegebenen Start- und Stoppwerte der Szenen sind relativ zu Params.StartPosition.
GetFrameRate
HRESULT _stdcall GetFrameRate(
[out, retval] double *pFrameRate
);
Gibt die Bildrate der zuletzt verarbeiteten Datei zurück. Nützlich für die Umrechnung von Frame-Nummern in Zeitstempel. Gibt S_OK zurück oder E_INVALIDARG, wenn pFrameRate NULL ist.
ISceneDetectorEvents interface
Callback-Schnittstelle für Echtzeit-Erkennungsereignisse. Implementieren Sie diese in Ihrer Anwendung, um Ergebnisse zu erhalten, sobald sie gefunden werden.
NewScene
HRESULT NewScene(
[in] long SceneIndex,
[in] long Start,
[in] long Stop
);
Wird ausgelöst, wenn eine neue Szene abgeschlossen ist. SceneIndex beginnt bei 0. Start und Stop sind Frame-Nummern beginnend bei 0. Wenn die Verarbeitung über DetectScenesInFile2 gestartet wurde, sind beide Werte relativ zu Params.StartPosition.
Status
HRESULT Status(
[in] long ScenesFound,
[in] long CurrentFrame,
[in] long TotalFrames,
[out] long *AbortProcess
);
Wird alle 50 ms mit dem aktuellen Verarbeitungsfortschritt ausgelöst. Setzen Sie *AbortProcess auf 1, um die laufende Erkennung abzubrechen.