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 滤镜,以实现最大兼容性。

短场景合并

自动将短于可配置最小长度的场景与其相邻场景合并或将其移除。

联系我以获取演示版本和价格信息。

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未指定的错误
0x80040602DirectShow 未安装或版本过旧
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 开始。StartStop 是从 0 开始的帧编号。当通过 DetectScenesInFile2 启动处理时,两个值均相对于 Params.StartPosition

Status

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

每 50 毫秒触发一次,报告当前处理进度。将 *AbortProcess 设置为 1 可取消正在进行的检测。