Scene Detector – Video Scene Detection COM-objekt
Beskrivelse
Scene Detector er en kraftfuld COM-komponent til scenergenkendelse og scenebehandling. Den indeholder prisvindende HandySaw DS-teknologier for ekstremt nøjagtig og hurtig optisk scenergenkendelse. Den er orienteret mod softwarefirmaer og udviklere, der ønsker at udvide deres produkter. En COM-komponent er et genanvendeligt softwaremodul, der følger Component Object Model (COM)-arkitekturen, hvilket gør det muligt at bruge det i forskellige programmeringssprog og -miljøer. Hvis du leder efter et selvstændigt program til scenedetektering, kan du bruge HandySaw DS ved at følge dette link.
Scene Detector-objektet behandler videofiler og returnerer en liste over fundne scener. Det kan også gemme miniaturebilleder for hver scene og straks informere det kaldende program om hver ny fundne scene via callback-grænseflader under behandlingen.
Hovedfunktioner
- Detekterer scener i næsten enhver videofil, der kan afspilles af Windows Media Player (på grund af brugen af DirectShow API)
- Hurtig og nøjagtig algoritme
- Nem integration
- Rapporterer ny scene lige efter den er defineret, under behandlingen. Ingen grund til at vente på, at detektionen er færdig
- Kan generere miniaturebilleder - første og sidste billeder for hver scene og gemme dem i BMP- eller JPG-filer
- Mulighed for at specificere kilde-, splitter- og videodecoderfiltre, der skal bruges under behandlingen
- Kan detektere "hvide" og "sorte" scener
- Kan arbejde i RGB- og YUV-farverum
- Kan behandle en del af en mediefil - brugeren kan specificere start- og stopbehandlingspositioner
Demoversion og pris
Kontakt mig.
Dokumentation
sdScenesMergeKind enum
Bruges til at give instruktioner om, hvad der skal gøres med korte scener.
sdMergeDelete = 0, | Kort scene fjernet |
sdMergeWithPrev = 1, | Kort scene flettet med forrige |
sdMergeWithNext = 2, | Kort scene flettet med næste |
sdMergeWithBoth = 3 | Korte (midterste), forrige og næste scener flettet til én enkelt scene |
DetectorParameters struktur
Denne struktur indeholder scenedetekteringsmotorens parametre.
BSTR VideoFileName; | Fuldt videofilnavn til detektion. |
int Threshold; | Detektionsgrænseværdi. Anbefalede standardværdier er 19 for RGB-farverum og 5 for YUV. Kan være fra 0 til 255. Denne parameter er den vigtigste. Når forskellen mellem to billeder er større end denne værdi, begynder en ny scene. Således: lavere tærskel - flere scener. |
int UpLumaTresh; | Bruges i detektion af "hvide fadeouts". Anbefalet standard -1. Kan være fra -1 til 255. "-1" deaktiverer denne funktion. Når den samlede billedlysstyrke er større end denne værdi, begynder en ny scene. Med denne funktion er det muligt at definere sekvensen af sådanne lyse billeder som en separat scene. |
int BottomLumaTresh; | Bruges i detektion af "sorte fadeouts". Anbefalet standard -1. Kan være fra -1 til 255. "-1" deaktiverer denne funktion. Når den samlede billedlysstyrke er mindre end denne værdi, begynder en ny scene. Med denne funktion er det muligt at definere sekvensen af sådanne mørke billeder som en separat scene. |
int MinSceneLength; | Angiver en minimumvarighed for en detekteret scene (i billeder). |
int RegisterGraph; | Styrer registreringen af den interne behandlingsgraf i
Running Object Table (ROT). Kan være 1 (registrer i ROT) eller 0 (registrerer ikke). |
BSTR SourceFilterMoniker; | Visningsnavn for den ønskede kildefiltermoniker, der bruges i den interne behandlingsgraf. Hvis NULL - bruges standardfilter. |
BSTR SplitterFilterMoniker; | Visningsnavn for den ønskede splitterfiltermoniker, der bruges i den interne behandlingsgraf. Hvis NULL - bruges standardfilter. |
BSTR DecoderFilterMoniker; | Visningsnavn for den ønskede decoderfiltermoniker, der bruges i den interne behandlingsgraf. Hvis NULL - bruges standardfilter. |
sdScenesMergeKind Merge; | Når scenelængden er mindre end MinSceneLength, modificeres scenen i henhold til værdien af denne parameter. |
DetectorParameters2 struktur
Denne struktur udvider et sæt af scenedetekteringsmotorens parametre, der er defineret i DetectorParameters-strukturen. Ud over medlemmer af DetectorParameters indeholder den:
int UseYUV; | Giver mulighed for at vælge farverum til scenedetektering. Kan være 1 (YUY2) eller 0 (RGB24). |
int Pad; | Reserveret |
double StartPosition; | Specificerer startmediets position for scenedetektering i sekunder. Hvis dette er forskellig fra nul, så glem ikke, at alle scenetider er relative til denne position. |
double StopPosition; | Specificerer stopmediets position for scenedetektering i sekunder. Sæt til nul for at ignorere. |
ThumbnailsParameters struktur
Denne struktur indeholder parametre til generering af miniaturebilleder.
int JpegFormat; | Vælg filformat. 0 - generer BMP-filer, 1 - generer JPEG-filer. |
int JpegQuality; | JPEG-komprimeringskvalitet. Heltal fra 0 til 100. |
int ImagesPerScene; | Antal billeder pr. scene. 1 - kun startbillede, 2 - start- og slutbilleder for hver scene. |
double Scale; | Skaleringsfaktor for miniaturebilleder. 1 - billede i fuld størrelse. Flydende kommatal. |
BSTR FileName; | Filnavneskabelon til miniaturebilleder. Streng til "C" "printf"-funktionen med et heltalsfelt. |
ISceneDetector interface
Denne grænseflade giver metoder til scenedetektering:
DetectScenesInFile-metoden
HRESULT _stdcall DetectScenesInFile([in] DetectorParameters *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
Dette er den vigtigste scenedetekteringsmetode.
Send detektionsparametre i Params og pointer til SAFEARRAY i Scenes.
Hvis Scenes er NULL, returnerer funktionen ikke listen over detekterede scener.
Den kaldende part behøver ikke at oprette SafeArray, før denne metode kaldes.
Hvis Scenes ikke er NULL, og efter funktionskaldet er *Scenes heller ikke NULL, skal den kaldende part destruere *Scenes SafeArray.
*Scenes er et todimensionelt array. For hver fundne scene er der to lange værdier: scenens start- og stopbillednummer. Disse værdier er relative til startmediets behandlingsposition.
Send en ikke-NULL-pointer som ThumbnailsParams for at aktivere generering af miniaturebilleder og specificere dens parametre. Send NULL for at deaktivere generering af miniaturebilleder.Returnerer en HRESULT-værdi. Mulige værdier omfatter følgende:
0 Succes 0x80040601 Uspecificeret fejl 0x80040602 DirectShow er ikke installeret, eller versionen er for gammel 0x80040603 Kan ikke hente videovarighed. Kan være stillbillede 0x80040604 Forkert argument 0x80040605 Kan ikke oprette enhedskontekst 0x80040606 Objektet er optaget af en anden opgave 0x80040607 Billedhastighed er lig med nul. Kan være stillbillede 0x80040608 Kan ikke opbygge graf
ISceneDetector2 interface
Denne grænseflade stammer fra ISceneDetector-grænsefladen og giver udvidede metoder til scenedetektering. Ud over de metoder, der er arvet fra ISceneDetector, eksponerer ISceneDetector2-grænsefladen følgende metoder:
DetectScenesInFile2-metoden
HRESULT _stdcall DetectScenesInFile2([in] DetectorParameters2 *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
I modsætning til DetectScenesInFile bruger denne metode DetectorParameters2-sættet af parametre, så det er muligt at specificere farverum, start- og stopbehandlingspositioner.
Vær opmærksom på, at start- og stopværdierne for scener, der returneres af denne metode, er relative til værdien Params.StartPosition.
Se beskrivelsen af DetectScenesInFile for andre oplysninger.GetFrameRate-metoden
HRESULT _stdcall GetFrameRate([out, retval] double *pFrameRate );
Returnerer videobilledhastigheden for den sidst behandlede fil. Nyttigt til oversættelse fra tid til billednummer.
Returnerer S_OK eller E_INVALIDARG, hvis pFrameRate er NULL.
ISceneDetectorEvents event-grænseflade
Denne event-grænseflade giver metoder til hentning af scenedetekteringsoplysninger i realtid.
NewScene-metoden
HRESULT NewScene([in] long SceneIndex, [in] long Start, [in] long Stop );
Event udløst af detektoren, når ny scene er defineret.
SceneIndex starter fra 0.
Start og Stop starter også fra 0 og er billednumre.
Når behandlingen startes via DetectScenesInFile2-metoden, er værdierne Start og Stop relative til værdien Params.StartPosition.Status-metoden
HRESULT Status([in] long ScenesFound, [in] long CurrentFrame, [in] long TotalFrames, [out] long *AbortProcess );
Event udløst hver 50 ms og informerer klienten om processtatus.
AbortProcess er pointer til variabel. Således kan klienten sætte *AbortProcess til værdien 1 for at annullere den aktuelle scenedetektering.