비디오 이미지 샘플 작성
[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 구조로 시작해야 합니다. 또한 샘플에는 비트맵 이미지가 포함될 수 있습니다. 이미지는 표시되는 첫 번째 프레임에 대한 샘플에만 연결됩니다. 해당 이미지를 사용하는 모든 추가 프레임에는 구조의 정보만 필요합니다. 입력 비트맵은 픽셀당 24비트인 RGB 형식이어야 합니다.
비트맵 파일은 이미지 데이터를 저장할 때, 이미지 각 행의 데이터가 4의 배수인 바이트 수를 가지도록 조정합니다. (이를 비트맵의 보폭이라고 합니다.) 이렇게 하면 모든 비디오 행의 시작이 DWORD 경계로 강제 적용되어 복사 효율성이 높아집니다. 이미지 행을 4바이트로 균등하게 나눌 수 없는 경우 행은 다음으로 가장 높은 4바이트 배수로 패딩됩니다. 이미지 데이터를 연결할 때 각 행의 데이터 끝에 있는 패딩을 제거해야 합니다.
Windows Media Video 9 Image v2 코덱은 한 번에 최대 두 개의 이미지를 메모리에 유지 관리합니다. 이러한 이미지를 이전 이미지와 현재 이미지라고합니다. 각 이미지에는 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 Media Player에서 재생 환경이 저하될 수 있습니다. 이 문제를 방지하려면 무음 오디오 스트림을 파일에 삽입하는 것이 가장 좋으며, 이는 또한 파일 크기를 증가시킵니다.
관련 항목