インターレース ビデオ エンコード (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 に設定し、コンテンツ タイプのデータユニット拡張機能がアタッチされたサンプルを送信しないと、エンコーダーがクラッシュする可能性があります。 配信するインターレースサンプルがある場合にのみ、インターレースエンコード用のエンコーダーを設定します。
関連トピック