Windows ムービー メーカーでの独自のエフェクトおよびトランジションの作成

Josh Cohen, Mike Matsel, and Peter Turcan
Windows Digital Media Division
Microsoft Corporation

December 2002
日本語版最終更新日 2003 年 4 月 24 日

対象製品:
    Microsoft(R) Windows(R) ムービー メーカー

Download sample code サンプル mmstfx.exe のダウンロード

要約: この文書では、独自のエフェクトやトランジションを Windows ムービー メーカーのインターフェイスに追加する方法について説明します。これらのエフェクトは、収録されているエフェクトまたはトランジションを修正する XML ファイルで作成するか、C++ および Microsoft DirectX Media SDK に収録されている Windows Media Transforms を使用して最初から作成することができます。

目次

はじめに
XML による Windows ムービー メーカーのエフェクトおよびトランジションの作成
Windows ムービー メーカーへの独自のアイコンの追加
トランジションおよびエフェクトの新しいオブジェクトの作成
用語集
詳細について

はじめに

Microsoft(R) Windows(R) ムービー メーカー 2.0 を使用すると、プログラマは独自のエフェクトとトランジションを Windows ムービー メーカーのインターフェイスに読み込むことができます。これらのエフェクトとトランジションは、既存のエフェクトとトランジションを修正するか、Microsoft DirectX(R) Transform のオブジェクトを独自にコーディングするだけで作成できます。この記事では、独自のエフェクトとトランジションの作成に関する 3 つの主要なトピックについて説明します。トピックは簡単なものから順に以下に示します。

  • XML による Windows ムービー メーカーのエフェクトおよびトランジションの作成  このタスクはいたって簡単で、必要なものはテキスト エディタと XML の基礎知識のみです。
  • Windows ムービー メーカーへの独自のアイコンの追加  このトピックはやや複雑で、Microsoft Visual Studio(R) を使用して C++ プロジェクトをコンパイルする方法についての知識と、独自のアイコンの作成に必要なグラフィック ソフトウェアを使用できる能力を必要とします。
  • トランジションおよびエフェクトの新しいオブジェクトの作成  このタスクを実行するには、COM と ATL のプログラミング、DirectX Transform、および Direct3D(R) アーキテクチャの知識が必要です。また、DirectX Media 6.0 SDK と DirectX 7.0 SDK のヘッダーをインストールしておく必要があります (DirectX Media SDK は、DirectX 7.0 に収録されていませんでした)。この文書の最後に記載した場所からインストールした Visual Studio .NET と DirectX Media SDK には、DirectX 7.0 のヘッダーが収録されていますが、ドキュメントはどちらにも収録されていません。7.0 SDK のドキュメントは、DirectX 7.0 SDK の完全インストール (この文書の最後に記載されているリンクを使用してインスール可能) にのみ収録されています。DirectX Transform の新しいオブジェクトの作成を試す場合は、いくつかの新しいエフェクトとトランジションのサンプル コードが収録されている圧縮ファイルを Microsoft の Web サイトからダウンロードすることができます。

これらのすべてのトピックで説明したタスクを実行するには、Windows ムービー メーカー 2.0 と Windows XP Home Edition または Windows XP Professional Edition がコンピュータにインストールされている必要があります。また、独自のアイコンまたはトランジションやエフェクトの新しいオブジェクトの作成には、Microsoft Visual Studio が必要です。追加情報源、および DirectX Media SDK と DirectX 7.0 SDK のインストール場所は、この文書の最後の「詳細について」の節に記載しています。

XML による Windows ムービー メーカーのエフェクトおよびトランジションの作成

Windows ムービー メーカーは、読み込むすべてのエフェクトとトランジション、および各オブジェクトのパラメータの値を指定する専用の XML ファイルを起動時に読み込みます。この XML ファイルの表示または変更はできません。ただし、独自の XML ファイルを作成すると、独自のパラメータが設定されたオブジェクトを選択して読み込み、独自の名前が付いたオブジェクトを表示することができます。

Windows ムービー メーカーは、プログラムに収録されている多数の DLL の 1 つに、組み込みエフェクトおよびトランジションを COM オブジェクトとして格納します。各 COM オブジェクトは、1 つのトランジションまたはエフェクトを表しており、GUID (globally unique identifier) で識別されます。1 つの DLL に、複数の COM オブジェクトを含めることができます。各オブジェクトには、色や輝度などのパラメータが含まれている場合と含まれていない場合があります。これらのパラメータは、エフェクトやトランジションに設定することができます。XML ファイルは、読み込むオブジェクトを指定し、これらのオブジェクトのパラメータの番号値を設定します。オブジェクトは、異なるパラメータを使用して複数回読み込むことができるので、同じオブジェクトを基にして異なるエフェクトやトランジションを作成することができます。たとえば、スローモーションとファーストモーションのエフェクトは同じオブジェクトであり、渡される速度のパラメータ値が違うだけです。XML ファイルでのこれらのエフェクトやトランジションの処理方法がわかれば、収録されている COM オブジェクトから独自のエフェクトやトランジションを作成することができます。

この節で説明するトピックは、次のとおりです。

  • 独自の XML ファイルの作成方法
  • 独自の XML ファイルで使用できる必要な XML タグおよびオプションの XML タグ
  • エフェクトおよびトランジションの作成に使用できるオブジェクトおよびパラメータ
  • 標準のエフェクトとトランジションを迅速かつ簡単にコピーおよび変更することができるように、Windows ムービー メーカーが標準のエフェクトとトランジションを読み込むために使用する専用の XML コード

XML ファイルの知識

次のコードは、トランジション (Flip Right) とエフェクト (セピア調) を記述した Windows ムービー メーカーの専用の XML ファイルの一部です。

<TransitionsAndEffects Version="1.0">
   <Transitions>
      <TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}">
         <Transition nameID="62800" iconid="91" comment="Flip, right">
            <Param name="InternalName" value="Simple3D" />
            <Param name="RevolveCamera" value="true" />
            <Param name="ShowAFront" value="true" />
            <Param name="ShowABack" value="false" />
            <Param name="ShowBFront" value="false" />
            <Param name="ShowBBack" value="true" />
         </Transition>
         ...
      </TransitionDLL>
      ...
   </Transitions>
   <Effects>
      <EffectDLL guid="{B4DC8DD9-2CC1-4081-9B2B-20D7030234EF}">
         <Effect nameID="62863" iconid="25" comment="Sepia tone">
            <Param name="InternalName" value="Standard" />
            <Param name="Desaturate" value="true" />
            <Param name="Red" value="0.10" />
            <Param name="Magenta" value="0.09" />
            <Param name="Yellow" value="0.25" />
            <Param name="contrast" value="1.0" />
         </Effect>
         ...
      </EffectDLL>
      ...
   </Effects>
</TransitionsAndEffects>

次の表で、上記のコードのタグと属性を説明します。トランジションとエフェクトは、通常は同じタグを使用します。タグが異なる場合は、表に違いを示しています。

エレメント 属性 説明
TransitionsAndEffects   XML ファイル全体の境界タグ。
  Version "1.0" に設定する必要のある必須フィールド。
Transitions
または
Effects
  このタグは、全トランジションのグループまたは全エフェクトのグループの境界を示す。トランジションまたはエフェクトに適切なタグを使用する。
TransitionDLL
または
EffectDLL
  このタグは、エフェクトまたはトランジションの単一の COM オブジェクトの境界を示し、GUID で識別される。このタグは、1 つ以上の独自のエフェクトまたはトランジションを保持することができる。トランジションまたはエフェクトに適切なタグを使用する。
  guid トランジションまたはエフェクトの COM オブジェクトを定義する GUID を一覧表示する (この GUID は、実際は下記のコードの DirectShow IDXEffect のインターフェイスを実装する COM オブジェクトのクラス ID である)。指定された値は、Windows ムービー メーカーに収録されているエフェクトやトランジションのオブジェクトに割り当てられる。
Transition
または
Effect
  これは、TransitionDLL または EffectDLL タグで指定されたトランジションまたはエフェクトの COM オブジェクトを使用する個々のトランジションまたはエフェクトの境界タグである。1 つの COM オブジェクトには、複数のトランジションまたはエフェクトを含めることができる (DLL ファイルには、複数の COM オブジェクトを含めることができる。ただし、DLL 名は Windows ムービー メーカーに収録されている COM オブジェクトには必要ない)。トランジションまたはエフェクトに適切なタグを使用する。
  nameID

または

name

nameID は使用しない。これは、Windows ムービー メーカーがトランジション用に使用する内部識別子である。独自のファイルを作成するときには、代わりに、次に示すように name 属性に置き換える。

<Effect name="My New Effect" iconid="25" comment="My cool new effect">

割り当てた値は、Windows ムービー メーカーに表示される。名前が一意でないと、プレビューに表示されるエフェクトやトランジションが正しく表示されない場合がある。ただし、Windows ムービー メーカーは正しいエフェクトやトランジションを実際の編集ビデオに適用する。

  iconID Windows ムービー メーカーが表示するトランジション用のアイコンを特定する。独自のアイコンでは、この値はゼロベースの番号で、ビットマップ ストリップ内の使用するアイコンを示している。また、1 から 90 前後までの番号を選択すると Windows ムービー メーカーの既存のアイコンの 1 つを使用することができる。独自のアイコンの追加の詳細については、 「Windows ムービー メーカーへの独自のアイコンの追加」 を参照のこと。
  iconID Windows ムービー メーカーが表示するトランジション用のアイコンを特定する。独自のアイコンでは、この値はゼロベースの番号で、ビットマップ ストリップ内の使用するアイコンを示している。また、1 から 90 前後までの番号を選択すると Windows ムービー メーカーの既存のアイコンの 1 つを使用することができる。独自のアイコンの追加の詳細については、 「Windows ムービー メーカーへの独自のアイコンの追加」 を参照のこと。
  comment Windows ムービー メーカーが無視する情報。標準タグの comment 属性は、一般にエフェクトやトランジションの表示名を示す。ただし、常に完全に一致するとは限らない。
Param   設定可能なオブジェクトのパラメータを保持しているタグ。含まれるオブジェクトが持つパラメータの数と同じ数の Param タグを持つことができる。
  Value 引用符で囲まれているこの値は、パラメータに割り当てられる。

独自の XML ファイルの作成

Windows ムービー メーカーの独自の XML ファイルを作成するには、次の 2 つの場所のうちの 1 つに AddOnTFX という新しいフォルダを作成する必要があります。

  • インストールされている言語バージョンのローカル ID 名 (たとえば英語のローカル ID は 1033) が指定されたフォルダの下にある、Windows ムービー メーカーのインストール フォルダ内。たとえば、この新しいフォルダは C:\Program Files\Movie Maker\1033\AddOnTFX というパスに設定できます。これにより、作成したエフェクトを誰もが使用できますが、この場所にフォルダを作成するには、コンピュータの管理者特権を持っている必要があります。
  • ローカル ユーザーの設定パス内 (OS のパス\Documents and Settings\ユーザー名\Application Data\Microsoft Movie Maker\)。ユーザーは常にこのパスに新しいフォルダを追加することを許されますが、作成したエフェクトはユーザー名でログオンしたユーザーのみが使用できます。

Windows ムービー メーカーは、上記の両方のパスを確認し、両方の場所に存在するすべてのトランジションとエフェクトを読み込みます。

