H.264 비디오 인코더

Microsoft Media Foundation H.264 비디오 인코더는 다음 H.264 프로필을 지원하는 Media Foundation 변환 입니다.

  • 기준 프로필
  • 기본 프로필
  • 높은 프로필(Windows 8 필요)

H.264 비디오 인코더는 다음 인터페이스를 노출합니다.

입력 형식

입력 미디어 형식에는 다음 하위 형식 중 하나가 있어야 합니다.

  • MFVideoFormat_I420
  • MFVideoFormat_IYUV
  • MFVideoFormat_NV12
  • MFVideoFormat_YUY2
  • MFVideoFormat_YV12

이러한 하위 형식에 대한 자세한 내용은 Video Subtype GUID를 참조하세요.

입력 형식 앞에 출력 형식을 설정해야 합니다. 출력 형식이 설정될 때까지 인코더의 IMFTransform::SetInputType 메서드는 MF_E_TRANSFORM_TYPE_NOT_SET 반환합니다.

출력 형식

인코더는 단일 출력 하위 형식을 지원합니다.

  • MFVideoFormat_H264

출력 미디어 형식에서 다음 특성을 설정합니다.

attribute 설명
MF_MT_MAJOR_TYPE 주 형식입니다. MFMediaType_Video 합니다.
MF_MT_SUBTYPE 비디오 하위 유형입니다. MFVideoFormat_H264 합니다.
MF_MT_AVG_BITRATE 초당 비트 단위로 인코딩된 평균 비트 속도입니다. 0보다 커야 합니다.
MF_MT_FRAME_RATE 프레임 속도.
MF_MT_FRAME_SIZE 프레임 크기입니다.
MF_MT_INTERLACE_MODE 인터레이스 모드.
MF_MT_MPEG2_PROFILE H.264 인코딩 프로필.
지원되는 값은
  • eAVEncH264VProfile_Base (기본값)
  • eAVEncH264VProfile_Main
  • eAVEncH264VProfile_High(Windows 8 필요)
MF_MT_MPEG2_LEVEL 선택 사항입니다. H.264 인코딩 수준을 지정합니다.
기본값은 인코더가 인코딩 수준을 선택함을 나타내는 –1입니다.
미디어 형식에서 수준을 설정하지 않고 인코더가 수준을 선택하도록 허용하지 않는 것이 좋습니다. 인코더는 비디오의 형식 제약 조건 및 특성을 고려하여 지정된 비디오 스트림에 대한 적절한 수준을 파생시킬 수 있습니다. 프로필 및 수준 제약 조건에 대한 자세한 내용은 ITU-T H.264의 부속서 A를 참조하세요.
MF_MT_PIXEL_ASPECT_RATIO 선택 사항입니다. 픽셀 가로 세로 비율을 지정합니다. 기본값은 1:1입니다.

 

출력 형식이 설정되면 비디오 인코더는 MF_MT_MPEG_SEQUENCE_HEADER 특성을 추가하여 형식을 업데이트합니다. 이 특성에는 시퀀스 헤더가 포함됩니다.

코덱 속성

H.264 인코더는 인코딩 매개 변수를 설정하기 위한 ICodecAPI 인터페이스를 구현합니다. 다음 속성을 지원합니다.

HCK 인코더 인증에 대한 코덱 요구 사항은 아래 의 인증된 하드웨어 인코더 섹션을 참조하세요.

다음 속성은 Windows 7에서 지원됩니다.

속성 설명
CODECAPI_AVEncCommonRateControlMode 속도 제어 모드를 설정합니다. 설명 부분을 참조하세요. 기본 모드는 제약이 없는 VBR(가변 비트 전송률)입니다.
CODECAPI_AVEncCommonQuality 품질 수준을 설정합니다. 이 속성은 속도 제어 모드가 품질 기반 VBR(eAVEncCommonRateControlMode_Quality)일 때 적용됩니다. 유효한 범위는 1~100입니다. 기본값은 70입니다.
이 매개 변수를 설정하려면 IMFTransform::SetOutputType을 호출하기 전에 속성을 설정합니다.
Windows 7에서 이 매개 변수를 설정하려면 IMFTransform::SetOutputType을 호출하기 전에 속성을 설정합니다. 인코더는 출력 형식이 설정된 후 변경 내용을 무시합니다.
Windows 8 인코딩하는 동안 언제든지 이 속성을 설정할 수 있습니다. 변경 내용은 다음 입력 프레임부터 적용됩니다.
내부적으로 인코더는 이 속성을 AVEncVideoEncodeQP 값으로 변환합니다.

 

다음 속성에는 Windows 8 필요합니다.

속성 설명
CODECAPI_AVEncAdaptiveMode 적응형 인코딩 모드를 설정합니다. H.264 인코더는 Windows 8 다음 모드를 지원합니다.
  • eAVEncAdaptiveMode_None. 적응형 인코딩이 없습니다. 이 속성의 기본값입니다.
  • eAVEncAdaptiveMode_FrameRate. 프레임 속도를 적응적으로 변경합니다.

