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短い (中間)、前のシーンと次のシーンが 1 つのシーンに結合される

DetectorParameters 構造体

この構造体にはシーン検出エンジンのパラメーターが含まれています。

BSTR VideoFileName;検出用の完全なビデオ ファイル名。
int Threshold;検出閾値。
推奨されるデフォルトは、RGB カラースペースの場合は 19、YUV の場合は 5 です。
0 ~ 255 の値を指定できます。
このパラメータがメインです。
2 つのフレームの差がこの値よりも大きい場合、新しいシーンが始まります。
したがって、しきい値が低いほどシーンが増えます。
int UpLumaTresh; 「白フェードアウト」検出に使用されます。
推奨されるデフォルトは -1 です。
-1 ~ 255 の値を指定できます。
「-1」はこの機能を無効にします。
全体的なフレームの明るさがこの値よりも大きい場合、新しいシーンが始まります。
この機能を使用すると、一連の明るいフレームを別のシーンとして定義することができます。
int BottomLumaTresh; 「黒のフェードアウト」検出に使用されます。
推奨されるデフォルトは -1 です。
-1 ~ 255 の値を指定できます。
「-1」はこの機能を無効にします。
全体的なフレームの明るさがこの値よりも低い場合、新しいシーンが始まります。
この機能を使用すると、このようなダーク フレームのシーケンスを別のシーンとして定義することができます。
int MinSceneLength;

検出されたシーンの最小継続時間を設定します (フレーム単位)。
デフォルトの 5 を推奨します。
0 から任意の正の値を指定できます。
定義されたシーンの長さがこの値より短い場合、このシーンはマージフィールドの値に従って、前、次、または両方のシーンとマージされます(下記を参照)。

int RegisterGraph;内部処理グラフのRunning Object Table(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;

サムネイルのファイル名のテンプレート。 1 つの整数フィールドを持つ「C」「printf」関数の文字列。
例: 「d:\filedir\filename%05d.jpg」
適切な拡張子を付けたフルパス名を指定する必要があります。特定のサムネイルのファイル名を取得するために、%d 記号の代わりにフレーム番号が挿入されます。

ISceneDetector インターフェイス

このインターフェイスは、シーン検出のためのメソッドを提供します。

DetectScenesInFile メソッド

HRESULT _stdcall DetectScenesInFile ([in] DetectorParameters *Params, [in] ThumbnailsParameters *ThumbnailsParams, [out] SAFEARRAY (long) *Scenes );

これがメインのシーン検出方法です。
Paramsで検出パラメータを渡し、 Scene で SAFEARRAY へのポインタを渡します。
Scenesが NULL の場合、関数は検出されたシーンのリストを返しません。
呼び出し元は、このメソッドを呼び出す前に SafeArray を作成する必要はありません。
Scenes がNULL ではなく、関数呼び出しの後*Scenes もNULL ではない場合、呼び出し元は*Scenes SafeArray を破棄する必要があります。
※シーンは2次元配列です。見つかった各シーンには、シーンの開始フレーム番号と終了フレーム番号という 2 つの長い値があります。これらの値は、処理開始メディア位置を基準としています。
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 から始まります。
StartStopも 0 から始まり、フレーム番号です。
DetectScenesInFile2メソッドによって処理が開始された場合、 Start 値Stop値はParams.StartPosition値に相対します。

ステータスメソッド

HRESULTステータス([in] long ScenesFound、[in] long CurrentFrame、[in] long TotalFrames、[out] long *AbortProcess );

イベントは 50 ミリ秒ごとに発生し、クライアントにプロセスのステータスを通知します。
AbortProcess は変数へのポインタです。したがって、クライアントは * AbortProcess を1 の値に設定して、現在のシーン検出をキャンセルできます。