Scene Detector – 视频场景检测 COM 对象
描述
Scene Detector 是一款功能强大的 COM 组件,用于场景识别和场景处理。它采用了屡获殊荣的 HandySaw DS 技术,可实现极其准确和快速的光学场景识别。它面向希望扩展其产品的软件公司和开发人员。COM 组件是一个可重用的软件模块,它遵循组件对象模型 (COM) 架构,使其可以在各种编程语言和环境中使用。如果您正在寻找用于场景检测的独立应用程序,您可以按照此链接使用 HandySaw DS。
Scene Detector 对象处理视频文件并返回找到的场景列表。它还可以保存每个场景的缩略图,并通过回调接口在处理过程中立即通知调用应用程序有关每个新找到的场景的信息。
主要功能
- 检测几乎所有可以通过 Windows Media Player 播放的视频文件中的场景(由于使用 DirectShow API)
- 快速准确的算法
- 易于集成
- 在检测过程中,在定义新场景后立即报告新场景。无需等待检测完成
- 可以生成缩略图 - 每个场景的第一个和最后一个帧图像,并将它们保存在 BMP 或 JPG 文件中
- 可以指定在处理过程中使用的源、分离器和视频解码器滤镜
- 可以检测“白色”和“黑色”场景
- 可以在 RGB 和 YUV 颜色空间中工作
- 可以处理媒体文件的一部分 - 用户可以指定开始和停止处理位置
演示版本和价格
联系我。
文档
sdScenesMergeKind 枚举
用于提供有关如何处理短场景的说明。
sdMergeDelete = 0, | 删除短场景 |
sdMergeWithPrev = 1, | 将短场景与前一个场景合并 |
sdMergeWithNext = 2, | 将短场景与下一个场景合并 |
sdMergeWithBoth = 3 | 将短(中间)、前一个和下一个场景合并为一个场景 |
DetectorParameters 结构
此结构包含场景检测引擎参数。
BSTR VideoFileName; | 用于检测的完整视频文件名。 |
int Threshold; | 检测阈值。 建议的默认值是 RGB 颜色空间为 19,YUV 为 5。 可以是 0 到 255。 此参数是主要的。 当两个帧的差异大于此值时,新的场景开始。 因此:阈值越低 - 场景越多。 |
int UpLumaTresh; | 用于“白色淡入淡出”检测。 建议的默认值为 -1。 可以是 -1 到 255。 “-1”禁用此功能。 当整体帧亮度大于此值时,新的场景开始。 使用此功能,可以将此类明亮帧的序列定义为单独的场景。 |
int BottomLumaTresh; | 用于“黑色淡入淡出”检测。 建议的默认值为 -1。 可以是 -1 到 255。 “-1”禁用此功能。 当整体帧亮度小于此值时,新的场景开始。 使用此功能,可以将此类黑暗帧的序列定义为单独的场景。 |
int MinSceneLength; | 设置检测到的场景的最小持续时间(以帧为单位)。 |
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; | 指定场景检测的停止媒体位置(以秒为单位)。 设置为零以忽略。 |
ThumbnailsParameters 结构
此结构包含缩略图生成参数。
int JpegFormat; | 选择文件格式。0 - 生成 BMP 文件,1 - 生成 JPEG 文件。 |
int JpegQuality; | JPEG 压缩质量。0 到 100 之间的整数。 |
int ImagesPerScene; | 每个场景的图像数量。1 - 仅开始帧,2 - 每个场景的开始和结束帧。 |
double Scale; | 缩略图缩放因子。1 - 全尺寸图片。浮点值。 |
BSTR FileName; | 缩略图文件名模板。带有单个整数字段的“C”“printf”函数的字符串。 |
ISceneDetector 接口
此接口提供用于场景检测的方法:
DetectScenesInFile 方法
HRESULT _stdcall DetectScenesInFile([in] DetectorParameters *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
这是主要的场景检测方法。
在Params中传递检测参数,并在Scenes中传递指向 SAFEARRAY 的指针。
如果Scenes为 NULL,则函数不返回检测到的场景列表。
调用方无需在调用此方法之前创建 SafeArray。
如果Scenes不为 NULL,并且函数调用后*Scenes也不为 NULL,则调用方必须销毁*Scenes SafeArray。
*Scenes是二维数组。对于每个找到的场景,都有两个长值:场景开始和停止帧号。这些值与处理开始媒体位置相关。
传递非 NULL 指针作为ThumbnailsParams以启用缩略图生成并指定其参数。传递 NULL 以禁用缩略图生成。返回 HRESULT 值。可能的值包括以下内容:
0 成功 0x80040601 未指定的错误 0x80040602 未安装 DirectShow 或版本太旧 0x80040603 无法获取视频持续时间。可能是静止图像 0x80040604 错误的参数 0x80040605 无法创建设备上下文 0x80040606 对象正忙于另一项任务 0x80040607 帧速率等于零。可能是静止图像 0x80040608 无法构建图形
ISceneDetector2 接口
此接口派生自 ISceneDetector 接口,并提供用于场景检测的扩展方法。除了从 ISceneDetector 继承的方法之外,ISceneDetector2 接口还公开了以下方法:
DetectScenesInFile2 方法
HRESULT _stdcall DetectScenesInFile2([in] DetectorParameters2 *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY(long) *Scenes );
与 DetectScenesInFile 不同,此方法使用 DetectorParameters2 参数集,因此允许指定颜色空间、开始和停止处理位置。
请注意, 此方法返回的场景开始和停止值与Params.StartPosition 值相关。
有关其他信息,请参阅 DetectScenesInFile 描述。GetFrameRate 方法
HRESULT _stdcall GetFrameRate([out, retval] double *pFrameRate );
返回上次处理文件的视频帧速率。对于时间到帧号的转换很有用。
如果pFrameRate为 NULL,则返回 S_OK 或 E_INVALIDARG。
ISceneDetectorEvents 事件接口
此事件接口提供用于以实时方式检索场景检测信息的方法。
NewScene 方法
HRESULT NewScene([in] long SceneIndex, [in] long Start, [in] long Stop );
检测器在定义新场景时触发的事件。
SceneIndex 从 0 开始。
Start 和 Stop 也从 0 开始,并且是帧号。
当通过 DetectScenesInFile2 方法启动处理时,Start 和 Stop 值与Params.StartPosition 值相关。Status 方法
HRESULT Status([in] long ScenesFound, [in] long CurrentFrame, [in] long TotalFrames, [out] long *AbortProcess );
每 50 毫秒触发一次的事件,并通知客户端有关处理状态的信息。
AbortProcess 是指向变量的指针。因此,客户端可以将 *AbortProcess 设置为 1 值以取消当前的场景检测。