COM 组件
Scene Detector
面向开发者的视频场景检测工具。通过 COM 集成到您的应用程序中。
关于
Scene Detector 是一款基于 HandySaw DS 场景识别技术构建的 COM 组件。它处理视频文件并返回检测到的场景列表,且具有帧级精度。该组件还可以为每个场景生成缩略图,并通过回调接口实时报告新发现的场景。您无需等待完整的检测过程结束即可获取结果。
COM 组件遵循标准架构,使其几乎可以在任何 Windows 开发环境中使用。如果您需要的是独立的桌面工具而非开发者组件,HandySaw DS 是您的理想选择。
功能特性
广泛的格式支持
处理任何可通过 DirectShow API 在 Windows Media Player 中播放的视频文件。
实时回调
在发现新场景时立即报告。您的应用程序可以在处理过程中接收结果。
缩略图生成
可选择以任意比例将每个场景的第一帧和最后一帧保存为 BMP 或 JPEG 文件。
RGB 和 YUV 色彩空间
检测可以在 RGB24 或 YUY2 色彩空间中运行;每种空间都有其推荐的默认阈值。
白场和黑场检测
可配置的亮度阈值,将淡入白场和淡入黑场过渡识别为独立场景。
部分文件处理
指定开始和结束位置,仅检测媒体文件中选定片段内的场景。
自定义滤镜管道
覆盖内部使用的源滤镜、分离器和解码器 DirectShow 滤镜,以实现最大兼容性。
短场景合并
自动将短于可配置最小长度的场景与其相邻场景合并或将其移除。
演示与价格
联系我以获取演示版本和价格信息。
API 参考
sdScenesMergeKind enum
指定检测后如何处理短场景。
| sdMergeDelete = 0 | 移除短场景。 |
| sdMergeWithPrev = 1 | 将短场景与前一个场景合并。 |
| sdMergeWithNext = 2 | 将短场景与下一个场景合并。 |
| sdMergeWithBoth = 3 | 将短场景、前一个场景和下一个场景全部合并为一个场景。 |
DetectorParameters structure
核心场景检测引擎参数。
| BSTR VideoFileName | 要处理的视频文件的完整路径。 |
| int Threshold | 检测灵敏度。范围 0-255。推荐默认值:19 (RGB) 和 5 (YUV)。当连续两帧之间的差异超过此值时,即开始一个新场景。较低的值会产生更多的场景。 |
| int UpLumaTresh | 淡入白场阈值。范围 -1-255。值为 -1 时禁用此功能。当整体帧亮度超过此值时,即开始一个新场景,将明亮的帧归为一组。 |
| int BottomLumaTresh | 淡入黑场阈值。范围 -1-255。值为 -1 时禁用此功能。当整体帧亮度低于此值时,即开始一个新场景,将暗淡的帧归为一组。 |
| int MinSceneLength | 最小场景持续时间(以帧为单位)。短于此值的场景将根据 Merge 字段进行处理。推荐默认值:5。 |
| int RegisterGraph | 内部处理图的 ROT 注册。1:注册。0:不注册。 |
| BSTR SourceFilterMoniker | 所需源滤镜的显示名称。NULL:使用默认值。 |
| BSTR SplitterFilterMoniker | 所需分离器滤镜的显示名称。NULL:使用默认值。 |
| BSTR DecoderFilterMoniker | 所需解码器滤镜的显示名称。NULL:使用默认值。 |
| sdScenesMergeKind Merge | 当检测到的场景短于 MinSceneLength 时应用的合并策略。 |
DetectorParameters2 structure
扩展了 DetectorParameters,增加了色彩空间选择和部分文件处理功能。包含 DetectorParameters 的所有字段以及以下字段。
| int UseYUV | 色彩空间。1:YUY2。0:RGB24。 |
| int Pad | 保留。 |
| double StartPosition | 处理开始位置(以秒为单位)。当非零时,所有返回的场景时间均相对于此偏移量。 |
| double StopPosition | 处理停止位置(以秒为单位)。0:处理至文件末尾。 |
ThumbnailsParameters structure
控制缩略图生成。传递指向此结构的指针以启用缩略图,或传递 NULL 以禁用。
| int JpegFormat | 输出格式。0:BMP。1:JPEG。 |
| int JpegQuality | JPEG 压缩质量,0-100。 |
| int ImagesPerScene | 1:仅起始帧。2:每个场景的起始帧和结束帧。 |
| double Scale | 缩略图缩放因子。1.0:全尺寸。 |
| BSTR FileName | 使用 C 语言 printf 语法的模板文件名,包含一个整数占位符,例如 d:\dir\frame%05d.jpg。帧编号将替换 %d 占位符。需要包含正确扩展名的完整路径。 |
ISceneDetector interface
核心场景检测接口。
DetectScenesInFile
HRESULT _stdcall DetectScenesInFile(
[in] DetectorParameters *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
主要检测方法。调用者无需预先创建 SafeArray - 只需传递指向 SAFEARRAY 变量的指针。如果调用后 *Scenes 不为 NULL,调用者必须销毁它。结果是一个二维数组。对于每个场景,两个 long 值分别表示相对于处理开始位置的起始和结束帧编号。传递非 NULL 的 ThumbnailsParams 以启用缩略图生成。
| HRESULT | 含义 |
|---|---|
| 0 | 成功 |
| 0x80040601 | 未指定的错误 |
| 0x80040602 | DirectShow 未安装或版本过旧 |
| 0x80040603 | 无法获取视频时长 - 可能是静态图像 |
| 0x80040604 | 参数错误 |
| 0x80040605 | 无法创建设备上下文 |
| 0x80040606 | 对象正忙于其他任务 |
| 0x80040607 | 帧率为零 - 可能是静态图像 |
| 0x80040608 | 无法构建图表 |
ISceneDetector2 interface
扩展了 ISceneDetector。继承其所有方法并添加以下内容。
DetectScenesInFile2
HRESULT _stdcall DetectScenesInFile2(
[in] DetectorParameters2 *Params,
[in] ThumbnailsParameters *ThumbnailsParams,
[out] SAFEARRAY(long) *Scenes
);
与 DetectScenesInFile 相同,但使用 DetectorParameters2,支持色彩空间选择和部分文件处理。返回的场景起始和结束值相对于 Params.StartPosition。
GetFrameRate
HRESULT _stdcall GetFrameRate(
[out, retval] double *pFrameRate
);
返回最后处理文件的帧率。有助于将帧编号转换为时间戳。返回 S_OK,如果 pFrameRate 为 NULL,则返回 E_INVALIDARG。
ISceneDetectorEvents interface
用于实时检测事件的回调接口。在您的应用程序中实现此接口以在发现结果时接收通知。
NewScene
HRESULT NewScene(
[in] long SceneIndex,
[in] long Start,
[in] long Stop
);
当新场景确定时触发。SceneIndex 从 0 开始。Start 和 Stop 是从 0 开始的帧编号。当通过 DetectScenesInFile2 启动处理时,两个值均相对于 Params.StartPosition。
Status
HRESULT Status(
[in] long ScenesFound,
[in] long CurrentFrame,
[in] long TotalFrames,
[out] long *AbortProcess
);
每 50 毫秒触发一次,报告当前处理进度。将 *AbortProcess 设置为 1 可取消正在进行的检测。