CODECAPI_AVEncCommonBufferSize CBR(상수 비트 전송률) 인코딩에 대한 버퍼 크기(바이트)를 설정합니다.
유효한 범위는 [1 ... 2개²–1].
Windows 8 필요합니다.
CODECAPI_AVEncCommonMaxBitRate 제한된 VBR 인코딩의 경우 는 "새는 버킷"이 드레이닝되는 속도를 초당 비트 단위로 지정합니다. 이 속성은 속도 제어 모드가 eAVEncCommonRateControlMode_PeakConstrainedVBR 경우에 적용됩니다.
유효한 범위는 [1 ... 2개²–1].
CODECAPI_AVEncCommonMeanBitRate 인코딩된 비트 스트림의 평균 비트 속도를 초당 비트 단위로 설정합니다. 속도 제어 모드가 eAVEncCommonRateControlMode_Quality 경우 이 속성은 무시됩니다.
유효한 범위는 [1 ... 2개²–1].
CBR 및 제한되지 않는 VBR 모드에서 평균 비트 전송률은 파일의 최종 크기를 결정합니다. CBR 모드에서 평균 비트 전송률은 압축된 비트가 "새는 버킷"에서 드레이닝되는 속도이기도 합니다. 자세한 내용은 새는 버킷 버퍼 모델을 참조하세요.
Windows 7에서 평균 비트 전송률은 미디어 형식의 MF_MT_AVG_BITRATE 특성에 의해 지정됩니다.
Windows 8 MF_MT_AVG_BITRATE 특성 또는 CODECAPI_AVEncCommonMeanBitRate속성을 사용하여 평균 비트 속도를 설정할 수 있습니다. 둘 다 설정되면 CODECAPI_AVEncCommonMeanBitRate 재정의합니다. Windows 8 인코딩하는 동안 평균 비트 전송률을 설정할 수 있습니다. 비트 속도가 변경되면 인코더는 적응형 인코딩을 사용합니다.
CODECAPI_AVEncCommonQualityVsSpeed 품질/속도 절충을 설정합니다. 유효 범위:
  • 0-33: 낮은 복잡성
  • 34-66: 중간 복잡성(기본값)
  • 67-100: 높은 복잡성

이 값은 인코더가 동작 보정과 같은 다양한 인코딩 작업을 수행하는 방법에 영향을 줍니다. 복잡성 수준이 높을수록 인코더는 더 느리게 실행되지만 동일한 비트 속도로 더 나은 품질을 생성합니다.
CODECAPI_AVEncH264CABACEnable H.264 엔트로피 코딩에 CABAC(컨텍스트 적응 이진 산술 코딩)를 사용하거나 사용하지 않도록 설정합니다. 기본값은 VARIANT_FALSE.
CABAC는 기준 프로필에 사용되지 않습니다.
CODECAPI_AVEncH264SPSID H.264 비트스트림의 SPS NAL 단위에서 seq_parameter_set_id 값을 설정합니다.
CODECAPI_AVEncMPVDefaultBPictureCount 출력 비트스트림에서 연속 B 프레임의 최대 수를 설정합니다. 유효한 값은 다음과 같습니다.
  • 0: B 프레임(기본값)을 사용하지 마세요.
  • 1: 하나의 B 프레임을 사용합니다.
  • 2: 두 개의 B 프레임을 사용합니다.
이 매개 변수를 설정하려면 IMFTransform::SetOutputType을 호출하기 전에 속성을 설정합니다.
기준 프로필의 경우 B 프레임 수는 항상 0입니다. 인코더는 0이 아닌 값을 재정의합니다.
다른 H.264 프로필의 경우 이 속성이 0이 아닌 경우 인코딩 패턴은 IBBPBBP입니다. 여기서 연속 B 프레임의 최대 수는 CODECAPI_AVEncMPVDefaultBPictureCount.
CODECAPI_AVEncMPVGOPSize 선행 앵커를 포함하여 한 GOP 헤더의 그림 수를 다음으로 설정하지만 다음 앵커는 포함하지 않습니다.
유효한 범위는 [0 ... 2개²–1]. 0이면 인코더가 GOP 크기를 선택합니다. 기본값은 영입니다.
CODECAPI_AVEncNumWorkerThreads 인코더에서 사용하는 작업자 스레드 수를 설정합니다.
유효한 범위는 0~16입니다. 0이면 인코더가 스레드 수를 선택합니다.
CODECAPI_AVEncVideoContentType 비디오 콘텐츠의 형식을 나타냅니다.
CODECAPI_AVEncVideoEncodeQP 유효한 범위: 16-51. 기본값은 24입니다.
이 속성은 속도 제어 모드가 eAVEncCommonRateControlMode_Quality 경우에 적용됩니다.
이 속성은 AVEncCommonQuality와 동일한 인코딩 설정을 구성합니다. 그러나 AVEncVideoEncodeQP 를 사용하면 애플리케이션에서 QP 값을 직접 지정할 수 있습니다. 두 속성이 모두 설정되면 AVEncVideoEncodeQP가 재정의됩니다.
기본값 24는 AVEncCommonQuality 설정의 기본값 70에 해당합니다.
CODECAPI_AVEncVideoForceKeyFrame 인코더가 다음 프레임을 키 프레임으로 코딩하도록 합니다.
CODECAPI_AVEncVideoMinQP 유효한 범위: 0-51. 기본값은 0입니다.
이 속성은 모든 속도 제어 모드에 적용됩니다. 인코더는 CODECAPI_AVEncVideoMinQP 속성에 지정된 것보다 낮은 QP 값을 생성해서는 안 됩니다.
CODECAPI_AVLowLatencyMode 대기 시간이 짧은 모드를 사용하거나 사용하지 않도록 설정합니다. 설명 섹션에서 "다중 스레딩"을 참조하세요.

 