作成した AddOnTFX フォルダ内に、メモ帳またはその他の XML オーサリング ソフトウェアで .xml 拡張子を持つ新しいファイルを作成します。ファイルの名前付けには、.xml 拡張子が必要であること以外、制限はありません。新しい XML ファイルを作成したら、前のコード サンプル (「XML ファイルの知識」を参照) に貼り付け、2 ~ 3 の変更を実行することができます (nameID 属性を name に変更する、独自の名前を追加する、". . ." を削除する、など)。次のコード ブロックは、前のサンプルを修正したものです。これは、Flip Right トランジションとセピア調エフェクトの独自のバリエーションを作成する完全な XML ファイルです。この新しいコードは、Windows ムービー メーカーの標準アイコンのセットから取得した新しいアイコンを使用します。

<TransitionsAndEffects Version="1.0" >
   <Transitions>
      <TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}">
         <Transition name="My cool transition" iconid="88">
            <Param name="InternalName" value="Simple3D" />
            <Param name="RevolveCamera" value="true" />
            <Param name="ShowAFront" value="true" />
            <Param name="ShowABack" value="false" />
            <Param name="InitialScaleA" value="smaller" />
            <Param name="FinalScaleA" value="bigger" />
            <Param name="ShowBFront" value="false" />
            <Param name="ShowBBack" value="true" />
         </Transition>
      </TransitionDLL>
   </Transitions>
   <Effects>
      <EffectDLL guid="{B4DC8DD9-2CC1-4081-9B2B-20D7030234EF}">
         <Effect name="My Yellow, Rotated Effect" iconid="20" 
           comment="Yellow, turned 3/4">
            <Param name="InternalName" value="Standard" />
            <Param name="Desaturate" value="true" />
            <Param name="Red" value="0.0" />
            <Param name="Magenta" value="0.09" />
            <Param name="Yellow" value="0.75" />
            <Param name="contrast" value="1.0" />
            <Param name="Rotate2DA" value="270.0" />
         </Effect>
      </EffectDLL>
   </Effects>
</TransitionsAndEffects>

独自の XML ファイルの作成時には、次の 2 つの注意事項に留意する必要があります。

  • 独自の XML ファイルが正しく作成されていない、使用する GUID が間違っている、または独自の XML ファイルにその他の問題がある、などの場合、Windows ムービー メーカーは、このファイルからエフェクトやトランジションをまったく読み込まない可能性があり、さらにこの場合ユーザーはファイルが読み込まれなかったことに気づきません。作成したエフェクトやトランジションが Windows ムービー メーカーのインターフェイスに表示されない場合は、XML ファイルのエラーを調べます。
  • Windows ムービー メーカーは、起動時にのみ XML ファイルを読み込みます。Windows ムービー メーカーの実行中に XML ファイルに対して行った変更は、Windows ムービー メーカーを終了して再起動するまで有効になりません。

Windows ムービー メーカーに収録されているエフェクトおよびトランジションのオブジェクト

このトピックにある 2 つの表は、Windows ムービー メーカーに収録されている基本のトランジションとエフェクトをすべて一覧表示しています。トランジションやエフェクトの各オブジェクトには、変更可能な 1 つ以上のパラメータ、さらにパラメータが設定されているサブクラスが含まれている場合があります。すべてのパラメータには既定値があるため、作成するエフェクトやトランジションにすべてのパラメータを設定する必要はありません。

トランジションとエフェクトは、別々の表に示しています。トランジションのオブジェクトをエフェクトとして使用することはできません。また、エフェクトのオブジェクトをトランジションとして使用することはできません。たとえば、モザイク オブジェクトはトランジションではなくエフェクトなので、次のコードは機能しません。

<TransitionDLL guid="{4CCEA634-FBE0-11D1-906A-00C04FD9189D}"
  comment="Pixelate">
   <Transition nameID="62818" iconid="19" comment="Pixelate">
      <Param name="MaxSquare" value="25" />
   </Transition>
</TransitionDLL>

全トランジションおよびエフェクトの詳細は、表の次のトピックで説明します。また、表にはこれらのトピックへのリンクが含まれています。各トピックには、Windows ムービー メーカーに収録されているエフェクトやトランジションの読み込みに Windows ムービー メーカーが使用する XML コードが含まれています。次の表で使用されている名前は任意であり、Windows ムービー メーカーが表示する名前は トピックに示す XML コードの EffectDLL タグの comment 属性に割り当てられた名前とほぼ同じです。

トランジション

名前 GUID 説明
バー 2E7700B7-27C4-437F-9FBF-1E8BE2817566 横線を用いて、1 つ目のビデオから 2 つ目のビデオに切り替える。
チェッカー B3EE7802-8224-4787-A1EA-F0DE16DEABD3 正方形の領域を用いて、1 つ目のビデオから 2 つ目のビデオに切り替える。
DirectX Media ワイプ AF279B30-86EB-11D1-81BF-0000F87557DB さまざまな DirectX Media 独自のワイプ。
ディゾルブ F7F4A1B6-8E87-452F-A2D7-3077F508DBC0 不連続な点を用いて、あるビデオのセグメントから別のビデオのセグメントにディゾルブさせる (シームレスにビデオを切り替えるフェードとは異なる)。
フェード 16B280C5-EE70-11D1-9066-00C04FD9189D 1 つ目のビデオが 2 つ目のビデオに徐々に消えていく。
アイリス 049F2CE6-D996-4721-897A-DB15CE9EB73D 1 つ目のビデオを 4 つの領域に分割する。この 4 つの領域は中心から対角線上に消えていく。
モザイク 4CCEA634-FBE0-11D1-906A-00C04FD9189D 1 つ目のビデオの粒子が粗大化し、2 つ目のビデオに変化する。
SMPTE ワイプ DE75D012-7A65-11D2-8CEA-00A0C9441E20 SMPTE のさまざまな標準トランジション。詳細は、Microsoft DirectShowョ のドキュメントを参照のこと。
車輪 5AE1DAE0-1461-11D2-A484-00C04F8EFB69 車輪スポーク型の回転ワイプを用いて、1 つ目のビデオから 2 つ目のビデオに切り替える。
WMTFX トランジション C63344D8-70D3-4032-9B32-7A3CAD5091A5 さまざまなトランジションおよびエフェクト。

エフェクト

名前 GUID 説明
ぼかし 7312498D-E87A-11D1-81E0-0000F87557DB イメージをぼかす。
輝度 5A20FD6F-F8FE-4a22-9EE7-307D72D09E6E ビデオのセグメントの輝度を修正する。
フェード EC85D8F1-1C4E-46e4-A748-7AA04E7C0496 クリップが選択した単色からフェード インする、または単色にフェード アウトする。
フィルム時代 ADEADEB8-E54B-11d1-9A72-0000F875EADE フィルムが年代物に見える粒子の荒れ、傷、およびその他の人工的な可視的効果を適用する。
フィルタ E673DCF2-C316-4c6f-AA96-4E4DC6DC291E ネオン グロー、スポンジ、およびエンボスなどのさまざまな可視的効果を実現する。
ミラー イメージおよびグレースケール 16B280C8-EE70-11D1-9066-00C04FD9189D イメージが左右に反転する、またはカラーからグレースケールに変化して白黒イメージを作成する。
モザイク 4CCEA634-FBE0-11D1-906A-00C04FD9189D イメージの粒子が正方形に粗大化する。各正方形は単色となり、その領域の元のピクセルの平均色を示す。
スピード 00000000-0000-0000-0000-000000000000 速度調整のみに使用する NULL GUID。
WMTFX エフェクト B4DC8DD9-2CC1-4081-9B2B-20D7030234EF さまざまなトランジションおよびエフェクトを実現する。

バー トランジション

バー トランジションは、横線を用いて、1 つ目のビデオから 2 つ目のビデオに切り替えます。このトランジションは、パラメータを取りません。次の XML コードは、Windows ムービー メーカーに収録されているバー トランジションを示しています。

<TransitionDLL guid="{2E7700B7-27C4-437F-9FBF-1E8BE2817566}">
   <Transition nameID="62817" iconid="37" comment="Bars"/>
</TransitionDLL>

チェッカー トランジション

チェッカー トランジションは、正方形の領域を用いて、1 つ目のビデオから 2 つ目のビデオに切り替えます。このトランジションは、パラメータを取りません。次の XML コードは、Windows ムービー メーカーに収録されているチェッカー トランジションを示しています。

<TransitionDLL guid="{B3EE7802-8224-4787-A1EA-F0DE16DEABD3}">
   <Transition nameID="62815" iconid="4" comment="Checkerboard, Across" />
</TransitionDLL>

DirectX Media ワイプ トランジション

DirectX Media ワイプ トランジションは、DirectX Media ワイプを基にしたワイプを実現します。DirectX Media ワイプは、次のパラメータを取ります。

パラメータ 既定値 範囲 説明
GradientSize float 0.25 0.0 ~ 1.0 2 つの入力間のトランジションのグラデーションの幅で、出力サイズに対する割合で指定する。
WipeStype Int 0 0 または 1 ワイプの方向。左右 (0) または上下 (1)。

次の XML コードは、Windows ムービー メーカーに収録されている DirectX Media ワイプ トランジションを示しています。

<TransitionDLL guid="{AF279B30-86EB-11D1-81BF-0000F87557DB}" 
  comment="Wipe">
   <Transition nameID="62820" iconid="60" comment="Wipe, Wide Down">
      <Param name="GradientSize" value="0.6" />
      <Param name="wipeStyle" value="1" />
   </Transition>
   <Transition nameID="62821" iconid="58" comment="Wipe, Normal Down">
      <Param name="GradientSize" value="0.5" />
      <Param name="wipeStyle" value="1" />
   </Transition>
   <Transition nameID="62822" iconid="56" comment="Wipe, Narrow Down">
      <Param name="GradientSize" value="0.2" />
      <Param name="wipeStyle" value="1" />
   </Transition>
   <Transition nameID="62823" iconid="59" comment="Wipe, Wide right">
      <Param name="GradientSize" value="0.6" />
      <Param name="wipeStyle" value="0" />
   </Transition>
   <Transition nameID="62824" iconid="57" comment="Wipe, Normal right">
      <Param name="GradientSize" value="0.5" />
      <Param name="wipeStyle" value="0" />
   </Transition>
   <Transition nameID="62825" iconid="55" comment="Wipe, Narrow right">
      <Param name="GradientSize" value="0.2" />
      <Param name="wipeStyle" value="0" />
   </Transition>
</TransitionDLL>

ディゾルブ トランジション

ディゾルブ トランジションは、不連続な点を用いて、あるビデオのセグメントから別のビデオのセグメントにディゾルブさせます (ビデオをシームレスに切替えるフェードとは異なる)。このトランジションは、パラメータを取りません。次の XML コードは、ムービー メーカーに収録されているディゾルブ トランジションを示しています。

<TransitionDLL guid="{F7F4A1B6-8E87-452F-A2D7-3077F508DBC0}">
   <Transition nameID="62816" iconid="38" comment="Dissolve" />
</TransitionDLL>

フェード トランジション

フェード トランジションは、DirectX Media トランジションを使用してフェード トランジションを作成するための機能を提供します。このトランジションは、パラメータを取りません。

次の XML コードは、Windows ムービー メーカーに収録されているフェード トランジションを示しています。

<TransitionDLL guid="{16B280C5-EE70-11D1-9066-00C04FD9189D}">
   <Transition nameID="62814" iconid="12" comment="Fade" />
