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 | 短いシーン、前のシーン、次のシーンをすべて1つにマージします。 |
DetectorParameters structure
シーン検出エンジンのコアパラメータ。
| BSTR VideoFileName | 処理するビデオファイルへのフルパス。 |
| int Threshold | 検出感度。範囲0~255。推奨デフォルト値:19 (RGB)、5 (YUV)。連続する2フレーム間の差がこの値を超えると、新しいシーンが始まります。値を小さくすると、より多くのシーンが検出されます。 |
| 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 | 処理開始位置(秒単位)。0以外の場合、返されるすべてのシーン時間は、このオフセットからの相対値となります。 |
| 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構文を使用したファイル名テンプレート(整数フィールド1つを含む)。例: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でない場合、呼び出し元はそれを破棄する必要があります。結果は2次元配列です。各シーンについて、2つの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
);
最後に処理されたファイルのフレームレートを返します。フレーム番号をタイムスタンプに変換するのに便利です。pFrameRateがNULLの場合はE_INVALIDARGを、それ以外はS_OKを返します。
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
);
現在の処理進捗状況とともに50msごとに発生します。進行中の検出をキャンセルするには、*AbortProcessを1に設定します。