Komponent COM
Scene Detector
Wykrywanie scen wideo dla programistów. Zintegruj je ze swoją aplikacją poprzez COM.
O programie
Scene Detector to komponent COM zbudowany w oparciu o technologię rozpoznawania scen HandySaw DS. Przetwarza plik wideo i zwraca listę wykrytych scen z dokładnością do pojedynczej klatki. Komponent może również generować miniatury dla każdej sceny i raportować nowo znalezione sceny w czasie rzeczywistym za pomocą interfejsów wywołania zwrotnego (callback). Nie musisz czekać na zakończenie pełnego procesu wykrywania.
Komponent COM jest zgodny ze standardową architekturą, dzięki czemu można go używać w praktycznie każdym środowisku programistycznym dla systemu Windows. Jeśli potrzebujesz samodzielnego narzędzia desktopowego, a nie komponentu dla programistów, właściwym wyborem będzie HandySaw DS.
Funkcje
Szerokie wsparcie formatów
Przetwarza każdy plik wideo odtwarzalny przez Windows Media Player za pośrednictwem API DirectShow.
Wywołania zwrotne w czasie rzeczywistym
Raportuje każdą nową scenę natychmiast po jej wykryciu. Twoja aplikacja otrzymuje wyniki w trakcie przetwarzania.
Generowanie miniatur
Opcjonalnie zapisuje pierwszą i ostatnią klatkę każdej sceny jako pliki BMP lub JPEG w dowolnej skali.
Przestrzenie barw RGB i YUV
Wykrywanie może działać w przestrzeni barw RGB24 lub YUY2; każda z nich posiada własne zalecane wartości domyślne progów.
Wykrywanie scen białych i czarnych
Konfigurowalne progi luminancji pozwalają identyfikować przejścia do bieli i czerni jako oddzielne sceny.
Przetwarzanie fragmentów plików
Określ pozycje początkową i końcową, aby wykrywać sceny tylko w wybranym segmencie pliku multimedialnego.
Niestandardowy potok filtrów
Zastąp wewnętrznie używane filtry źródłowe, splittery i dekodery DirectShow dla uzyskania maksymalnej kompatybilności.
Łączenie krótkich scen
Sceny krótsze niż konfigurowalne minimum są automatycznie łączone z sąsiednimi lub usuwane.
Wersja demonstracyjna i cena
Skontaktuj się ze mną, aby uzyskać wersję demonstracyjną oraz informacje o cenach.
Dokumentacja API
sdScenesMergeKind enum
Określa sposób obsługi krótkich scen po wykryciu.
| sdMergeDelete = 0 | Krótka scena jest usuwana. |
| sdMergeWithPrev = 1 | Krótka scena jest łączona z poprzednią sceną. |
| sdMergeWithNext = 2 | Krótka scena jest łączona z następną sceną. |
| sdMergeWithBoth = 3 | Krótka scena, poprzednia scena i następna scena są łączone w jedną. |
DetectorParameters structure
Podstawowe parametry silnika wykrywania scen.
| BSTR VideoFileName | Pełna ścieżka do przetwarzanego pliku wideo. |
| int Threshold | Czułość wykrywania. Zakres 0-255. Zalecane wartości domyślne: 19 (RGB) i 5 (YUV). Nowa scena rozpoczyna się, gdy różnica między dwiema kolejnymi klatkami przekroczy tę wartość. Niższe wartości generują więcej scen. |
| int UpLumaTresh | Próg przejścia do bieli. Zakres -1-255. Wartość -1 wyłącza tę funkcję. Gdy ogólna jasność klatki przekroczy tę wartość, rozpoczyna się nowa scena, grupująca jasne klatki razem. |
| int BottomLumaTresh | Próg przejścia do czerni. Zakres -1-255. Wartość -1 wyłącza tę funkcję. Gdy ogólna jasność klatki spadnie poniżej tej wartości, rozpoczyna się nowa scena, grupująca ciemne klatki razem. |
| int MinSceneLength | Minimalny czas trwania sceny w klatkach. Sceny krótsze niż ta wartość są modyfikowane zgodnie z polem Merge. Zalecana wartość domyślna: 5. |
| int RegisterGraph | Rejestracja ROT wewnętrznego grafu przetwarzania. 1: rejestruj. 0: nie rejestruj. |
| BSTR SourceFilterMoniker | Nazwa wyświetlana żądanego filtra źródłowego. NULL: użyj domyślnego. |
| BSTR SplitterFilterMoniker | Nazwa wyświetlana żądanego filtra splittera. NULL: użyj domyślnego. |
| BSTR DecoderFilterMoniker | Nazwa wyświetlana żądanego filtra dekodera. NULL: użyj domyślnego. |
| sdScenesMergeKind Merge | Strategia łączenia stosowana, gdy wykryta scena jest krótsza niż MinSceneLength. |
DetectorParameters2 structure
Rozszerza DetectorParameters o wybór przestrzeni barw i przetwarzanie fragmentów plików. Zawiera wszystkie pola DetectorParameters oraz poniższe.
| int UseYUV | Przestrzeń barw. 1: YUY2. 0: RGB24. |
| int Pad | Zarezerwowane. |
| double StartPosition | Pozycja rozpoczęcia przetwarzania w sekundach. Gdy jest niezerowa, wszystkie zwrócone czasy scen są względne względem tego przesunięcia. |
| double StopPosition | Pozycja zakończenia przetwarzania w sekundach. 0: przetwarzaj do końca pliku. |
ThumbnailsParameters structure
Kontroluje generowanie miniatur. Przekaż wskaźnik do tej struktury, aby włączyć miniatury, lub NULL, aby wyłączyć.
| int JpegFormat | Format wyjściowy. 0: BMP. 1: JPEG. |
| int JpegQuality | Jakość kompresji JPEG, 0-100. |
| int ImagesPerScene | 1: tylko klatka początkowa. 2: klatka początkowa i końcowa dla każdej sceny. |
| double Scale | Współczynnik skali miniatury. 1.0: pełny rozmiar. |
| BSTR FileName | Szablon nazwy pliku używający składni printf języka C z jednym polem liczbowym, np. d:\dir\frame%05d.jpg. Numer klatki zastępuje symbol zastępczy %d. Wymaga pełnej ścieżki z poprawnym rozszerzeniem. |
ISceneDetector interface
Główny interfejs wykrywania scen.
DetectScenesInFile
HRESULT _stdcall DetectScenesInFile(
[in] DetectorParameters *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
Główna metoda wykrywania. Wywołujący nie musi tworzyć SafeArray wcześniej - przekaż wskaźnik do zmiennej SAFEARRAY. Jeśli po wywołaniu *Scenes nie jest NULL, wywołujący musi go zwolnić. Wynikiem jest dwuwymiarowa tablica. Dla każdej sceny dwie wartości typu long określają numery klatek początku i końca względem pozycji rozpoczęcia przetwarzania. Przekaż niezerowy ThumbnailsParams, aby włączyć generowanie miniatur.
| HRESULT | Znaczenie |
|---|---|
| 0 | Sukces |
| 0x80040601 | Nieokreślony błąd |
| 0x80040602 | DirectShow nie jest zainstalowany lub wersja jest zbyt stara |
| 0x80040603 | Nie można uzyskać czasu trwania wideo - może to być obraz statyczny |
| 0x80040604 | Błędny argument |
| 0x80040605 | Nie można utworzyć kontekstu urządzenia |
| 0x80040606 | Obiekt jest zajęty innym zadaniem |
| 0x80040607 | Liczba klatek na sekundę wynosi zero - może to być obraz statyczny |
| 0x80040608 | Nie można zbudować grafu |
ISceneDetector2 interface
Rozszerza ISceneDetector. Dziedziczy wszystkie jego metody i dodaje poniższe.
DetectScenesInFile2
HRESULT _stdcall DetectScenesInFile2(
[in] DetectorParameters2 *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
To samo co DetectScenesInFile, ale używa DetectorParameters2, umożliwiając wybór przestrzeni barw i przetwarzanie fragmentów plików. Zwrócone wartości początku i końca sceny są względne względem Params.StartPosition.
GetFrameRate
HRESULT _stdcall GetFrameRate(
[out, retval] double *pFrameRate
);
Zwraca liczbę klatek na sekundę ostatnio przetworzonego pliku. Przydatne do konwersji numerów klatek na znaczniki czasu. Zwraca S_OK lub E_INVALIDARG, jeśli pFrameRate jest NULL.
ISceneDetectorEvents interface
Interfejs wywołania zwrotnego dla zdarzeń wykrywania w czasie rzeczywistym. Zaimplementuj w swojej aplikacji, aby otrzymywać wyniki w miarę ich znajdowania.
NewScene
HRESULT NewScene(
[in] long SceneIndex,
[in] long Start,
[in] long Stop
);
Wywoływane, gdy nowa scena zostanie sfinalizowana. SceneIndex zaczyna się od 0. Start i Stop to numery klatek zaczynające się od 0. Gdy przetwarzanie zostało rozpoczęte przez DetectScenesInFile2, obie wartości są względne względem Params.StartPosition.
Status
HRESULT Status(
[in] long ScenesFound,
[in] long CurrentFrame,
[in] long TotalFrames,
[out] long *AbortProcess
);
Wywoływane co 50 ms z aktualnym postępem przetwarzania. Ustaw *AbortProcess na 1, aby anulować trwające wykrywanie.