</TransitionDLL>

アイリス トランジション

アイリス トランジションは、画面を 4 つの領域に分割し、中心から対角線上に移動させます。このトランジションは、パラメータを取りません。

次の XML コードは、Windows ムービー メーカーに収録されているアイリス トランジションを示しています。

<TransitionDLL guid="{049F2CE6-D996-4721-897A-DB15CE9EB73D}">
   <Transition nameID="62813" iconid="29" comment="Iris" />
</TransitionDLL>

モザイク トランジション

モザイク トランジションは、1 つ目のビデオの粒子を粗大化し、2 つ目のビデオに変化させます。このトランジションは、パラメータを取りません。次の XML コードは、Windows ムービー メーカーに収録されているモザイク トランジションを示しています。

<TransitionDLL guid="{4CCEA634-FBE0-11D1-906A-00C04FD9189D}">
   <Transition nameID="62818" iconid="36" comment="Pixelate"/>
</TransitionDLL>

SMPTE ワイプ トランジション

SMPTE ワイプは、SMPTE (Society of Motion Picture & Television Engineers: 映画テレビ技術者協会) の標準ワイプであり、DirectShow のドキュメントで説明しています。次の表は、SMPTE ワイプに使用できるパラメータを示しています。

パラメータ 既定値 説明
BorderColor long なし ワイプ パターンの端を囲む枠の色。この属性の値は、0xRRGGBB 形式の 16 進数値で、ここで RR は赤の 16 進値、GG は緑の 16 進値、および BB は青の 16 進値である。 (したがって、純粋な赤、緑、および青は、それぞれ 0xFF000、0x00FF00、および 0x0000FF となる)。
BorderSoftness long 0.0 ワイプ パターンの端を囲む、ぼやけた領域の幅。ぼやけた領域をなくすには、0 (ゼロ) を指定する。
BorderWidth long 0 ワイプ パターンの端を囲む直線枠の幅。枠をなくすには、0 (ゼロ) を指定する。
MaskName string NULL NULL 以外の場合は、標準の組み込みワイプの代わりにワイプ マスクとして使用する JPEG ファイルの名前を指定する。ファイルには、モノクロで、ピクセル当たり 8 ビットの傾斜が含まれていなければならない。傾斜は、ワイプの進行を定義するマスクとして使用される。
MaskNum long 1 使用するワイプのスタイルを指定する SMPTE の標準ワイプ コード。ワイプ コードの一覧と関連する概略図については、SMPTE 文書 258M-1993 を参照のこと。
OffsetX long 0 イメージの中心点からワイプの開始点までの、水平方向のオフセット。MaskNum の値が 101 ~ 131 の場合にのみ有効である。
OffsetY long 0 イメージの中心点からワイプの開始点までの、垂直方向のオフセット。MaskNum の値が 101 ~ 131 の場合にのみ有効である。
ReplicateX long 0 ワイプ パターンを水平方向に繰り返す回数。MaskNum の値が 101 ~ 131 の場合にのみ有効である。
ReplicateY long 0 ワイプ パターンを垂直方向に繰り返す回数。MaskNum の値が 101 ~ 131 の場合にのみ有効である。
ScaleX long 0.0 ワイプを水平方向に伸縮する量。ワイプの元の定義に対する割合で指定する。MaskNum の値が 101 ~ 131 の場合にのみ有効である。
ScaleY long 0.0 ワイプを垂直方向に伸縮する量。ワイプの元の定義に対する割合で指定する。MaskNum の値が 101 ~ 131 の場合にのみ有効である。

次の XML コードは、Windows ムービー メーカーに収録されている SMPTE の標準ワイプを示しています。comment パラメータの値は、Windows ムービー メーカーのトランジション一覧に表示されるトランジション名です。

<TransitionDLL guid="{DE75D012-7A65-11D2-8CEA-00A0C9441E20}" 
  comment="DxtJpeg/SMPTE wipes">
   <Transition nameID="62826" iconid="41" comment="Reveal, Right|(smpte 
     1)">
      <Param name="MaskNum" value="1" />
   </Transition>
   <Transition nameID="62827" iconid="40" comment="Reveal, Down|(smpte 2)"
     >
      <Param name="MaskNum" value="2" />
   </Transition>
   <Transition nameID="62828" iconid="27" comment="Inset, Down
     Right|(smpte 3)">
      <Param name="MaskNum" value="3" />
   </Transition>
   <Transition nameID="62829" iconid="28" comment="Inset, Down Left|(smpte 
     4)" >
      <Param name="MaskNum" value="4" />
   </Transition>
   <Transition nameID="62830" iconid="25" comment="Inset, Up Left|(smpte 
     5)">
      <Param name="MaskNum" value="5" />
   </Transition>
   <Transition nameID="62831" iconid="24" comment="Inset, Up Right|(smpte 
     6)">
      <Param name="MaskNum" value="6" />
   </Transition>
   <Transition nameID="62832" iconid="50" comment="Split, Vertical|(smpte 
     21)" >
      <Param name="MaskNum" value="21" />
   </Transition>
   <Transition nameID="62833" iconid="22" comment="Split, 
     Horizontal|(smpte 22)">
      <Param name="MaskNum" value="22" />
   </Transition>
   <Transition nameID="62834" iconid="9" comment="Diagonal, Down 
     Right|(smpte 41)">
      <Param name="MaskNum" value="41" />
   </Transition>
   <Transition nameID="62835" iconid="51" comment="Bow Tie, 
     Vertical|(smpte 43)">
      <Param name="MaskNum" value="43" />
   </Transition>
   <Transition nameID="62836" iconid="23" comment="Bow Tie, 
     Horizontal|(smpte 44)">
      <Param name="MaskNum" value="44" />
   </Transition>
   <Transition nameID="62837" iconid="8" comment="Diagonal, Cross 
     Out|(smpte 47)">
      <Param name="MaskNum" value="47" />
   </Transition>
   <Transition nameID="62838" iconid="7" comment="Diagonal, Box Out|(smpte 
     48)">
      <Param name="MaskNum" value="48" />
   </Transition>
   <Transition nameID="62839" iconid="16" comment="Filled V, Down|(smpte 
     61)">
      <Param name="MaskNum" value="61" />
   </Transition>
   <Transition nameID="62840" iconid="15" comment="Filled V, Left|(smpte 
     62)">
      <Param name="MaskNum" value="62" />
   </Transition>
   <Transition nameID="62841" iconid="13" comment="Filled V, Up|(smpte 
     63)">
      <Param name="MaskNum" value="63" />
   </Transition>
   <Transition nameID="62842" iconid="14" comment="Filled V, Right|(smpte 
     64)">
      <Param name="MaskNum" value="64" />
   </Transition>
   <Transition nameID="62844" iconid="64" comment="Zig Zag, 
     Vertical|(smpte 73)">
      <Param name="MaskNum" value="73" />
   </Transition>
   <Transition nameID="62845" iconid="62" comment="Zig Zag, 
     Horizontal|(smpte 74)">
      <Param name="MaskNum" value="74" />
   </Transition>
   <Transition nameID="62846" iconid="39" comment="Rectangle, Out|(smpte 
     101)">
      <Param name="MaskNum" value="101" />
   </Transition>
   <Transition nameID="62847" iconid="11" comment="Diamond, Out|(smpte 
     102)">
      <Param name="MaskNum" value="102" />
   </Transition>
   <Transition nameID="62848" iconid="80" comment="Circle, Out, 
     Soft|(smpte 119)">
      <Param name="MaskNum" value="119" />
      <Param name="BorderSoftness" value="20" />
   </Transition>
   <Transition nameID="62849" iconid="81" comment="Circles, Out, 
     Soft|(smpte 119)">
      <Param name="MaskNum" value="119" />
      <Param name="ReplicateX" value="8" />
      <Param name="ReplicateY" value="6" />
      <Param name="BorderSoftness" value="75" />
   </Transition>
   <Transition nameID="62850" iconid="46" comment="Star, 5 Points|(smpte 
     128)">
      <Param name="MaskNum" value="128" />
      <Param name="BorderSoftness" value="20" />
   </Transition>
   <Transition nameID="62851" iconid="83" comment="Stars, 5 Points|(smpte 
     128)">
      <Param name="MaskNum" value="128" />
      <Param name="ReplicateX" value="5" />
      <Param name="ReplicateY" value="5" />
      <Param name="BorderSoftness" value="75" />
   </Transition>
   <Transition nameID="62852" iconid="18" comment="Heart|(smpte 130)">
      <Param name="MaskNum" value="130" />
      <Param name="BorderSoftness" value="20" />
   </Transition>
   <Transition nameID="62853" iconid="30" comment="Key Hole|(smpte 131)" >
      <Param name="MaskNum" value="131" />
      <Param name="BorderSoftness" value="20" />
   </Transition>
   <Transition nameID="62854" iconid="84" comment="Sweep, Diagonal|(smpte 
     226)">
      <Param name="MaskNum" value="226" />
   </Transition>
   <Transition nameID="62855" iconid="85" comment="Sweep, 
     Horizontal|(smpte 228)">
      <Param name="MaskNum" value="228" />
   </Transition>
   <Transition nameID="62856" iconid="82" comment="Fan, In, 
     Vertical|(smpte 231)">
      <Param name="MaskNum" value="231" />
   </Transition>
   <Transition nameID="62857" iconid="3" comment="Eye|(smpte 122)">
      <Param name="MaskNum" value="122" />
      <Param name="BorderSoftness" value="20" />
   </Transition>
   <Transition nameID="62858" iconid="86" comment="Swinging Door, 
     Bottom|(smpte 253)">
      <Param name="MaskNum" value="253" />
   </Transition>
   <Transition nameID="62859" iconid="87" comment="Windshield, Up|(smpte 
     262)">
      <Param name="MaskNum" value="262" />
   </Transition>
   <Transition nameID="62860" iconid="88" comment="Windshield, 
     Vertical|(smpte 263)" >
      <Param name="MaskNum" value="263" />
   </Transition>
   </TransitionDLL>
</Transitions>

車輪トランジション

車輪トランジションは、車輪スポーク型の回転ワイプを実現します。このトランジションは、次のパラメータを取ります。

パラメータ 既定値 範囲 説明
Spokes int 4 2 ~ 20 スポークの数。

次の XML code は、Windows ムービー メーカーに収録されている車輪トランジションを示しています。

<TransitionDLL guid="{5AE1DAE0-1461-11D2-A484-00C04F8EFB69}">
   <Transition nameID="62819" iconid="53" comment="Wheel, 4 spokes">
      <Param name="spokes" value="4" />
   </Transition>
</TransitionDLL>

WMTFX トランジションおよびエフェクト

Windows Media Transform Effect (WMTFX) は、渡されたパラメータで指定したコンポーネントから作成することができるエフェクトとトランジションのグループです。これらの WMTFX オブジェクトは、ほぼ等しい 2 つの COM オブジェクトを基にしています。ただし、1 つはトランジション用で (C63344D8-70D3-4032-9B32-7A3CAD5091A5)、もう 1 つはエフェクト用です (B4DC8DD9-2CC1-4081-9B2B-20D7030234EF)。各 COM オブジェクトが利用できるコンポーネント一覧は、同一です。WMTFX トランジションまたはエフェクトを作成する場合は、適切な GUID を指定する、エフェクトが <effect> ブロックの内部にあり、トランジションが <transition> ブロックの内部にある点に留意します。

