Scene Detector – 视频场景检测 COM 对象

描述

Scene Detector 是一个功能强大的 COM 组件,用于场景识别和场景处理。它采用了屡获殊荣的 HandySaw DS 技术,可实现极其准确和快速的光学场景识别。它面向想要扩展其产品的软件公司和开发人员。 COM 组件是一个可重用的软件模块,遵循组件对象模型(COM) 体系结构,允许在各种编程语言和环境中使用。如果您正在寻找用于场景检测的独立应用程序,可以通过以下链接使用 HandySaw DS。

场景检测器对象处理视频文件并返回找到的场景列表。它还可以保存每个场景的缩略图,并在处理过程中通过回调接口立即通知调用者应用程序每个新找到的场景。

主要特点

  • 检测几乎所有可由 Windows Media Player 播放的视频文件中的场景(由于使用 DirectShow API)
  • 快速准确的算法
  • 轻松集成
  • 在处理过程中定义后立即报告新场景。无需等待检测完成
  • 可以生成缩略图 - 每个场景的第一帧和最后一帧图像并将它们保存在 BMP 或 JPG 文件中
  • 可以指定处理过程中使用的源、分离器和视频解码器过滤器
  • 可以检测“白色”和“黑色”场景
  • 可以在 RGB 和 YUV 色彩空间中工作
  • 可以处理媒体文件的一部分 - 用户可以指定开始和停止处理位置

演示版本和价格

联系我。

文档

sdScenesMergeKind 枚举

用于指示如何处理短场景。

sdMergeDelete = 0,短场景已删除
sdMergeWithPrev = 1, 短场景与前一个场景合并
sdMergeWithNext = 2,短场景与下一个场景合并
sdMergeWithBoth = 3短(中)、上一个和下一个场景合并为一个场景

探测器参数结构

该结构包含场景检测引擎参数。

BSTR VideoFileName;用于检测的完整视频文件名。
int Threshold;检测阈值。
RGB 色彩空间的建议默认值是 19,YUV 的默认值是 5。
可以是 0 到 255。
这个参数是主要的。
当两帧的差异大于该值时,新场景开始。
因此:较低的阈值 - 更多的场景。
int UpLumaTresh;用于“白色淡出”检测。
推荐默认值-1。
可以是从 -1 到 255。
“-1”禁用此功能。
当整体帧亮度大于该值时,新场景开始。
利用此功能,可以将此类明亮帧的序列定义为单独的场景。
int BottomLumaTresh;用于“黑色淡出”检测。
推荐默认值-1。
可以是从 -1 到 255。
“-1”禁用此功能。
当整体帧亮度小于该值时,新场景开始。
利用此功能,可以将此类暗帧的序列定义为单独的场景。
int MinSceneLength;

设置检测到的场景的最短持续时间(以帧为单位)。
建议默认 5。
可以是从 0 到任何正值。
如果定义的场景的长度小于该值,则根据合并字段值(见下文),该场景与前一个、下一个或两个场景合并。

int RegisterGraph;控制内部处理图在运行对象表(ROT)中的注册。
可以是1(在ROT中注册)或0(不注册)。
BSTR SourceFilterMoniker;内部处理图中使用的所需源过滤器名称的显示名称。
如果为 NULL - 使用默认过滤器。
BSTR SplitterFilterMoniker;内部处理图中使用的所需分离器过滤器名称的显示名称。
如果为 NULL - 使用默认过滤器。
BSTR DecoderFilterMoniker;内部处理图中使用的所需解码器过滤器名称的显示名称。
如果为 NULL - 使用默认过滤器。
sdScenesMergeKind Merge;当场景长度小于MinSceneLength时,根据该参数的值修改场景。

DetectorParameters2 结构体

该结构扩展了DetectorParameters结构中定义的一组场景检测引擎参数。除了 DetectorParameters 的成员之外,它还包含:

int UseYUV;允许选择场景检测的色彩空间。
可以是 1(YUY2) 或 0(RGB24)。
int Pad;预订的
double StartPosition;指定场景检测的开始媒体位置(以秒为单位)。
如果这是非零,那么不要忘记所有场景时间都是相对于该位置的。
double StopPosition;指定场景检测的停止媒体位置(以秒为单位)。
设置为零以忽略。

