次の方法で共有


インターレース ビデオ エンコード (Microsoft Media Foundation)

通常、コンピューターで使用することを目的としたビデオ データは プログレッシブです。つまり、各フレームは 1 つの画像としてエンコードされます。 テレビなどの一部のデバイスでは、フレームを一度に表示するのではなく、2 つの画像として表示します。 画像の 1 つ (フィールド) には、偶数行がすべて含まれています。 もう 1 つのフィールドには、奇数行すべてのデータが含まれています。 フレームごとに複数のフィールドでエンコードされたビデオは、偶数フィールドと奇数フィールドを切り替えることによってレンダリングされるため、インターレースと呼ばれます。

以前は、インターレースされたビデオ コンテンツは、Windows Media Video コーデックでエンコードする前に常にインターレース解除されていました。 ただし、Windows Media 9 シリーズ以降では、ビデオ エンコーダーは、最初にプログレッシブに変換することなく、インターレースコンテンツの圧縮をサポートしています。 コンテンツがインターレースされたディスプレイ (テレビなど) にレンダリングされる場合は、エンコードされたファイルでのインターレースを維持することが重要です。 この機能は、Windows メディアベースのコンテンツのサポートが DVD プレーヤー、セットトップ ボックス、およびその他のホーム エレクトロニクスに広がり、ますます重要になっています。

インターレース ビデオをエンコードして配信する最も簡単な方法は、Windows Media Format SDK を使用してアプリケーションを開発し、ASF ファイルにコンテンツを格納することです。 フレームに関するインターレース情報は、ASF コンテンツに適したデータ ユニット拡張機能を使用してコーデックに渡されますが、他のコンテナーでサポートする方が少しトリッキーです。 データユニット拡張機能の詳細については、「Data Unit Extensions の使用」を参照してください。

インターレース エンコードをサポートするには、フレーム情報をエンコーダーに取得し、レンダリング アプリケーションに情報を配信する 2 つの主要な手順が必要です。 これらの手順については、次の段落で説明します。

インターレースされたビデオとエンコーダー

インターレースが維持されたビデオをエンコードする最初の手順は、インターレースされたフィールドをエンコードするようにエンコーダーを構成することです。 これを行うには、 MFPKEY_INTERLACEDCODINGENABLED プロパティを TRUE に設定 します。 これにより、インターレースされたサンプルを受け取るエンコーダーが準備されます。 各入力サンプルには、両方のフィールドが含まれている必要があります。

インターレース エンコードをアクティブ化した後にエンコーダーで処理する各サンプルには、データ ユニット拡張機能がアタッチされている必要があります。 予想されるデータ ユニット拡張機能のないサンプルは、プログレッシブであると見なされます。 拡張機能を識別する GUID は D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC です。 Windows Media Format SDK のオブジェクトによって渡される値は、次の表で定義されています。

説明
0x00000020 最初に下部のフィールドでサンプルをエンコードすることを指定します。 この値は、インターレース値と組み合わせた場合にのみ意味があります。
0x00000040 最初に先頭フィールドでサンプルをエンコードすることを指定します。 この値は、インターレース値と組み合わせた場合にのみ意味があります。
0x00000080 サンプルがインターレースされることを指定します。 これはコーデック DNO にとって意味のある唯一の値です。

 

最初の 2 つの値の 1 つは、常にビットごとの OR を 使用して0x80と組み合わされてから、サンプルに設定されます。 ただし、エンコーダーは0x80のみをチェックし、拡張機能の残りの部分を無視します。 拡張機能によってサンプルがインターレースとして識別される場合、エンコーダーは圧縮ストリームでサンプルのインターレースを維持し、デコーダーがインターレースフレームを識別できるようにストリームに表示フラグを埋め込みます。 各インターレースサンプルはマークされているため、プログレッシブとインターレースが混在するソースコンテンツをストリームにエンコードできます。

Windows Media Format SDK ライター オブジェクトには、レンダリング時に使用するために ASF コンテナーのデータ セクションに書き込むサンプルのコンテンツ タイプ データ ユニット拡張機能が含まれています。

インターレースされたビデオの読み取りとレンダリング

デコーダーは、エンコーダーによってストリームに設定されたフラグに基づいて、インターレースされたサンプルを識別します。 既定では、デコーダーはサンプルのインターレースを解除し、プログレッシブ出力を提供します。 プレーヤー アプリケーションは、 MFPKEY_DECODER_DEINTERLACING プロパティを設定することで、インターレースが維持された出力を処理するようにデコーダーを構成できます。

インターレースビデオ再生の難しさは、デコーダーがサンプルを配信した後に発生します。 レンダラー (デバイス内のビデオ カードまたはチップ) は、どのフィールドがどれであるかがわからないと、ビデオ コンテンツを適切に表示できません。 Windows Media Format SDK を使用するアプリケーションでは、コンテンツ タイプデータユニット拡張機能は圧縮されていないサンプルから取得され、デバイスに渡すことができます。

コーデック オブジェクトを直接使用する場合、このデータ転送は自動で行われません。 バッファー オブジェクトと、エンコードされたコンテンツに使用するコンテナーの両方で、data-unit-extension のサポートを実装する必要があります。 最も一般的な種類のメディア コンテナー (AVI など) では、サンプル レベルのメタデータはサポートされていません。 独自のシステムを実装してファイルにデータを格納し、個々のサンプルに関連付けることができますが、カスタマイズされたリーダーのみがデータを取得できます。

注意

MFPKEY_INTERLACEDCODINGENABLED プロパティを TRUE に設定し、コンテンツ タイプのデータユニット拡張機能がアタッチされたサンプルを送信しないと、エンコーダーがクラッシュする可能性があります。 配信するインターレースサンプルがある場合にのみ、インターレースエンコード用のエンコーダーを設定します。

 

ビデオの操作