WMTFX オブジェクトは、指定するクラスに基づいているという点で一意です。各クラスには、クラスが公開する特定のパラメータのセットがあります。エフェクトやトランジションは、単一のクラスにのみ基づくことができますが、一部の WMTFX クラスは複数のクラスに基づいており、クラスは自分のパラメータだけではなく、派生元のクラスのパラメータも公開します。次の表は、WMTFX クラスの名前と継承を示しています。

クラス 継承元
Standard なし。これは基本クラスである。
Hue Standard。
Simple3D なし。これは基本クラスである。
ParticleSystem Simple3D。

たとえば、ParticleSystem クラスに基づいたエフェクトは、ParticleSystem のパラメータと Simple3D のパラメータを公開します。

エフェクトやトランジションがこれらのクラスの 1 つに基づいている場合、最初の Param タグは name 属性を「InternalName」に設定し、value を使用する基本クラスに設定する必要があります。次のコードは、ParticleSystem オブジェクトを作成するコードで、この説明を示しています。

<Param name="InternalName" value=ParticleSystem />

注意   基本オブジェクトが指定されないと、既定のオブジェクトは not Standard になり、正しく動作しません。

エフェクトとトランジションのクラスとパラメータが同じであっても、トランジションには「verb」パラメータが設定されている必要があります。たとえば、エフェクトに Rotate2DA および Posterize パラメータを設定すると、画像は回転してポスター化されますが、トランジションの「verb」が指定されていないと、最初のクリップから次のクリップへの切り替えがスムーズに行われません。FadeStartA パラメータを設定した場合は、このパラメータに指定した時間にトランジションが起こります。

次の表は、各クラスがサポートする特定のパラメータを一覧表示しています (継承されたパラメータは含まない)。「A」または「B」がパラメータ名に含まれている場合、「A」は既存または前のクリップまたは画像を意味し、「B」は前のクリップまたは画像を置き換える新しいクリップまたは画像を意味します。

Standard クラスのパラメータ

パラメータ 既定値 範囲 説明
InternalName string なし なし このトランジションの基となるクラスを指定する。公開されるパラメータの一覧は、このクラスおよび派生元のその他すべてのクラスによって定義される。
Invert float なし 0.0 ~ 1.0 色反転により、255 から前の色値を引いた値である新しい色値を生成する。Invert パラメータに指定された値の 255 倍を上回る値のみが反転される。
Red float なし -1.0 ~ 1.0 色バランスを調整する。
Green float なし -1.0 ~ 1.0 色バランスを調整する。
Blue float なし -1.0 ~ 1.0 色バランスを調整する。
Cyan float なし -1.0 ~ 1.0 色バランスを調整する。Red が指定されると無視される。
Magenta float なし -1.0 ~ 1.0 色バランスを調整する。Green が指定されると無視される。
Yellow float なし -1.0 ~ 1.0 色バランスを調整する。Blue が指定されると無視される。
Brightness float なし 0.0 ~無限 各色チャンネルの値を指定された値で乗算し、輝度を調整する。これらの値は 0 以上である必要があり、通常は 1.0 前後。
Contrast float なし 0.0 ~無限 コントラストの調整により、中心点付近の各色チャンネルの範囲がシフトされる。これらの値は 0 以上である必要があり、通常は 1.0 前後。
Posterize int なし 0 ~ 255 この値は、ポスタリゼーション後に存続する必要のある色レベルの番号である。
Threshold float なし 0.0 ~ 1.0 しきい値フィルタリングの調整には、Threshold に指定された値の 255 倍を下回る値の各サンプル色チャンネルをゼロに設定する。この値と同等または上回る値を持つ各色チャンネルは、255 に設定する。
Gamma float なし 0.0 ~無限 ピクセルのガンマ補正。1.0 よりも下の値は暗くなり、1.0 よりも上の値は明るくなる。
ExponentialProgressDuration float 0.0 0.0 ~ 1.0 対数目盛で進行が発生する時間の長さで、0.0 から始まる。この時間の後は、進行は線形になる。
ExponentialProgressScale float 0.3 0.0 ~無限 式は次のとおり。LogrithmicScale = -log(1.0 - LinearProgress ) * ExponentialProgressScale
MirrorVertical bool false false または true true の場合、出力を上下逆に描く。
Desaturate bool false false または true true の場合、画像をグレースケール (白黒) に変換し、false の場合は、カラーに変換する。
Rotate2DA int 0.0 0.0 ~ 359.0 出力ビデオを回転する量。度で指定する。

Hue クラスのパラメータ

このクラスは、Standard クラスから継承し、Windows ムービー メーカーに収録されている色調サイクル エフェクトにのみ使用されます。このエフェクトは、ビデオのカラー スペクトルを循環します (つまり青、シアン、緑、黄、赤、マゼンダ、そして青に戻る)。ユーザーは、開始の色と終わりの色を 0 ~ 1 のスケールで選択でき、ここで 0 と 1 はこのパスではともに青です。

パラメータ 既定値 範囲 説明
Value float 0.0 0.0 ~ 1.0 スケールの開始の色で、0 は青、0.5 は黄、1 も青。
EndValue float なし 0.0 ~ 1.0 スケールの終わりの色で、0 は青、0.5 は黄、1 も青。Value を指定すると、EndValue も指定する必要があり、指定しないとエフェクトが動作しない。

Simple3D クラスのパラメータ

このクラスは、どのクラスにも基づいていません。

パラメータ 既定値 範囲 説明
MoveA string なし left、right、up、down 1 つ目のビデオをプロパティの方向 (左、右、上、下、中、または外) にスライドする。
MoveSpeedA float 1.0 0.0 ~無限 MoveA パラメータに適用される速度。
RotateA string なし left、right、up、down 1 つ目のビデオの回転方向。
ScaleA string なし Smaller、Bigger、または float > 0 元のビデオと比較した最終的なビデオ サイズ。「Smaller」と「Bigger」は、一般的な比較値だが、浮動小数点数はサイズの乗数である (1.0 の場合は、最終的なサイズが元のサイズと同じになる)。
InitialScaleA string 1.0 Smaller、Bigger、または float > 0 元のビデオと比較した初期のビデオ サイズ。「Smaller」と「Bigger」は、一般的な比較値だが、浮動小数点数はサイズの乗数である (1.0 の場合は、初期のサイズが元のサイズと同じになる)。
RotateCenterA string なし lowerright のみ 1 つ目のビデオの回転中心。
ZScaleAStart string なし 0.0 ~ 1.0 X 軸がスケーリングを停止し、Z 軸が開始する時間。
ShowAFront bool true true または false このパラメータが true の場合、1 つ目のビデオの前の多角形がレンダリングされる。
ShowABack bool false true または false このパラメータが true の場合、1 つ目のビデオの後ろの多角形がレンダリングされる。
ShowBFront bool true true または false このパラメータが true の場合、2 つ目のビデオの前の多角形がレンダリングされる。
ShowBBack bool false true または false このパラメータが true の場合、2 つ目のビデオの後ろの多角形がレンダリングされる。
RevolveCamera string なし true またはなし true の場合、カメラがワールド座標の x 軸を中心として回転する。このパラメータに任意の値が渡された場合、この値は true に設定される。
PageCurlA string なし lowerright、lowerleft、upperleft、upperright、right、left、upper、または lower ページ カールが開始する場所。
FadeStartA float なし 0.0 ~ 1.0 1 つ目のビデオのフェード アウトが開始する時間。

ParticleSystem クラスのパラメータ

このクラスは、Simple3D クラスから継承します。これらのエフェクトにより、イメージを回転する 3D 粒子 (正方形または長方形) に分割することができます。これらの粒子は、任意の方向に移動することができます。

パラメータ 既定値 範囲 説明
ScatterDirection string なし left、right、up、down、in、out 1 つ目のビデオの粒子が移動する方向。ここで、「in」は見ている人に向かってくるように移動し、「out」は見ている人から遠ざかるように移動する。複数の方向を選択することができる。したがって、「up、left」を選択すると、粒子は画面の左上に移動する。
ParticleSpeed float 1.0 > 0 粒子が移動する速度。
SpinDirection string なし left、right、up、down、in、out 1 つ目のビデオの粒子の回転方向。ここで、「in」は画面側に回転し、「out」は画面に対して逆向きに回転する。選択できる方向は 1 つのみ。
ParticleSpinSpeed float 1.0 > 0 粒子の回転速度。
MaxParticles int 100 3 ~ 1000 シーンの粒子の最大数。
Gravity float 0.0 0 ~ 8 粒子の垂直加速度。
RandomizeSpeed float 1.0 -∞ ~ +∞ ランダム化の乗数。0 (ゼロ) に設定すると、すべての粒子の速度が一定になる。
BothDirections bool false true または false true の場合、粒子は同じ割合で両方向に移動する。

次の XML コードは、Windows ムービー メーカーに収録されているすべての WMTFX トランジションとエフェクトを記述したものです。comment パラメータの値は、通常 Windows ムービー メーカーのトランジションまたはエフェクト一覧に表示される名前です。

WMTFX トランジション

<TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}">
   <Transition nameID="62800" iconid="91" comment="Flip, right">
      <Param name="InternalName" value="Simple3D" />
      <Param name="RevolveCamera" value="true" />
      <Param name="ShowAFront" value="true" />
      <Param name="ShowABack" value="false" />
      <Param name="ShowBFront" value="false" />
      <Param name="ShowBBack" value="true" />
   </Transition>
   <Transition nameID="62801" iconid="72" comment="Slide, up">
      <Param name="InternalName" value="Simple3D" />
      <Param name="MoveA" value="up" />
   </Transition>
   <Transition nameID="62802" iconid="73" comment="Slide up, center">
      <Param name="InternalName" value="Simple3D" />
      <Param name="MoveA" value="up" />
      <Param name="ScaleA" value="smaller" />
      <Param name="MoveSpeedA" value="0.75" />
   </Transition>
   <Transition nameID="62803" iconid="70" comment="Roll, right">
      <Param name="InternalName" value="Simple3D" />
      <Param name="RotateA" value="right" />
      <Param name="RotateCenterA" value="lowerright" />
   </Transition>
   <Transition nameID="62804" iconid="74" comment="Spin out, left">
      <Param name="InternalName" value="Simple3D" />
      <Param name="ScaleA" value="smaller" />
      <Param name="RotateA" value="left" />
      <Param name="FadeStartA" value="0.2" />
   </Transition>
   <Transition nameID="62805" iconid="89" comment="Page Curl, lower left">
      <Param name="InternalName" value="Simple3D" />
      <Param name="PageCurlA" value="lowerleft" />
      <Param name="ShowABack" value="true" />
   </Transition>
   <Transition nameID="62806" iconid="90" comment="Page Curl, lower 
     right">
      <Param name="InternalName" value="Simple3D" />
      <Param name="PageCurlA" value="lowerright" />
      <Param name="ShowABack" value="true" />
      <Param name="FadeStartA" value="0.8" />
   </Transition>
   <Transition nameID="62807" iconid="77" comment="Shatter, Right">
      <Param name="InternalName" value="ParticleSystem" />
      <Param name="ScatterDirection" value="right" />
      <Param name="SpinDirection" value="right" />
      <Param name="MaxParticles" value="200" />
   </Transition>
   <Transition nameID="62808" iconid="78" comment="Shatter, up left">
      <Param name="InternalName" value="ParticleSystem" />
      <Param name="ScatterDirection" value="up, left" />
      <Param name="MaxParticles" value="64" />
      <Param name="ExponentialProgressDuration" value="0.4" />
      <Param name="ExponentialProgressScale" value="0.33" />
   </Transition>
   <Transition nameID="62809" iconid="76" comment="Shatter, in">
      <Param name="InternalName" value="ParticleSystem" />
      <Param name="ScatterDirection" value="in" />
      <Param name="MaxParticles" value="600" />
      <Param name="SpinDirection" value="right" />
      <Param name="ParticleSpeed" value="40.0" />
      <Param name="ParticleSpinSpeed" value="0.5" />
      <Param name="ExponentialProgressDuration" value="0.9" />
      <Param name="ExponentialProgressScale" value="0.25" />
   </Transition>
   <Transition nameID="62810" iconid="75" comment="Whirlwind, Fade">
      <Param name="InternalName" value="ParticleSystem" />
      <Param name="MaxParticles" value="200" />
      <Param name="SpinDirection" value="right" />
      <Param name="BothDirections" value="true" />
   </Transition>
   <Transition nameID="62811" iconid="79" comment="Shatter, up right">
      <Param name="InternalName" value="ParticleSystem" />
      <Param name="MaxParticles" value="700" />
      <Param name="ScatterDirection" value="up, right" />
      <Param name="BothDirections" value="true" />
   </Transition>
   <Transition nameID="62812" iconid="71" comment="Shrink vertical, then 
     horizontal">
      <Param name="InternalName" value="Simple3D" />
      <Param name="ScaleA" value="smaller" />
      <Param name="ZScaleAStart" value="0.5" />
      <Param name="FadeStartA" value="0.5" />
   </Transition>
