Scene Detector – Video Scene Detection COM-Objekt
Beschreibung
Scene Detector ist eine leistungsstarke COM-Komponente für die Szenenerkennung und -verarbeitung. Es beinhaltet die preisgekrönten HandySaw DS-Technologien für eine extrem genaue und schnelle optische Szenenerkennung. Es richtet sich an Softwareunternehmen und Entwickler, die ihre Produkte erweitern möchten. Eine COM-Komponente ist ein wiederverwendbares Softwaremodul, das der Component Object Model (COM)-Architektur folgt, sodass es in verschiedenen Programmiersprachen und -umgebungen verwendet werden kann. Wenn Sie nach einer eigenständigen Anwendung zur Szenenerkennung suchen, können Sie HandySaw DS verwenden, indem Sie diesem Link folgen.
Das Scene Detector-Objekt verarbeitet Videodateien und gibt eine Liste der gefundenen Szenen zurück. Es kann auch Miniaturansichten für jede Szene speichern und die aufrufende Anwendung während der Verarbeitung über Callback-Schnittstellen sofort über jede neu gefundene Szene informieren.
Hauptmerkmale
- Erkennt Szenen in fast jeder Videodatei, die vom Windows Media Player abgespielt werden kann (aufgrund der Verwendung der DirectShow-API).
- Schneller und genauer Algorithmus
- Einfache Integration
- Meldet eine neue Szene direkt nach ihrer Definition während der Verarbeitung. Es ist nicht erforderlich, auf den Abschluss der Erkennung zu warten
- Kann Miniaturansichten generieren - erste und letzte Frame-Bilder für jede Szene und diese in BMP- oder JPG-Dateien speichern
- Es ist möglich, Quell-, Splitter- und Videodecoder-Filter anzugeben, die während der Verarbeitung verwendet werden sollen
- Kann "weiße" und "schwarze" Szenen erkennen
- Kann in RGB- und YUV-Farbräumen arbeiten
- Kann einen Teil einer Mediendatei verarbeiten - der Benutzer kann Start- und Stopp-Verarbeitungspositionen angeben
Demoversion und Preis
Kontaktieren Sie mich.
Dokumentation
sdScenesMergeKind-Enumeration
Wird verwendet, um Anweisungen zu geben, was mit kurzen Szenen zu tun ist.
sdMergeDelete = 0, | Kurze Szene entfernt |
sdMergeWithPrev = 1, | Kurze Szene mit vorheriger zusammengeführt |
sdMergeWithNext = 2, | Kurze Szene mit nächster zusammengeführt |
sdMergeWithBoth = 3 | Kurze (mittlere), vorherige und nächste Szenen zu einer einzigen Szene zusammengeführt |
DetectorParameters-Struktur
Diese Struktur enthält Parameter der Szenenerkennungs-Engine.
BSTR VideoFileName; | Vollständiger Videodateiname für die Erkennung. |
int Threshold; | Schwellenwert für die Erkennung. Empfohlene Standardwerte sind 19 für den RGB-Farbraum und 5 für YUV. Kann zwischen 0 und 255 liegen. Dieser Parameter ist der wichtigste. Wenn die Differenz von zwei Frames größer als dieser Wert ist, beginnt eine neue Szene. Also: niedrigerer Schwellenwert - mehr Szenen. |
int UpLumaTresh; | Wird bei der Erkennung von "White-Fadeouts" verwendet. Empfohlener Standardwert -1. Kann zwischen -1 und 255 liegen. "-1" deaktiviert diese Funktion. Wenn die Gesamthelligkeit des Frames größer als dieser Wert ist, beginnt eine neue Szene. Mit dieser Funktion ist es möglich, eine Sequenz solcher heller Frames als separate Szene zu definieren. |
int BottomLumaTresh; | Wird bei der Erkennung von "Black-Fadeouts" verwendet. Empfohlener Standardwert -1. Kann zwischen -1 und 255 liegen. "-1" deaktiviert diese Funktion. Wenn die Gesamthelligkeit des Frames geringer als dieser Wert ist, beginnt eine neue Szene. Mit dieser Funktion ist es möglich, eine Sequenz solcher dunkler Frames als separate Szene zu definieren. |
int MinSceneLength; | Legt eine minimale Dauer einer erkannten Szene (in Frames) fest. |
int RegisterGraph; | Steuert die Registrierung des internen Verarbeitungsgraphen in der
he Running Object Table (ROT). Kann 1 (in ROT registrieren) oder 0 (nicht registrieren) sein. |
BSTR SourceFilterMoniker; | Anzeigename des gewünschten Quellfilter-Monikers, der im internen Verarbeitungsgraphen verwendet wird. Wenn NULL - Standardfilter verwendet. |
BSTR SplitterFilterMoniker; | Anzeigename des gewünschten Splitterfilter-Monikers, der im internen Verarbeitungsgraphen verwendet wird. Wenn NULL - Standardfilter verwendet. |
BSTR DecoderFilterMoniker; | Anzeigename des gewünschten Decoderfilter-Monikers, der im internen Verarbeitungsgraphen verwendet wird. Wenn NULL - Standardfilter verwendet. |
sdScenesMergeKind Merge; | Wenn die Szenenlänge kleiner als MinSceneLength ist, wird die Szene gemäß dem Wert dieses Parameters geändert. |
DetectorParameters2-Struktur
Diese Struktur erweitert eine Reihe von Parametern der Szenenerkennungs-Engine, die in der DetectorParameters-Struktur definiert sind. Zusätzlich zu den Elementen von DetectorParameters enthält sie:
int UseYUV; | Ermöglicht die Auswahl des Farbraums für die Szenenerkennung. Kann 1 (YUY2) oder 0 (RGB24) sein. |
int Pad; | Reserviert |
double StartPosition; | Gibt die Startmedienposition für die Szenenerkennung in Sekunden an. Wenn dies ungleich Null ist, vergessen Sie nicht, dass alle Szenenzeiten relativ zu dieser Position sind. |
double StopPosition; | Gibt die Stoppmedienposition für die Szenenerkennung in Sekunden an. Auf Null setzen, um zu ignorieren. |
ThumbnailsParameters-Struktur
Diese Struktur enthält Parameter für die Miniaturansichtenerstellung.
int JpegFormat; | Dateiformat auswählen. 0 - BMP-Dateien generieren, 1 - JPEG-Dateien generieren. |
int JpegQuality; | JPEG-Komprimierungsqualität. Ganze Zahl von 0 bis 100. |
int ImagesPerScene; | Anzahl der Bilder pro Szene. 1 - nur Startframe, 2 - Start- und Endframe jeder Szene. |
double Scale; | Skalierungsfaktor für Miniaturansichten. 1 - Bild in voller Größe. Gleitkommawert. |
BSTR FileName; | Vorlage für Miniaturansichtsdateinamen. Zeichenfolge für die "C"-"printf"-Funktion mit einem ganzzahligen Feld. |
ISceneDetector-Schnittstelle
Diese Schnittstelle stellt Methoden zur Szenenerkennung bereit:
DetectScenesInFile-Methode
HRESULT _stdcall DetectScenesInFile([in] DetectorParameters *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
Dies ist die Hauptmethode zur Szenenerkennung.
Übergeben Sie die Erkennungsparameter in Params und einen Zeiger auf SAFEARRAY in Scenes.
Wenn Scenes NULL ist, gibt die Funktion keine Liste der erkannten Szenen zurück.
Der Aufrufer muss SafeArray nicht erstellen, bevor er diese Methode aufruft.
Wenn Scenes nicht NULL ist und nach dem Funktionsaufruf auch *Scenes nicht NULL ist, muss der Aufrufer *Scenes SafeArray zerstören.
*Scenes ist ein zweidimensionales Array. Für jede gefundene Szene gibt es zwei lange Werte: Szene Start- und Stopp-Frame-Nummern. Diese Werte beziehen sich auf die Startmedienposition der Verarbeitung.
Übergeben Sie einen Nicht-NULL-Zeiger als ThumbnailsParams, um die Generierung von Miniaturansichten zu aktivieren und deren Parameter anzugeben. Übergeben Sie NULL, um die Generierung von Miniaturansichten zu deaktivieren.Gibt einen HRESULT-Wert zurück. Mögliche Werte sind die Folgenden:
0 Erfolg 0x80040601 Unspezifizierter Fehler 0x80040602 DirectShow ist nicht installiert oder die Version ist zu alt 0x80040603 Die 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 Framerate ist Null. Möglicherweise ein Standbild 0x80040608 Graph kann nicht erstellt werden
ISceneDetector2-Schnittstelle
Diese Schnittstelle leitet sich von der ISceneDetector-Schnittstelle ab und stellt erweiterte Methoden zur Szenenerkennung bereit. Zusätzlich zu den von ISceneDetector geerbten Methoden stellt die ISceneDetector2-Schnittstelle die folgenden Methoden bereit:
DetectScenesInFile2-Methode
HRESULT _stdcall DetectScenesInFile2([in] DetectorParameters2 *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
Im Gegensatz zu DetectScenesInFile verwendet diese Methode den DetectorParameters2-Parametersatz, sodass Farbraum, Start- und Stopp-Verarbeitungspositionen angegeben werden können.
Achten Sie darauf, dass die von dieser Methode zurückgegebenen Szenenstart- und -stoppwerte relativ zum Wert Params.StartPosition sind.
Weitere Informationen finden Sie in der Beschreibung von DetectScenesInFile.GetFrameRate-Methode
HRESULT _stdcall GetFrameRate([out, retval] double *pFrameRate );
Gibt die Video-Framerate der zuletzt verarbeiteten Datei zurück. Nützlich für die Übersetzung von Zeit in Frame-Nummer.
Gibt S_OK oder E_INVALIDARG zurück, wenn pFrameRate NULL ist.
ISceneDetectorEvents-Ereignisschnittstelle
Diese Ereignisschnittstelle stellt Methoden zum Abrufen von Szenenerkennungsinformationen in Echtzeit bereit.
NewScene-Methode
HRESULT NewScene([in] long SceneIndex, [in] long Start, [in] long Stop );
Ereignis, das vom Detektor ausgelöst wird, wenn eine neue Szene definiert wird.
SceneIndex beginnt bei 0.
Start und Stop beginnen ebenfalls bei 0 und sind Frame-Nummern.
Wenn die Verarbeitung über die DetectScenesInFile2-Methode gestartet wurde, beziehen sich die Werte Start und Stop auf den Wert Params.StartPosition.Status-Methode
HRESULT Status([in] long ScenesFound, [in] long CurrentFrame, [in] long TotalFrames, [out] long *AbortProcess );
Ereignis, das alle 50 ms ausgelöst wird und den Client über den Prozessstatus informiert.
AbortProcess ist ein Zeiger auf eine Variable. Daher kann der Client *AbortProcess auf den Wert 1 setzen, um die aktuelle Szenenerkennung abzubrechen.