설명

인코더는 다음 속도 제어 모드를 지원합니다.

Mode 상수 Description
CBR(상수 비트 전송률) eAVEncCommonRateControlMode_CBR 인코더는 "새는 버킷" 모델을 사용하여 일정한 비트 속도를 달성하려고 합니다. 대상 비트 속도는 CODECAPI_AVEncCommonMeanBitRate 속성에 의해 지정됩니다.
Windows 8 필요합니다.
제한된 VBR(가변 비트 전송률) eAVEncCommonRateControlMode_PeakConstrainedVBR 인코더는 최고 비트 전송률의 "새는 버킷" 모델을 사용합니다. 새는 버킷의 드레이닝 속도는 CODECAPI_AVEncCommonMaxBitRate 속성에 의해 지정됩니다.
Windows 8 필요합니다.
VBR(품질 기반 가변 비트 전송률) eAVEncCommonRateControlMode_Quality 인코더는 AVEncCommonQuality 속성에 의해 지정된 일정한 품질 수준을 달성하려고 합니다.
제한되지 않는 VBR eAVEncCommonRateControlMode_UnconstrainedVBR 인코더는 출력 미디어 형식의 MF_MT_AVG_BITRATE 특성에 의해 지정된 대상 비트 전송률을 달성하려고 합니다. 이것이 기본 모드입니다.

 

CBR 및 제한된 VBR 모드에는 Windows 8 필요합니다.

Windows 8 인코더는 출력 샘플에서 다음 특성을 설정합니다.

참고

이전 버전의 설명서에서 인코더가 Windows Server 2008 R2에서 지원된다는 잘못된 설명서가 있습니다.

 

다중 스레딩

Windows 8 인코더는 두 가지 인코딩 모드를 지원합니다.

  • 조각 인코딩. 이 모드에서는 조각이 병렬로 인코딩됩니다. 각 조각은 다른 스레드에서 인코딩됩니다. 단일 그림이 병렬로 인코딩되므로 이 모드의 대기 시간이 짧습니다. 그러나 조각 수가 입력 그림의 매크로 블록 행 수로 제한되기 때문에 코어 수가 증가함에 따라 이 방법은 크기가 조정되지 않습니다.
  • 다중 프레임 인코딩. 이 모드에서 인코더는 여러 입력 프레임을 수락하고 병렬로 인코딩합니다. 이 모드는 다중 코어 환경에서 더 잘 확장되지만 대기 시간이 더 많이 발생합니다.

인코더는 기본적으로 분할 인코딩을 설정하여 대기 시간을 최소화합니다. 다중 프레임 인코딩을 사용하도록 설정하려면 CODECAPI_AVLowLatencyMode 속성을 VARIANT_FALSE 설정합니다.

인코더에서 사용하는 작업자 스레드 수를 설정하려면 CODECAPI_AVEncNumWorkerThreads 속성을 설정합니다.

Windows 7에서 인코더는 항상 조각 인코딩을 사용합니다.

인증된 하드웨어 인코더

인증된 하드웨어 인코더가 있는 경우 일반적으로 Media Foundation 관련 시나리오에 대한 받은 편지함 시스템 인코더 대신 사용됩니다. 인증된 인코더는 특정 ICodecAPI 속성 집합을 지원해야 하며 필요에 따라 다른 속성 집합을 지원할 수 있습니다. 인증 프로세스는 필수 속성이 제대로 지원되고 선택적 속성이 지원되는 경우 제대로 지원되도록 보장해야 합니다.

다음은 인코더가 HCK 인코더 인증을 통과하기 위한 필수 및 선택적 ICodecAPI 속성 집합입니다.

다음 Windows 8 및 Windows 8.1 ICodecAPI 속성이 필요합니다.

다음 Windows 8.1 ICodecAPI 속성은 선택 사항이지만 지원되는 경우 HCK에서 테스트됩니다.

다음 Windows 8 및 Windows 8.1 ICodecAPI 속성은 선택 사항이지만 지원되는 경우 HCK에서 테스트됩니다.

다음 ICodecAPI 속성은 선택 사항입니다. HCK에서는 테스트되지 않습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 7 [데스크톱 앱만 해당]
지원되는 최소 서버
지원되는 버전 없음
DLL
Mfh264enc.dll

추가 정보

코덱 개체

Media Foundation의 MPEG-4 지원

미디어 파운데이션에서 지원되는 미디어 형식

비디오 미디어 유형