</TransitionDLL>

WMTFX エフェクト

<EffectDLL guid="{B4DC8DD9-2CC1-4081-9B2B-20D7030234EF}">
   <Effect nameID="62863" iconid="25" comment="Sepia tone">
      <Param name="InternalName" value="Standard" />
      <Param name="Desaturate" value="true" />
      <Param name="Red" value="0.10" />
      <Param name="Magenta" value="0.09" />
      <Param name="Yellow" value="0.25" />
      <Param name="contrast" value="1.0" />
   </Effect>
   <Effect nameID="62864" iconid="18" comment="Negative">
      <Param name="InternalName" value="Standard" />
      <Param name="Invert" value="-1.0" />
   </Effect>
   <Effect nameID="62865" iconid="20"  comment="Posterize">
      <Param name="InternalName" value="Standard" />
      <Param name="Posterize" value="6" />
   </Effect>
   <Effect nameID="62866" iconid="29" comment="Threshold">
      <Param name="InternalName" value="Standard" />
      <Param name="Threshold" value="0.5" />
   </Effect>
   <Effect nameID="62867" iconid="16" comment="Hue, Cycles Entire Color 
     Spectrum">
      <Param name="InternalName" value="Hue" />
      <Param name="Value" value="0.0" />
      <Param name="EndValue" value="1.0" />
   </Effect>
   <Effect nameID="62868" iconid="33" comment="Ease In">
      <Param name="InternalName" value="Simple3D" />
      <Param name="ScaleA" value="bigger" />
      <Param name="ExponentialProgressDuration" value="0.01" />
   </Effect>
   <Effect nameID="62869" iconid="34" comment="Ease Out">
      <Param name="InternalName" value="Simple3D" />
      <Param name="ScaleA" value="smaller" />
      <Param name="InitialScaleA" value="bigger" />
      <Param name="ExponentialProgressDuration" value="0.01" />
   </Effect>
   <Effect nameID="62870" iconid="35" comment="Mirror, Vertical">
      <Param name="InternalName" value="Standard" />
      <Param name="MirrorVertical" value="true" />
   </Effect>
   <Effect nameID="62871" iconid="24" comment="Rotate 90">
      <Param name="InternalName" value="Standard" />
      <Param name="Rotate2DA" value="90" />
   </Effect>
   <Effect nameID="62872" iconid="22" comment="Rotate 180">
      <Param name="InternalName" value="Standard" />
      <Param name="Rotate2DA" value="180" />
   </Effect>
   <Effect nameID="62873" iconid="23" comment="Rotate 270">
      <Param name="InternalName" value="Standard" />
      <Param name="Rotate2DA" value="270" />
   </Effect>
</EffectDLL>

ぼかしエフェクト

ぼかしエフェクトは、ユーザーが定義する量でイメージをぼかします。このエフェクトは、次のパラメータを取ります。

パラメータ 既定値 範囲 説明
PixelRadius float 2.0 0.0 ~ 25 値が大きくなるほど、画像のぼかしが強くなる。

次の XML コードは、Windows ムービー メーカーに収録されているぼかしエフェクトを示しています。

<EffectDLL guid="{7312498D-E87A-11D1-81E0-0000F87557DB}" comment="Blur">
   <Effect nameID="62890" iconid="30" comment="Blur">
      <Param name="PixelRadius" value="2.5" />
   </Effect>
</EffectDLL>

輝度エフェクト

輝度エフェクトは、ビデオのセグメントの輝度を修正します。このエフェクトは、次のパラメータを取ります。

パラメータ 既定値 範囲 説明
Brightness long 0 -255 ~ 255 輝度を修正する量。ここで、ゼロは無変化である。

次の XML コードは、Windows ムービー メーカーに収録されている輝度エフェクトを示しています。

<EffectDLL guid="{5A20FD6F-F8FE-4a22-9EE7-307D72D09E6E}">
   <Effect nameID="62881" iconid="7" comment="Brightness increase">
      <Param name="Brightness" value="25" />
   </Effect>
   <Effect nameID="62882" iconid="6" comment="Brightness decrease">
      <Param name="Brightness" value="-25" />
   </Effect>
</EffectDLL>

フェード エフェクト

フェード エフェクトにより、クリップが選択した単色からフェード インまたは単色にフェード アウトします。このエフェクトは、次のパラメータを取ります。

パラメータ 既定値 範囲 説明
FadeIn bool 0 0 または 1 0 は、クリップが単色フェード アウトし、1 は単色からフェード インする。
FadeColor long 0 0 ~ 0xFFFFFF 値は、2 進数または 16 進数。16 進数では、値は 0xBBGGRR 形式で、青、緑、および赤の値を示している (これはミスプリントではない。青の値を最初に指定する必要がある)。

次の XML コードは、Windows ムービー メーカーに収録されているフェード エフェクトを示しています。

<EffectDLL guid="{EC85D8F1-1C4E-46e4-A748-7AA04E7C0496}">
   <Effect nameID="62877" iconid="11" comment="Fade Out, To black">
      <Param name="FadeIn" value="0" />
      <Param name="FadeColor" value="0" />
   </Effect>
   <Effect nameID="62878" iconid="9" comment="Fade in, from black">
      <Param name="FadeIn" value="1" />
      <Param name="FadeColor" value="0" />
   </Effect>
   <Effect nameID="62879" iconid="12" comment="Fade Out, to white">
      <Param name="FadeIn" value="0" />
      <Param name="FadeColor" value="16777215" />
   </Effect>
   <Effect nameID="62880" iconid="10" comment="Fade in, to white">
      <Param name="FadeIn" value="1" />
      <Param name="FadeColor" value="16777215" />
   </Effect>
</EffectDLL>

フィルム時代エフェクト

フィルム時代エフェクトは、フィルムが年代物のように見える粒子の荒れ、傷、およびその他の人工的な可視的効果を適用します。このエフェクトは、次のパラメータを取ります。

パラメータ 既定値 範囲 説明
Age long 0 0 ~ 100 フィルムをエージングする「年数」。

Age パラメータは、実際は個別の 10 個のパラメータの組み合わせです。Age パラメータを使用せずに、これらのパラメータを個々に設定することができます。次の表は、Age に含まれているパラメータを示しています。

パラメータ 既定値 範囲 説明
BlurAmount long 0 0 ~ 255 値が高くなるほど、イメージのぼけが強くなる。
EdgeFade long 0 0 ~ 255 値が高くなるほど、境界線がぼやける。
FilmJerkiness long 0 0 ~ 255 フィルムの動きの不自然さの程度。ここで、0 は最小で 255 は最大である。
FlickerFrequency long 0 0、1 ~ 255 このエフェクトは、規則正しく間隔をあけて配置された干渉フレームの暗さを設定する。ここで、値が低いほど干渉フレームは暗くなり、イメージにちらつきが現れる。ゼロはちらつきなし。
FrameSkips long 0 0 ~ 255 次のフレームを表示する前にスキップするフレームの数。
Grey bool false true、false true は、グレースケール (白黒) イメージ。
LineFrequency long 0 0 ~ 255 イメージに発生させる、白の移動する「亀裂」すなわち線の度合い。ここで、0 は最少数の線が発生し、255 は最大数の線が発生する。
LintFrequency long 0 0 ~ 255 画面に現れる「ほこり」または「裂傷」の度合い。ここで、0 は最小であり、255 は最大である。
NoiseFrequency long 0 0 ~ 255 イメージにノイズを追加する。ここで、0 は最小限のノイズを生成し、255 は最大限のノイズを生成する。
PosterizeBits long 0 0 ~ 8 イメージに適用するポスタリゼーションの量。ここで、0 は最少であり、8 は最大である。

次の XML コードは、Windows ムービー メーカーに収録されているフィルム時代エフェクトを示しています。

<EffectDLL guid="{ADEADEB8-E54B-11d1-9A72-0000F875EADE}">
   <Effect nameID="62874" iconid="4" comment="Film Age, Oldest">
      <Param name="Age" value="90" />
   </Effect>
   <Effect nameID="62875" iconid="3" comment="Older">
      <Param name="Age" value="60" />
   </Effect>
   <Effect nameID="62876" iconid="2" comment="Old">
      <Param name="Age" value="30" />
   </Effect>
</EffectDLL>

フィルタ エフェクト

フィルタ エフェクトは、印刷メディアに関連するさまざまなエフェクトを提供します。各エフェクトには、関連するさまざまなパラメータがあり、総称である Control1ValueControl8Value で渡されます。すべてのパラメータがエフェクトに使用されるわけではありません。エフェクトは、組み合わせることはできません。次の表は、全エフェクトのパラメータを示しています。

パラメータ 既定値 範囲 説明
EffectID long 0 0 または 1 使用するエフェクトの ID。次の表で説明。
Control1Value

から

Control8Value

long エフェクトによって異なる。 0 または 1 エフェクトの最大 8 つの独自のパラメータ
Transparency long 0 0 ~ 100 追加したエフェクトの透明度。値が高くなるほど、透明度が増す。
RGBForeColor string black Internet Explorer が受け付ける HTML の標準色文字列 EffectID に依存。
RGBBackColor string white Internet Explorer が受け付ける HTML の標準色文字列 EffectID に依存。
RGBExtraColor string black Internet Explorer が受け付ける HTML の標準色文字列 EffectID に依存。
TextureURL string なし Internet Explorer が受け付ける HTML の標準色文字列 ConteCrayon、RoughPastel、Texturizer、および Underpainting の各エフェクトに適用する。

次の表は、EffectID パラメータで指定できるエフェクトを一覧表示しています。

