Scene Detector – ビデオシーン検出 COM オブジェクト

説明

Scene Detector は、シーン認識とシーン処理のための強力な COM コンポーネントです。非常に正確で高速な光学シーン認識のために、受賞歴のある HandySaw DS テクノロジーを組み込んでいます。製品を拡張したいソフトウェア会社や開発者向けです。COM コンポーネントは、コンポーネント オブジェクト モデル (COM) アーキテクチャに従う再利用可能なソフトウェア モジュールであり、さまざまなプログラミング言語や環境で使用できます。シーン検出用のスタンドアロン アプリケーションをお探しの場合は、こちらのリンクから HandySaw DS を使用できます。

Scene Detector オブジェクトは、ビデオファイルを処理し、検出されたシーンのリストを返します。また、各シーンのサムネイルを保存したり、処理中にコールバック インターフェイスを介して、検出された新しいシーンについて呼び出し元アプリケーションに即座に通知したりすることもできます。

 

主な機能

  • Windows Media Player で再生できるほぼすべてのビデオファイルでシーンを検出 (DirectShow API の使用による)
  • 高速かつ正確なアルゴリズム
  • 簡単な統合
  • 検出が完了するのを待つ必要はなく、処理中に新しいシーンが定義されるとすぐに報告
  • サムネイルを生成可能 - 各シーンの最初と最後のフレーム画像を BMP または JPG ファイルに保存
  • 処理中に使用するソース、スプリッタ、およびビデオデコーダフィルタを指定可能
  • 「白」と「黒」のシーンを検出可能
  • RGB および YUV 色空間で動作可能
  • メディアファイルの一部を処理可能 - ユーザーは処理の開始位置と終了位置を指定可能

 

デモ版と価格

お問い合わせください。

 

ドキュメント

 

sdScenesMergeKind enum

短いシーンの処理方法に関する指示を与えるために使用されます。

sdMergeDelete = 0, 短いシーンは削除されます
sdMergeWithPrev = 1, 短いシーンは前のシーンとマージされます
sdMergeWithNext = 2, 短いシーンは次のシーンとマージされます
sdMergeWithBoth = 3 短い (中央の) シーン、前のシーン、および次のシーンが 1 つのシーンにマージされます

 

DetectorParameters structure

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

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

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

int RegisterGraph; 実行中のオブジェクトテーブル (ROT) での内部処理グラフの登録を制御します。
1 (ROT に登録) または 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; シーン検出の停止メディア位置を秒単位で指定します。
無視する場合はゼロに設定します。

 

ThumbnailsParameters structure

この構造体には、サムネイル生成パラメータが含まれています。

int JpegFormat; ファイル形式を選択します。0 - BMP ファイルを生成、1 - JPEG ファイルを生成。
int JpegQuality; JPEG 圧縮品質。0 から 100 までの整数。
int ImagesPerScene; シーンあたりの画像数。1 - 開始フレームのみ、2 - 各シーンの開始フレームと終了フレーム。
double Scale; サムネイルのスケーリング係数。1 - フルサイズ画像。浮動小数点値。
BSTR FileName;

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

 

ISceneDetector interface

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

DetectScenesInFile method

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 は 2 次元配列です。検出された各シーンに対して、シーンの開始フレーム番号と終了フレーム番号の 2 つの long 値があります。これらの値は、処理の開始メディア位置を基準にしています。
ThumbnailsParams として非 NULL ポインタを渡してサムネイルの生成をオンにし、そのパラメータを指定します。サムネイルの生成を無効にするには NULL を渡します。

HRESULT 値を返します。可能な値は次のとおりです。

0 成功
0x80040601 特定のエラー
0x80040602 DirectShow がインストールされていないか、バージョンが古すぎます
0x80040603 ビデオの継続時間を取得できません。静止画像の可能性があります
0x80040604 無効な引数
0x80040605 デバイス コンテキストを作成できません
0x80040606 オブジェクトが別のタスクでビジー状態です
0x80040607 フレームレートがゼロです。静止画像の可能性があります
0x80040608 グラフを作成できません

 

ISceneDetector2 interface

このインターフェイスは、ISceneDetector インターフェイスから派生し、拡張されたシーン検出メソッドを提供します。ISceneDetector から継承されたメソッドに加えて、ISceneDetector2 インターフェイスは次のメソッドを公開します。

DetectScenesInFile2 method

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

DetectScenesInFile とは異なり、このメソッドは DetectorParameters2 パラメータセットを使用するため、色空間、処理の開始位置と停止位置を指定できます。
このメソッドによって返されるシーンの開始値と停止値は、Params.StartPosition 値を基準にしていることに注意してください。
その他の情報については、DetectScenesInFile の説明を参照してください。

GetFrameRate method

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

最後に処理されたファイルのビデオフレームレートを返します。時間からフレーム番号への変換に役立ちます。
pFrameRate が NULL の場合は、S_OK または E_INVALIDARG を返します。

 

ISceneDetectorEvents events interface

このイベントインターフェイスは、シーン検出情報をリアルタイムで取得するためのメソッドを提供します。

NewScene method

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

新しいシーンが定義されると、検出器によってイベントが発生します。
SceneIndex は 0 から始まります。
StartStop も 0 から始まり、フレーム番号です。
DetectScenesInFile2 メソッドを介して処理を開始した場合、StartStop の値は Params.StartPosition 値を基準にしています。

Status method

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

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