비디오 이미지 샘플 작성

[이 페이지와 연결된 기능인 Windows Media Format 11 SDK는 레거시 기능입니다. 원본 판독기 및 싱크 작성기에 의해 대체되었습니다. 원본 판독기 및 싱크 작성기는 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 Windows Media Format 11 SDK 대신 소스 판독기 및 싱크 작성기를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

비디오 이미지 스트림은 일련의 스틸 이미지를 포함하는 비디오입니다. 이미지는 프레임 내에서 이동할 수 있으며 각 이미지는 다음 이미지에 혼합할 수 있습니다. 비디오 이미지 스트림은 Windows Media Video 9 Image v2 코덱을 사용하여 인코딩됩니다. 출력 비디오는 Windows Media Video 9 코덱에서 만든 것과 비슷합니다.

비디오 이미지 스트림이 포함된 프로필을 만들려면 코덱 에서 스트림 구성 정보 가져오기에 설명된 대로 비디오 코덱을 열거하여 시작합니다. WMMEDIASUBTYPE_WVP2 하위 형식을 지원하는 코덱을 검색합니다.

기록기 개체에서 프로필을 설정한 후 IWMWriter::GetInputProps 를 호출하여 비디오 이미지 입력 스트림에 대한 미디어 속성을 가져옵니다. IWMMediaProps::GetMediaType을 호출하여 미디어 속성 개체에서 미디어 형식을 가져와 하위 형식을 WMMEDIASUBTYPE_VIDEOIMAGE 변경합니다. 비디오 너비와 높이를 스트림에 추가할 이미지를 포괄하는 데 필요한 최대 크기로 설정해야 합니다. 그런 다음, 수정된 입력 형식으로 IWMMediaProps::SetMediaType 을 호출합니다. 이제 작성기 개체에 샘플을 보낼 준비가 되었습니다.

각 샘플은 WMT_VIDEOIMAGE_SAMPLE2 구조로 시작해야 합니다. 또한 샘플에는 비트맵 이미지가 포함될 수 있습니다. 이미지가 표시되는 첫 번째 프레임에 대한 샘플에만 연결됩니다. 해당 이미지를 사용하는 모든 추가 프레임에는 구조체의 정보만 필요합니다. 입력 비트맵은 RGB, 픽셀당 24비트 형식이어야 합니다.

비트맵 파일은 이미지 데이터를 저장하여 이미지의 각 행에 대한 데이터가 4바이트씩 나눌 수 있도록 합니다. 이를 비트맵의 stride라고 합니다. 이렇게 하면 비디오의 모든 행이 DWORD 경계로 강제로 시작되어 복사 효율성이 높아집니다. 이미지 행을 4바이트씩 균등하게 나눌 수 없는 경우 행은 다음으로 가장 높은 4바이트 배수로 채워집니다. 이미지 데이터를 연결할 때 각 행에 대한 데이터 끝에 있는 패딩을 제거해야 합니다.

Windows Media Video 9 Image v2 코덱은 한 번에 최대 2개의 이미지를 메모리에 유지 관리합니다. 이러한 이미지를 이전 이미지와 현재 이미지라고 합니다. 각 이미지에는 프레임에 이미지가 표시되는 방식을 지시하는 WMT_VIDEOIMAGE_SAMPLE2 구조체의 멤버 집합이 있습니다. WMT_VIDEOIMAGE_SAMPLE2 dwControlFlags 멤버를 WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME 설정하여 이미지를 추가할 수 있습니다. 입력 프레임을 코덱에 전달하면 해당 이미지가 현재 이미지가 됩니다. 이전 샘플의 현재 이미지였던 이미지는 일반적으로 이전 이미지가 되고 이전 샘플의 이전 이미지였던 이미지는 삭제됩니다. bKeepPrevImage 멤버를 TRUE로 설정하여 이전 이미지를 유지하도록 코덱을 구성할 수 있습니다. 이 경우 이전 샘플의 현재 이미지였던 이미지는 삭제됩니다.

비디오 이미지 프레임의 기본 컴퍼지션은 각 이미지에 대해 관심 영역과 혼합 계수의 두 가지 요소로 결정됩니다. 이미지의 관심 영역은 원점, 너비 및 높이로 정의됩니다. 관심 영역에 설명된 이미지 부분이 출력 프레임을 채웁니다. 관심 영역이 출력 프레임과 다른 크기인 경우 코덱의 크기가 조정됩니다. 이미지의 혼합 계수는 두 이미지의 혼합을 결정합니다. 현재 및 이전 이미지의 혼합 계수는 총 1.0이어야 합니다. 예를 들어 fCurrBlendCoef 가 0.5로 설정되고 fPrevBlendCoef 가 0.5로 설정된 경우 출력 프레임은 두 이미지에서 관심 영역의 동일한 혼합으로 구성됩니다.

이미지에 대한 관심 영역을 조작하여 이동 및 확대/축소 효과를 만들 수 있습니다. 혼합 계수를 사용하면 이미지 간에 교차 페이드(디졸브)할 수 있습니다. 이러한 효과 외에도 미리 정의된 전환 중 하나를 사용하여 더 복잡한 프레임을 만들 수 있습니다. 사용 가능한 전환은 이 설명서의 비디오 이미지 전환 섹션에 설명되어 있습니다. 전환을 사용하는 경우 각 프레임을 구성해야 합니다. 이 작업을 수행하는 가장 쉬운 방법은 전체 효과를 위해 WMT_VIDEOIMAGE_SAMPLE2 구조체의 멤버를 증분 방식으로 변경하는 함수를 만드는 것입니다.

변형에 대해 설정할 값에 대한 자세한 내용은 WMT_VIDEOIMAGE_SAMPLE2 참조하세요.

참고 비디오 이미지 스트림이 있는 파일에 오디오를 포함하려면 압축되지 않은 오디오 입력을 사용해야 합니다. 비디오 이미지 스트림을 기존 압축 오디오 스트림과 결합하려면 오디오의 압축을 풀고 압축되지 않은 상태로 샘플을 전달해야 합니다. 비디오 이미지 스트림을 작성할 때 압축된 샘플을 작성기에 전달하면 오류가 발생하여 비디오에서 샘플이 삭제됩니다.

또한 오디오 스트림이 없는 압축된 비디오 이미지 파일에는 단일 ASF 패킷에 매우 작고 압축된 여러 비디오 프레임이 포함될 수 있으며, 이로 인해 이전 버전의 Windows 미디어 플레이어 재생 환경이 저하될 수 있습니다. 이 문제를 방지하기 위해 가장 좋은 해결 방법은 파일에 자동 오디오 스트림을 삽입하는 것이지만 파일 크기도 증가합니다.

비디오 이미지

ASF 파일 작성