EffectID エフェクト名
0 なし
1 Accents
2 AngledStrokes
3 BasRelief
4 Mosaic
5 ChalkAndCharcoal
6 Charcoal
7 Chrome
8 ColoredPencil
9 Craquelure
10 Crosshatch
11 Cutout
12 DarkStrokes
13 DiffuseGlow
14 DryBrush
15 Emboss
16 FilmGrain
17 InkOutline
18 NotePaper
19 Fresco
20 GlowingEdges
21 Grain
22 HalftoneScreen
23 Patchwork
24 NeonGlow
25 PaintDaubs
26 PaletteKnife
27 Plaster
28 PlasticWrap
29 PosterEdges
30 Ripple
31 Reticulation
32 SmudgeStick
33 Sponge
34 SprayedStrokes
35 Stamp
36 Photocopy
37 Sumie
38 GraphicPen
39 TornEdges
40 Watercolor
41 WaterPaper
42 StainedGlass
43 Glass
44 Texturizer
45 Underpainting
46 ConteCrayon
47 RoughPastel
48 Spatter

次の XML コードは、Windows ムービー メーカーに収録されているフィルタ エフェクトを示しています。

<EffectDLL guid="{E673DCF2-C316-4c6f-AA96-4E4DC6DC291E}" >
   <Effect nameID="62886" iconid="13">
      <Param name="EffectID" value="16" comment="Film Grain" />
      <Param name="Control1Value" value="4" />
      <Param name="Control2Value" value="0" />
      <Param name="Control3Value" value="10" />
   </Effect>
   <Effect nameID="62887" iconid="27" comment="Smudge Stick">
      <Param name="EffectID" value="32" />
      <Param name="Control1Value" value="2" />
      <Param name="Control2Value" value="0" />
      <Param name="Control3Value" value="10" />
   </Effect>
   <Effect nameID="62888" iconid="14" comment="Graphic Pen">
      <Param name="EffectID" value="38" />
      <Param name="Control1Value" value="15" />
      <Param name="Control2Value" value="0" />
      <Param name="Control3Value" value="40" />
   </Effect>
   <Effect nameID="62889" iconid="30" comment="Watercolor">
      <Param name="EffectID" value="40" />
      <Param name="Control1Value" value="9" />
      <Param name="Control2Value" value="1" />
      <Param name="Control3Value" value="1" />
   </Effect>
  </EffectDLL>

ミラー イメージおよびグレースケール エフェクト

このオブジェクトは、ミラー イメージの作成およびカラー イメージからグレイスケールへの変換の 2 つの機能を提供します。このオブジェクトは、次のパラメータを取ります。

パラメータ 既定値 範囲 説明
Mirror Long 0 0 または 1 1 の値は、画像が左右に反転される。
GrayScale Long 0 0 または 1 1 の値は、カラーがグレースケールに変換され、白黒イメージを生成する。

次の XML コードは、Windows ムービー メーカーに収録されているミラー イメージおよびグレースケール エフェクトを示しています。

<EffectDLL guid="{16B280C8-EE70-11D1-9066-00C04FD9189D}">
   <Effect nameID="62884" iconid="17" comment="Mirror, Horizontal">
      <Param name="Mirror" value="1" />
   </Effect>
   <Effect nameID="62885" iconid="15" comment="Grayscale">
      <Param name="Grayscale" value="1" />
   </Effect>
</EffectDLL>

モザイク エフェクト

モザイク エフェクトにより、イメージの粒子が単色の正方形に粗大化し、各正方形はその領域の元のピクセルの平均色を示します。このエフェクトは、次のパラメータを取ります。

パラメータ 既定値 範囲 説明
MaxSquare Long 50 2 ~ 50 値が大きいほど、正方形が大きくなり画像が荒くなる。

次の XML コードは、Windows ムービー メーカーに収録されているモザイク エフェクトを示しています。

<EffectDLL guid="{4CCEA634-FBE0-11D1-906A-00C04FD9189D}" 
  comment="Pixelate">
   <Effect nameID="62818" iconid="19" comment="Pixelate">
      <Param name="MaxSquare" value="25" />
   </Effect>
</EffectDLL>

スピード エフェクト

スピード エフェクトは、ビデオ再生の速度を調節します。これらのエフェクトは、一時停止や逆回しの動きには使用できません。これらのエフェクトは、実際の GUID に拘束されませんが、NULL GUID が渡されます。スピード エフェクトにより、フレームがスキップします。したがって、大きすぎる値を選択すると思わしくない結果となります。このエフェクトは、次のパラメータを取ります。

パラメータ 既定値 範囲 説明
Speed float 1.0 0.0 より上の値 1.0 の値は、通常の速度で、1.0 より下の値は速度が遅くなり、1.0 より上の値は速度が速くなる。

次の XML コードは、Windows ムービー メーカーに収録されているスピード エフェクトを示しています。

<EffectDLL guid="{00000000-0000-0000-0000-000000000000}">
   <Effect nameID="62861" iconid="32" speed="2.0" comment="Speed
     up"></Effect>
   <Effect nameID="62862" iconid="31" speed="0.5" comment="Slow
     down"></Effect>
</EffectDLL>

Windows ムービー メーカーへの独自のアイコンの追加

独自のアイコンを Windows ムービー メーカーの独自のエフェクトやトランジションに付けることができます。これらのアイコンは、C++ プロジェクトのリソース ファイルとして作成され、DLL にコンパイルされます。独自のトランジションやエフェクトのコードを生成していないと、プロジェクトにはアイコンのリソース ファイルのみが含まれます。

Windows ムービー メーカーでは、側面で連結された 1 つ以上のアイコンからなる単一のビットマップ イメージを使用することができます。Windows ムービー メーカーは、イメージを幅 96 ピクセル、高さ 84 ピクセルのセグメントに自動的にカットし、各セグメントが 1 つのアイコンになります。上部と下部の 6 ピクセルは、イメージのパディング用に空白となり、表示されるアイコンのサイズを 96 x 72 (3 x 4) のセグメントに切り取ります。Windows ムービー メーカーは、各セグメントに 0 から始まり 1 ずつ増加する識別番号を割り当てます。この識別番号は、アイコンがストリップの「何番目」であるかを示しています。XML ファイルで、各エフェクトに使用するアイコンを指定します。すべての独自のアイコンまたは Windows ムービー メーカーのすべての標準アイコンを使用することができますが、独自のアイコンとムービー メーカーの標準アイコンを併用することはできません。次の図は、アイコンのビットマップ イメージのストリップのレイアウトを示しています。

ms867186.moviemakersfx1(ja-jp,MSDN.10).gif

図 1. Windows ムービー メーカーはこのビットマップ イメージのストリップに 5 つのアイコンがあることを認識します。

上の図で、エフェクトまたはトランジションは顔文字アイコンに iconid = 0 を設定し、太陽のアイコンには 4 を設定しています。

アイコンのストリップを作成する場合、上部と下部の 6 ピクセルは純粋な白である必要があります。その理由は、ストーリーボードに表示する 4 x 3 の縮小版を生成するためにこのマージンは切り取られるからです。純粋な白 (255,255,255) は、表示されると透明になります。

独自のアイコンを追加するには、TransitionsAndEffects タグに次の 2 つの属性を追加する必要があります。

  • SpecialIconFileID   独自のアイコンを含める場合にのみ XML ファイルで使用される属性です。この属性は、1 ~ 8192 までの一意の番号である必要があります。この番号は、Windows ムービー メーカーのすべての独自の XML ファイルの SpecialIconFileID 属性において一意である必要があります。そうでなければ意味を成しません。
  • SpecialIconResourceID   独自のアイコンを含める場合にのみ XML ファイルで使用される属性です。この属性は、独自の DLL 内のアイコン ビットマップ リソースに割り当てられる番号です。この番号は、リソース ファイルの Visual Studio プロジェクトで見つけることができます。

次の XML コードは、独自のアイコンを指定するコードです。

<TransitionsAndEffects Version="1.0" SpecialIconFileID="22"
  SpecialIconResourceID="101">

独自のエフェクトおよびトランジション用の独自のアイコンを作成するには、以下の手順に従います。

  1. Visual Studio を開き、新しい C++ プロジェクトを作成します。アイコンを保持するための DLL を作成するだけであれば、新しい Win32 プロジェクトを作成します。設定を求められたら、DLL にコンパイルする空のプロジェクトを選択します。

  2. プロジェクトに新しいリソースを追加します。リソースの種類を求められたら、「ビットマップ」を選択します。

  3. リソース エディタにビットマップを描画またはインポートします。アイコンの最大サイズは、幅 96 ピクセル、高さ 84 ピクセルです (上部と下部の 6 ピクセルの白のバッファを含む)。Windows ムービー メーカーは、下部の左端からイメージを計測します。イメージの高さがオーバーしていると、オーバーしている部分が切り取られ、イメージの幅がオーバーしていると、オーバーしている部分は次に高さの高いアイコンに割り当てられます。イメージの幅が 96 ピクセルに満たない場合、次のアイコンの一部がこのアイコンに含まれます。これらの 幅 96 ピクセルのウィンドウに必要な数のアイコン イメージを挿入します。

  4. resource.h ファイルのビットマップに割り当てられる ID に注意します。この ID は、SpecialIconResourceID 属性に割り当てられます。たとえば、次の行は、識別子として 101 が割り当てられたビットマップを示しています。

    #define IDB_BITMAP1                     101
    
  5. DLL をコンパイルし、XML ファイルと一緒に \AddOnTFX フォルダに置きます。イメージの DLL は、アイコンを使用する XML ファイルと同じ名前である必要があります。たとえば、DLL が MyIcons.dll の場合、XML ファイルは MyIcons.xml となります。

  6. XML ファイルで、SpecialIconFileID 属性を TransitionsAndEffects XML タグに追加し、1 ~ 8192 までの一意の整数を割り当てます。この番号値は、別の XML エフェクト ファイルがこの番号を識別用に使用しない限り重要ではありません。

  7. SpecialIconResourceID 属性を TransitionsAndEffects タグに追加し、Visual Studio がビットマップに割り当てた番号を割り当てます。手順 4 で示すように、この例では 101 です。

  8. トランジションまたはエフェクトの各 XML ブロックで、iconid 属性を Transition タグに追加し、アイコンが配置されるビットマップへのオフセット (0 から始まる) を選択します。これらの番号は、連続している必要はなく、リージョンはスキップされる場合があります。

次の XML の抜粋は、ビットマップ イメージの 1 つ目と 3 つ目のアイコン (DLL からの ID は 101、ファイルに割り当てられた一意の ID は 22) を使用する 2 つの独自のトランジションを示しています。

<TransitionsAndEffects Version="1.0" SpecialIconFileID="22" 
  SpecialIconResourceID="101">
   <Transitions>
      <TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}">
         <Transition name="Grow, custom icon 1" iconid="0">
            <Param name="InternalName" value="Simple3D" />
            <Param name="ScaleA" value="bigger" />
            <Param name="ExponentialProgressDuration" value="3.0" />
            <Param name="ExponentialProgressScale" value="1.0" />
         </Transition>
      </TransitionDLL>
      <TransitionDLL guid="{C63344D8-70D3-4032-9B32-7A3CAD5091A5}">
         <Transition name="Grow, custom icon 3" iconid="2">
            <Param name="InternalName" value="Simple3D" />
            <Param name="ScaleA" value="bigger" />
            <Param name="ExponentialProgressDuration" value="3.0" />
            <Param name="ExponentialProgressScale" value="2.0" />
         </Transition>
      </TransitionDLL>
   </Transitions>
