ビデオ編集プロジェクトの管理
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
[この API はサポートされていないため、今後変更または使用できない可能性があります。]
次のヒントは、 DirectShow Editing Services でプロジェクトを管理するのに役立ちます。
タイムラインの変更
- フィルター グラフを作成した後にタイムラインを変更した場合は、IRenderEngine::ConnectFrontEnd をもう一度呼び出してフロントエンドを再構築します。 通常、これはグラフの残りの部分には影響しません。 ただし、フロントエンドを再構築する前に、レンダリング エンジンでグラフ全体を削除する必要がある場合があります。 (たとえば、グループを追加または削除した場合に発生します)。 ConnectFrontEnd メソッドは、グラフを削除したことを通知するS_WARN_OUTPUTRESETを返します。 このような場合は、アプリケーションでグラフのレンダリング セクションを再構築する必要があります。
- タイムラインからすべてのオブジェクトを完全に削除するには、IAMTimeline::ClearAllGroups メソッドを呼び出します。
クリーンアップ
- レンダリング エンジンの使用が完了したら、 IRenderEngine::ScrapIt メソッドを呼び出します。 COM オブジェクトと同様に、使用が完了したら、必ずすべてのインターフェイス ポインターを解放してください。
- レンダー エンジンは、タイムラインの参照カウントを保持しません。 タイムラインの使用が完了する前に解放しないでください。最初にレンダー エンジンで常に ScrapIt を呼び出してください。
- タイムラインへのすべての参照を解放する場合は、参照カウントを保持している場合でも、そのタイムラインのどのオブジェクトも使用しないでください。
複数のタイムライン インスタンス
- タイムライン間でオブジェクトタイムライン移動しないでください。 タイムライン内のすべてのオブジェクトは、そのタイムラインによって作成される必要があります。 タイムラインは、作成するオブジェクトに関する情報を含む内部キャッシュを保持します。オブジェクトタイムライン移動すると、キャッシュが中断される可能性があります。
- 複数のタイムラインを持つレンダー エンジンの同じインスタンスを使用しないでください。 レンダリング エンジンは、タイムラインに関する情報を含むキャッシュを保持します。 複数のタイムラインによってキャッシュが中断され、予期しない結果が発生します。 2 つのアクティブなタイムラインが必要な場合は、タイムラインごとにレンダー エンジンのインスタンスを個別に作成します。
- タイムラインでは複数のレンダー エンジンを使用できますが、同時には使用できません。 別のレンダー エンジンを使用する前に、古いレンダー エンジンを削除します。 (通常、これは、プレビュー用の基本的なレンダリング エンジンからファイル書き込み用のスマート レンダリング エンジンに切り替える場合に行います)。
永続化
- プロジェクトを XML ファイルに保存する場合、フィルター グラフは永続的ではありません。 したがって、スマート再圧縮、圧縮形式、または圧縮パラメーターに関連する情報は失われます。 プロジェクトを読み込んだ後にこれらのパラメーターを復元するのは、アプリケーション次第です。
関連トピック