다음을 통해 공유


인터레이스된 비디오 인코딩(Microsoft Media Foundation)

컴퓨터와 함께 사용하기 위한 비디오 데이터는 일반적으로 점진적이므로 각 프레임이 단일 이미지로 인코딩됩니다. 텔레비전과 같은 일부 장치는 프레임을 한 번에 모두 표시하지 않고 두 개의 이미지로 표시합니다. 이미지 또는 필드 중 하나에는 짝수 행이 모두 포함됩니다. 다른 필드는 모든 홀수 행에 대한 데이터를 포함합니다. 프레임당 둘 이상의 필드로 인코딩된 비디오는 짝수 필드와 홀수 필드 간에 전환하여 렌더링되므로 인터레이스된 비디오라고 합니다.

과거에는 Windows Media 비디오 코덱으로 인코딩하기 전에 인터레이스된 비디오 콘텐츠가 항상 인터레이스 해제되었습니다. 그러나 Windows Media 9 시리즈부터 비디오 인코더는 먼저 프로그레시브로 변환하지 않고 인터레이스 콘텐츠 압축을 지원합니다. 인코딩된 파일에서 인터레이싱을 유지하는 것은 TV와 같은 인터레이스 디스플레이에서 콘텐츠가 렌더링되는 경우 중요합니다. 이 기능은 Windows 미디어 기반 콘텐츠에 대한 지원이 DVD 플레이어, 셋톱 박스 및 기타 가정용 전자 제품으로 확산됨에 따라 중요도가 높아지고 있습니다.

인터레이스 비디오를 인코딩하고 전달하는 가장 쉬운 방법은 Windows Media Format SDK를 사용하여 애플리케이션을 개발하고 ASF 파일에 콘텐츠를 저장하는 것입니다. 프레임에 대한 인터레이스된 정보는 데이터 단위 확장을 사용하여 코덱에 전달됩니다. 이 정보는 ASF 콘텐츠에 대해 잘 작동하지만 다른 컨테이너에서 지원하기는 좀 더 까다롭습니다. 데이터 단위 확장에 대한 자세한 내용은 데이터 단위 확장 사용을 참조하세요.

인터레이스 인코딩을 지원하려면 프레임 정보를 인코더에 가져오고 렌더링 애플리케이션에 정보를 전달하는 두 가지 주요 단계가 포함됩니다. 이러한 단계는 다음 단락에 설명되어 있습니다.

인터레이스된 비디오 및 인코더

유지 관리되는 인터레이스로 비디오를 인코딩하는 첫 번째 단계는 인터레이스 필드를 인코딩하도록 인코더를 구성하는 것입니다. 이렇게 하려면 MFPKEY_INTERLACEDCODINGENABLED 속성을 TRUE로 설정합니다. 이렇게 하면 인터레이스 샘플을 받을 인코더가 준비됩니다. 각 입력 샘플에는 두 필드가 모두 포함되어야 합니다.

인터레이스 인코딩을 활성화한 후 인코더로 처리하는 각 샘플에는 데이터 단위 확장이 연결되어 있어야 합니다. 예상된 데이터 단위 확장이 없는 샘플은 점진적인 것으로 간주됩니다. 확장을 식별하는 GUID는 D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC입니다. Windows Media Format SDK의 개체에서 전달되는 값은 다음 표에 정의되어 있습니다.

설명
0x00000020 샘플이 맨 아래 필드로 먼저 인코딩되도록 지정합니다. 이 값은 인터레이스된 값과 결합된 경우에만 의미가 있습니다.
0x00000040 샘플이 맨 위 필드로 먼저 인코딩되도록 지정합니다. 이 값은 인터레이스된 값과 결합된 경우에만 의미가 있습니다.
0x00000080 샘플이 인터레이스되도록 지정합니다. 코덱 DDO에 의미 있는 유일한 값입니다.

 

처음 두 값 중 하나는 항상 샘플에 설정되기 전에 비트 OR 을 사용하여 0x80 결합됩니다. 그러나 인코더는 0x80 확인하고 나머지 확장은 무시합니다. 확장이 샘플을 인터레이스된 것으로 식별하는 경우 인코더는 압축된 스트림에서 샘플 인터레이스를 유지하고 디코더가 인터레이스된 프레임을 식별할 수 있도록 스트림에 표시 플래그를 포함합니다. 각 인터레이스 샘플은 점진적 및 인터레이스된 소스 콘텐츠를 함께 스트림으로 인코딩할 수 있도록 표시됩니다.

Windows Media Format SDK 기록기 개체에는 렌더링 시 사용할 ASF 컨테이너의 데이터 섹션에 쓰는 샘플의 콘텐츠 형식 데이터 단위 확장이 포함됩니다.

인터레이스 비디오 읽기 및 렌더링

디코더는 인코더가 스트림에 설정한 플래그를 기반으로 인터레이스 샘플을 식별합니다. 기본적으로 디코더는 샘플을 디인터레이스하고 점진적 출력을 제공합니다. 플레이어 애플리케이션은 MFPKEY_DECODER_DEINTERLACING 속성을 설정하여 유지 관리되는 인터레이싱으로 출력을 처리하도록 디코더를 구성할 수 있습니다.

인터레이스된 비디오 재생의 어려움은 디코더가 샘플을 전달한 후에 발생합니다. 렌더러(디바이스의 비디오 카드 또는 칩)는 어떤 필드가 무엇인지 모르고 비디오 콘텐츠를 제대로 표시할 수 없습니다. Windows Media Format SDK를 사용하는 애플리케이션에서 콘텐츠 형식 데이터 단위 확장은 압축되지 않은 샘플에서 검색되고 디바이스에 전달될 수 있습니다.

코덱 개체를 직접 사용하는 경우 이 데이터 전송은 자동으로 수행되지 않습니다. 버퍼 개체와 인코딩된 콘텐츠에 사용하는 컨테이너 모두에서 데이터 단위 확장 지원을 구현해야 합니다. 대부분의 일반적인 형식의 미디어 컨테이너(예: AVI)는 샘플 수준 메타데이터를 지원하지 않습니다. 사용자 고유의 시스템을 구현하여 파일에 데이터를 저장하고 개별 샘플과 연결할 수 있지만 사용자 지정된 판독기만 검색할 수 있습니다.

참고

MFPKEY_INTERLACEDCODINGENABLED 속성을 TRUE로 설정한 다음 콘텐츠 형식 데이터 단위 확장이 연결된 샘플을 보내지 않으면 인코더가 충돌할 수 있습니다. 전달할 샘플이 인터레이스된 경우에만 인터레이스 인코딩에 대한 인코더를 설정합니다.

 

비디오 작업