</TransitionsAndEffects>

注意   XML ファイル名と DLL ファイル名は、DLL がイメージの保持用にのみ使用されている場合に限り一致する必要があります。DLL がイメージを保持していない場合 (DLL が独自のエフェクトやトランジションのオブジェクトを保持しているような場合)、ファイル名は一致しなくてもかまいません。

トランジションおよびエフェクトの新しいオブジェクトの作成

既存のトランジションとエフェクトを修正するだけでなく、完全に新しいトランジションとエフェクトを作成することができます。DirectX Transform (DXT) と呼ばれるこれらのオブジェクトには、COM、DirectX、および ATL プログラミングの豊富な知識が必要であり、この節ではごく簡単に説明します。DXT に関する文書の詳細については、「詳細について」を参照してください。

このダウンロードには、トランジションとエフェクトの新しいオブジェクトの作成時に使用できる 2 つの Visual Studio プロジェクトが含まれています。1 つは、Visual Studio .NET 用で、もう 1 つは Visual Studio 6.0 用です。バージョン 6.0 のプロジェクトを使用する場合は、さらに Microsoft DirectX 7.0 SDK をインストールしてプロジェクトに必要なヘッダーを取得する必要があります。Microsoft DirectX 7.0 SDK は、「詳細について」の節に記載されている場所から入手することができます。

また、どちらのプロジェクトを使用する場合でも、Microsoft DirectX Media SDK をインストールする必要があります。

この文書に関連するダウンロード可能な実行可能ファイルは、自己展開型のファイルとフォルダのグループです。ダウンロードしたプロジェクトには、次のファイルが含まれています。

  • 複数のサンプル エフェクトのコードを含む C++ プロジェクト ファイル
  • これらのエフェクトといくつかの追加エフェクトを Windows ムービー メーカーに読み込むための XML ファイル
  • 各ファイルの内容を説明する Readme.txt
  • インストール手順を説明する HowToInstall.txt
  • このプロジェクトで作成する DLL のコンパイル済みサンプルである MMSTFX.dll

自己展開型のプログラムを実行すると、プロジェクトとテキスト ファイルを含む最上位の MMSTFX フォルダ、DLL を含む MMSTFX\Bin フォルダ、および XML ファイルを含む MMSTFX\XML フォルダが作成されます。

サンプルの C++ コードにより、MMSTFX.dll という DLL に新しいエフェクト (Blue Adjust) と新しいトランジション (Melt) が作成されます。また、Windows ムービー メーカーに収録されているエフェクトを修正する XML ファイルが含まれます。これらの「新しい」エフェクトには、「Page Curl, Down Left」、「Page Curl, Down Right」、「Blur, Super」、「Brightness, Super Increase」、「Brightness, Super Decrease」、および「Whirlwind, Down, Small Blocks」が含まれています。これらのオブジェクトの詳細については、ダウンロードに含まれている ReadMe.txt ファイルを参照してください。

Visual Studio 6.0 で新しいオブジェクトを開くには、MMSTFX.dsp ファイルをダブルクリックします。Visual Studio の .NET でプロジェクトを開くには、MMSTFX.vcproj ファイルをダブルクリックします。

注意   DXTrans.idl をコンパイルできない旨のエラー メッセージが表示された場合は、コンピュータの DXMedia\include フォルダへのパスが指定されていることを確認してください。このパスは、[ツール] > [オプション] > [プロジェクト] > [VC++ ディレクトリ] ダイアログ ボックスで指定する必要があります。

サンプルの DLL を開いてコンパイルしたら、プログラムをデバッグ モードで実行することができます。プロジェクトに Windows ムービー メーカーのプログラムのデバッグ記号が含まれていない旨の警告ダイアログ ボックスが表示されますが、[OK] をクリックします。アタッチするプログラムを聞かれたら、moviemk.exe プログラム ファイル検索して選択します。

サンプル コードの概要

次の図は、サンプル コードに含まれている重要なクラスを示しています。

拡大イメージはここをクリックしてください

図 2. サンプル ファイルのクラスおよびオブジェクトの概要 (拡大イメージは縮小版をクリックしてください)

次に、サンプル コードのクラスとオブジェクトについて説明します。

CMMSampleEffect および CMMSampleTransition

これらは、エフェクトおよびトランジションの最上位の DXT クラスのサンプルです。CMMSampleEffect は、Blue Adjust サンプル エフェクトを実装し、CMMSampleTransition は、Melt サンプル トランジションを実装しています。これらのクラスを修正して、サンプルを変更することができます。または、これらのクラスをコピーおよび修正して新しいエフェクトやトランジションを作成することもできます。Windows ムービー メーカーは、各クラスに割り当てられる GUID を使用して COM とともにこれらのクラスを作成します。これらのクラスは、ヘルパー オブジェクトを作成し、CreateSpecialEffectByName を呼び出すことによってビデオを処理します。CMMSampleEffectCMMSpecialEffect を生成し、CMMSampleTransitionCMMSimple3DSpecialEffect を生成します。入力バッファの既定値は 1 (エフェクトに唯一許可されている番号) ですが、CMMSampleTransition によって、この番号は 2 (トランジションの正しい番号) に増えます。

CMMSpecialEffectDXT

Windows ムービー メーカーとビデオ処理クラス (CMMSpecialEffect またはこのクラスの継承クラス) 間の通信とバッファ操作を処理します。

CVideoPlane

これは、入力ビデオを単一の面に描画するための 3D エフェクトが使用するツール クラスです。

CMMSpecialEffect

これは、2D エフェクトおよびトランジションで使用されるグラフィック オブジェクトの基本クラスです。Blue Adjust サンプル エフェクトは、このクラスを直接使用し、ビデオに青色を着色します。Melt サンプル トランジションは、3D 操作に最適な派生クラスの CMM3DSpecialEffect を使用します。2D エフェクトまたはトランジションを作成する場合は、このクラスから継承し、Execute メソッドを上書きします。

CMM3DSpecialEffect

これは、3D エフェクトまたはトランジションの基本クラスです。このクラスは、出力バッファにテクスチャとレンダリング面を作成します。新しいエフェクトまたはトランジションを作成するには、CreateSceneRenderSceneReleaseSceneCreateSurfacesRestoreSurfaces、および ReleaseSurfaces メソッドを上書きします。CMMSpecialEffect から上書きした Execute メソッドは、低レベルのロジックを処理するので、上書きしないようにします。新しいエフェクトまたはトランジションを修正および作成するには、RenderScene を上書きする必要があります。CMM3DSpecialEffect は、3D オブジェクトのレンダリングは実行しません。3D オブジェクトのレンダリングは、CSimple3DSpecialEffect が実行します。

CSimple3DSpecialEffect

3D エフェクトおよびトランジションのレンダリングに使用される最上位クラスです。このクラスは、Melt サンプル トランジションのレンダリングを実行します。また、基本クラスのいくつかの関数を上書きし、CVideoPlane に基づいたヘルパー オブジェクトを作成します。Direct3D ベースの新しいエフェクトまたはトランジションを作成するには、このクラスを修正するか、このクラスを継承して新しいクラスを作成します。

新しいエフェクトの作成

独自のエフェクトやトランジションを開発するための良い方法は、サンプルに含まれているコードから始めることです。Blue Adjust エフェクトを独自のエフェクトと置き換えるには、まず最初に CMMSpecialEffect.cpp および CMMSpecialEffect.h ファイルを参照します。Initialize および Terminate メソッドは、エフェクトの有効期間にそれぞれ 1 度呼び出され、Execute メソッドは新しいビデオ フレームがレンダリングされるたびに呼び出されます。新しいエフェクトを作成するには、CMMSpecialEffect クラスを継承するクラスを実装し、InitializeExecute、および Terminate メソッドを上書きします。

次に CMMSpecialEffectDXT クラスから継承する CMMSampleEffect クラスは、CreateSpecialEffectByName を呼び出して描画オブジェクトである CMMSpecialEffect を生成します。新しい DXT を定義すると、CreateSpecialEffectByName 関数の動作を変更することでオブジェクトを修正することができます。これらのクラスとオブジェクトは、新しいエフェクトの作成に必要な面倒な作業の大部分を処理します。

注意   CMMSampleEffect および CMMSampleTransition クラスは、CoClass の GUID を参照します。CoClass の GUID は、新しいエフェクトまたは修正されたエフェクトを記述している追加の XML ファイルで指定された GUID と同じものです。独自のエフェクトやトランジションを作成する場合、CMMSampleEffect および CMMSampleTransition クラスをコピーして名前を変更し、このクラスと XML ファイルで使用する新しい GUID を生成します。つまり、使用する GUID を確実に一意の GUID にします。新しい GUID の生成には、Visual Studio に収録されている Guidgen ツールを使用します。COM オブジェクトは、これらの COM オブジェクトを記述している .idl ファイル、COM オブジェクトの登録情報が含まれている .rgs ファイル、および .idl ファイルから生成された .h ファイルの GUID を参照します。GUID を変更するには、プロジェクト全体を調査して、古い GUID への参照を見つけ出す必要があります。Windows ムービー メーカーによるエフェクトの表示に必要な XML ファイルも、更新して新しい GUID を使用する必要があります。

新しいトランジションの作成

新しいトランジションの作成は、通常新しいエフェクトの作成よりもさらなる作業が必要です。Melt サンプルは、Direct3D を使用してイメージを操作し、結果をレンダリングしました。Direct3D には、相当量の初期化コードと実行コードが必要です。これらのコードは、CMM3DSpecialEffect から継承する CSimple3DSpecialEffect クラスによって Melt サンプルに提供されます。CMM3DSpecialEffect は、CMMSpecialEffect から継承します。Blue Adjust のコードと同様に、CMM3DSpecialEffect クラスを継承し、CreateSceneReleaseScene、および RenderScene メソッドを上書きして独自のトランジションを作成します。CreateScene および ReleaseScene は、1 度だけ呼び出され、RenderScene は新しいフレームがレンダリングされるたびに呼び出されます。

独自のトランジションが Melt サンプルとは異なる方法で 3D バーテックス バッファを管理する必要がある場合、CMM3DSpecialEffect クラスの別の 3 つのクラスも上書きされる場合があります。この 3 つのクラスは、CreateSurfacesRestoreSurfaces、および ReleaseSurfaces です。

**注意   ** CMM3DSpecialEffect クラスは、InitializeTerminate、および Execute メソッドを上書きするため、CMM3DSpecialEffect クラスの使用中にこれら 3 つのメソッドを上書きしないようにします。

また、CMMSampleTransition クラスをコピーして名前を変更し、新しい GUID を割り当てる必要があります。

グラフィックを描画するために、Melt サンプルは CMM3DSpecialEffect から継承する CSimple3DSpecialEffect を使用してトランジションを作成しますが、これらのクラスは Blue Adjust などの 3D エフェクトの作成にも使用できます。Windows ムービー メーカーでのエフェクトとトランジションの唯一の違いは、ビデオ入力ソースの番号です (エフェクトは 1、トランジションは 2)。入力の番号は、既定で 1 に設定されますが、CMMSampleTransitionFinalConstruct メソッドは、この値を 2 に設定します。

**注意   **オブジェクトをエフェクトまたはトランジションに関連付けた後は、GUID への参照をすべてレジストリから削除しない限りこのオブジェクトを他の種類に変更することはできません。DirectShow は、Windows ムービー メーカー 2 の起動時に、エフェクトとトランジションの種類をレジストリに格納します。