缩略图参数结构

该结构包含缩略图生成参数。

int JpegFormat;选择文件格式。 0 - 生成 BMP 文件,1 - 生成 JPEG 文件。
int JpegQuality; JPEG 压缩质量。 0 到 100 之间的整数。
int ImagesPerScene;每个场景的图像数量。 1 - 仅开始帧,2 - 每个场景的开始和结束帧。
double Scale;缩略图缩放因子。 1 - 全尺寸图片。浮点值。
BSTR FileName;

缩略图文件名模板。具有一个整数字段的“C”“printf”函数的字符串。
例如:“d:\filedir\文件名%05d.jpg”
您必须指定带有正确扩展名的完整路径名。将插入帧号而不是 %d 符号来获取特定缩略图的文件名。

ISceneDetector接口

该接口提供了场景检测的方法:

检测场景文件方法

HRESULT _stdcall DetectScenesInFile ([输入] DetectorParameters *Params, [输入] ThumbnailsParameters *ThumbnailsParams, [输出] SAFEARRAY (long) *Scenes );

这是主要的场景检测方法。
Params中传递检测参数并在Scenes中传递指向SAFEARRAY的指针。
如果场景为 NULL,函数不会返回检测到的场景列表。
调用者在调用此方法之前不需要创建 SafeArray。
如果Scenes不为 NULL,并且在函数调用后*Scenes也不为 NULL,调用者必须销毁*Scenes SafeArray。
*场景是二维数组。对于每个找到的场景,都有两个长值:场景开始帧号和停止帧号。这些值与处理开始媒体位置相关。
将非 NULL 指针作为ThumbnailsParams传递以打开缩略图生成并指定其参数。传递 NULL 以禁用缩略图生成。

返回HRESULT值。可能的值包括以下内容:

0成功
0x80040601未指定的错误
0x80040602 DirectShow未安装或版本太旧
0x80040603无法获取视频时长。可能是静止图像
0x80040604糟糕的论点
0x80040605无法创建设备上下文
0x80040606对象正忙于另一项任务
0x80040607帧速率为零。可能是静止图像
0x80040608无法构建图表

ISceneDetector2接口

该接口派生自ISceneDetector接口,并提供场景检测的扩展方法。除了从ISceneDetector继承的方法之外, ISceneDetector2接口还公开了以下方法:

DetectScenesInFile2 方法

HRESULT _stdcall DetectScenesInFile2 ([输入] DetectorParameters2 *Params,[输入] ThumbnailsParameters *ThumbnailsParams,[输出] SAFEARRAY (长)*场景);

DetectScenesInFile不同,此方法使用DetectorParameters2参数集,因此允许指定颜色空间、开始和停止处理位置。
请注意,该方法返回的场景开始和停止值是相对于Params.StartPosition值的。
有关其他信息,请参阅DetectScenesInFile说明。

获取帧速率方法

HRESULT _stdcall GetFrameRate ([out, retval] double *pFrameRate );

返回最后处理的文件的视频帧速率。对于时间到帧编号的转换很有用。
如果pFrameRate为 NULL,则返回 S_OK 或 E_INVALIDARG。

ISceneDetectorEvents 事件接口

该事件接口提供了实时检索场景检测信息的方法。

新场景方法

HRESULT NewScene ([in] long SceneIndex, [in] long Start, [in] long Stop );

定义新场景时检测器触发的事件。
场景索引从0开始。
StartStop也是从0开始,都是帧号。
通过DetectScenesInFile2方法启动处理时, StartStop值与Params.StartPosition值相关。

状态方法

HRESULT Status ([in] long ScenesFound, [in] long CurrentFrame, [in] long TotalFrames, [out] long *AbortProcess );

事件每 50 毫秒触发一次,并通知客户端进程状态。
AbortProcess是指向变量的指针。因此客户端可以将* AbortProcess设置为1值来取消当前场景检测。