Direct3D を使用しない新しいトランジションを作成するには、CMMSpecialEffectDXT クラスの CreateSpecialEffectByName メソッドを修正し、CMMSpecialEffect オブジェクト (または CMMSpecialEffect から継承するクラスのオブジェクト) を作成し、Direct3D のインターフェイスとメソッドに対するすべての呼び出しを回避します。

メソッドを CMMSpecialEffectCSimple3DSpecialEffect の 2 つのクラスに分割すると、サンプルが明確になります。コードの簡潔さおよび最適化を重要視する場合、これらのクラスは単一のクラスに統合することができます。

DLL へ渡されるパラメータ

パラメータを XML ファイルから 独自の C++ DLL に渡すと、独自の特殊効果を使用するユーザーは、その特殊効果を好きなように修正することができます。

最初の手順では、これらのパラメータのプロパティを .IDL ファイルに追加します。たとえば、次のコードは、オブジェクトの Blue および MeltIntensity パラメータを公開しています。

interface IMMSampleTFX : IDXEffect
{
[propget] HRESULT Blue([out,retval] float* pfBlue);
[propput] HRESULT Blue([in] float fBlue);
[propget] HRESULT MeltIntensity([out,retval] float* pfMeltIntensity);
[propput] HRESULT MeltIntensity([in] float fMeltIntensity);
};

Blue および MeltIntensity パラメータを公開する IMMSampleTFX インターフェイスが CMMSpecialEffectDXT によってどのように継承されるかに注目してください。

class CMMSpecialEffectDXT :
    public CDXBaseNTo1,
    public IDispatchImpl<IMMSampleTFX, &IID_IMMSampleTFX, &LIBID_MMFXLib>,
    public IObjectSafetyImpl2<CMMSpecialEffectDXT>

次の段階では、4 つのメソッドのコードを記述します。以下に例を示します。

STDMETHODIMP CMMSpecialEffectDXT::put_Blue(float fBlueAmount)
{
   m_fBlueAmount = fBlueAmount;
   return S_OK;
}

Blue エフェクトは、XML ファイルの次のステートメントによって Windows ムービー メーカーで使用できるようになります。

<TransitionsAndEffects Version="1.0">
   <Effects>
      <EffectDLL guid="{294D0DE1-1B57-408d-A33F-FA708A5A28D6}">
         <Effect name="Blue Color Adjust" iconid="12">
            <Param name="Blue" value="2.0" />
         </Effect>
      </EffectDLL>
   </Effects>
</TransitionsAndEffects>

次に、Windows ムービー メーカーは、GUID を使用して検索する DLL、エフェクトを識別するエフェクト名、および変更するプロパティを特定するパラメータ名を特定します。パラメータ名の Blue は、前に説明した put_Blue メソッドを特定します。

DLL のデバッグ

DLL のデバッグは、その他のプログラムのデバッグとほぼ同じです。ただし、プロジェクトの設定で実行可能ファイルの名前を Windows Movie Maker に変更する必要があります。この作業を実行する最も簡単な方法は、デバッグを実行する実行可能ファイルとして moviemk.exe を指定することです。詳細については、MSDN ライブラリの*「Debugging: DLLs」*を参照してください。

Blue Adjust エフェクトの Purple Adjust への変更

レンダリングされたイメージの赤の量を調整する red パラメータを追加するだけで、収録されている Blue Adjust エフェクトを Purple Adjust に変更することができます。このエフェクトは、赤チャンネルを修正するサンプルの既存のコードを利用します。新しい red パラメータは、XML で単独で設定し、紫 (または、赤、青、またはこれら 2 色の組み合わせ) を作成することができます。この節では、C++ および XML ファイルを修正して red パラメータを追加する方法について説明します。

Blue Adjust サンプル エフェクトは、(DXMedia SDK の) DXLookupTable オブジェクトを使用して、イメージの青の量を増やします。このオブジェクトは、色調整、輝度、コントラスト、またはガンマの変更、およびしきい値とポスタリゼーション エフェクトの適用を実行することができます。紫を作成するための赤と青の量の増加に対する変更は、制限されています。

red パラメータを追加するには、blue パラメータのコードをコピーし、類似する関数とメンバを新しい red パラメータに追加するだけです。次の手順で、追加するコードを示します。

MMSpecialEffect.cpp ファイルの、CMMSpecialEffect::InitStandardOperations 関数で次の行を見つけます。

RTN_HR_IF_FAILED(m_pDXT->get_Blue(&fValue));
if (!IsEqual(fValue, 0.0f))
{
   m_fBlue = fValue;
}

次の抜粋を追加して、赤の値を取得します。

RTN_HR_IF_FAILED(m_pDXT->get_Red(&fValue));
if (!IsEqual(fValue, 0.0f))
{
   m_fRed = fValue;
}

MMSpecialEffectDXT.h ファイルで、blue プロパティの get メソッドと put メソッドの宣言を見つけ、次に太字で示すように、red の同じメソッドの宣言を追加します。

STDMETHOD(get_Blue)(float* pfBlue);
STDMETHOD(put_Blue)(float fBlue);

STDMETHOD(get_Red)(float* pfRed);


STDMETHOD(put_Red)(float fRed);

MMSpecialEffectDXT.cpp ファイルの put_Blue および get_Blue メソッドをコピーし、put_Red および get_Red の 2 つのメソッドを追加し、すべての . . . Blue . . . の値を . . . Red . . に変更します。

次に太字で示すように、MMSpecialEffectDXT.h ファイルで、m_fBlueAmount と同一の m_fRedAmount メンバー変数を宣言します。

float m_fBlueAmount;

float m_fRedAmount;

次に太字で示すように、MMSpecialEffectDXT.cpp ファイルの CMMSpecialEffectDXT痴 FinalConstruct メソッドで、blue のメンバを初期化した場所と同じ場所で、red のこの新しいメンバ変数を初期化します。

m_fBlueAmount = 0.0f;

m_fRedAmount = 0.0f;

MMSTFX.idl ファイルで、blue プロパティの宣言を見つけ、次に示すように、red の同じ宣言を追加します。

[propget] HRESULT Blue([out,retval] float* pfBlue);
[propput] HRESULT Blue([in] float fBlue);

[propget] HRESULT Red([out,retval] float* pfRed);


[propput] HRESULT Red([in] float fRed);

最後に、新しい Purple Color Adjust エフェクトを Windows ムービー メーカーのインターフェイスに追加するには、このエフェクトを呼び出すための XML コードを追加する必要があります。サンプル プロジェクトに含まれている BlueAdjust.xml ファイルを見つけ、このファイルのコピーを \AddOnTFX ディレクトリの BlueAdjust.xml の隣りに作成し、ファイル名を PurpleAdjust.xml に変更します。新しいファイルを開き、Blue Color Adjust という名前のエフェクトを見つけ、name パラメータの値を「Purple Color Adjust」に変更し、次に示すように Red パラメータを追加します。

<Param name="Blue" value="2.0" />

<Param name="Red" value="1.5" />

BlueAdjust.xml ファイルは保持することができます。このファイルは、同じ TFX を呼び出しますが、赤の値は修正しません。または、両方のエフェクトを 1 つの XML ファイルに統合することができます。

m_fRed の値を DXLookupTable オブジェクトに適用するために必要な他のコードは、CMMSpecialEffect::InitStandardOperations メソッドのサンプル コードにすでに提供されています。このコードは、DXMedia の SetColorBalance メソッドを呼び出して、赤チャンネルの値を修正します。

変更をコンパイルします。プロジェクトが作成されたら、Windows ムービー メーカーを実行し、エフェクトの領域を開き、下へスクロールして Purple Color Adjust エフェクトを見つけます。green パラメータの追加を自分で試してみましょう。

用語集

次の専門用語は、この文書または DirectX または Windows ムービー メーカーのエフェクトやトランジションの作成時に使用されるものです。

AddOnTFX

XML ファイルを配置してムービー メーカーのトランジションとエフェクトを拡張するディレクトリの名前です。たとえば、C:\Program Files\Movie Maker\Shared\AddOnTFX などです。このディレクトリは作成する必要があります。

DXT

DirectX Transform。DirectX Media SDK で作成されたオブジェクトで、特殊効果の作成に使用します。ムービー メーカーは、システムにインストールされており、XML ファイルで参照できる DXT を使用します。

出力ビデオ バッファ

エフェクトまたはトランジションが書き込む、各フレーム用のメモリ バッファ。

ピッチ

あるビットマップ行の開始と次のビットマップ行の開始を示す 2 つのメモリ アドレス間のバイト単位の距離。

レンダリング

ビデオ出力を出力ビデオ バッファに描画すること。

特殊効果

Windows ムービー メーカーのトランジションとエフェクト両方の総称で、ビジュアル コンテンツの拡張に使用されます。

ビデオ バッファ A

トランジションの最初の入力バッファ、またはエフェクトの唯一の入力バッファ。エフェクトは、あらゆるフレームに対してこのバッファの各ピクセルを読み取り、結果を出力バッファに書き込みます。トランジションでは、これは 2 つ目のビデオに切り替える 1 つ目のビデオです。ムービー メーカーは、本来 24 ビット RGBを使用しますが、DXT では 32 ビットが使用される場合があります。

ビデオ バッファ B

トランジションの 2 つ目の入力バッファ。これは、1 つ目のビデオから切り替える 2 つ目のビデオ イメージです。

詳細について

  • SMPTE ワイプの詳細については、DirectShow SDK のドキュメントを参照してください。
  • Microsoft の Web サイトの MSDN ライブラリには、DirectX Transform の作成に関する記事および COM と ATL のドキュメントがあります。
  • DirectX Transform SDK には、エフェクトやトランジションの作成に使用するドキュメントとオブジェクトが収録されています。この SDK は、DirectX 6.0 SDK の一部としてインストールされ、DirectX Media SDK または DirectX Media 6.0 SDK とも呼ばれており、Microsoft の Web サイトで入手できます。この SDK に収録されているオブジェクトを使用すれば、独自の変換オブジェクトやエフェクトのオブジェクトを作成することができます。
  • DirectX 7.0 SDK は、Microsoft のダウンロード Web サイトでダウンロードすることができます。バージョン 7 のヘッダーは、Visual Studio .NET と DirectX Transform SDK に収録されており、前の段落のリンク先で入手できます。ただし、ドキュメントは完全バージョンの 7 SDK をインストールした場合にのみ利用することができます。
  • いくつかのニュースグループが Windows ムービー メーカーと DirectX プログラミングを取り上げています。次の 2 つのグループはさまざまな目的において役に立ちます。
    • microsoft.public.windowsxp.moviemaker は、Windows ムービー メーカーを取り上げているニュースグループで、XML の問題に関して有益です。
    • microsoft.public.multimedia.directx.dshow.programming は、DirectX Media SDK を含む DirectShow プログラミングの技術面を取り上げているニュースグループです。

法律上の通知

本ソフトウェアは一部、Independent JPEG Group の研究成果を利用しています。

GIF decompression code, copyright 1990, David Koblas。この著作権表示がすべてのコピーに記載され、さらに著作権表示と許可表示の両方がサポート ドキュメントに記載される限り、いかなる目的であれ無償で、本ソフトウェアおよびその関連文書を使用、コピー、変更、および配布することを許可します。本ソフトウェアは「無保証」で提供されるものであり、明示または黙示を問わずいかなる保証もありません。