Microsoft MPEG-2 视频编码器

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

Microsoft MPEG-2 视频编码器筛选器对 MPEG-2 和 MPEG-1 视频进行编码。

若要对音频/视频流进行编码和多路复用,请使用 Microsoft MPEG-2 编码器 筛选器,该筛选器封装此筛选器和 Microsoft MPEG-2 音频编码器 筛选器的功能。

注意

基于 IA-64 的平台不支持此筛选器。

 

筛选器信息

筛选器接口

IBaseFilter
ICodecAPI
IEncoderAPI
IMediaSeeking
IVideoEncoder

输入引脚媒体类型

MEDIATYPE_VideoMEDIASUBTYPE_I420
MEDIATYPE_VideoMEDIASUBTYPE_IYUV
MEDIATYPE_VideoMEDIASUBTYPE_RGB24
MEDIATYPE_Video、MEDIASUBTYPE_UYVY
MEDIATYPE_VideoMEDIASUBTYPE_YUY2
MEDIATYPE_VideoMEDIASUBTYPE_YV12

输入引脚接口

IMemInputPin
IPin
IQualityControl

输出引脚媒体类型

MEDIATYPE_StreamMEDIASUBTYPE_MPEG2_VIDEO
MEDIATYPE_StreamMEDIASUBTYPE_MPEG2_PROGRAM
MEDIATYPE_StreamMEDIASUBTYPE_MPEG2_TRANSPORT
MEDIATYPE_VideoMEDIASUBTYPE_MPEG2_VIDEO

输出引脚接口

IMediaSeeking
IPin
IQualityControl

筛选器 CLSID

wmcodecdsp.h) 中声明CLSID_CMPEG2EncoderVideoDS (

可执行文件

msmpeg2enc.dll

优点

MERIT_DO_NOT_USE

筛选器类别

CLSID_LegacyAmFilterCategory

 

注解

MPEG-2 视频编码器可以生成以下类型的输出:

  • 视频基本流
  • MPEG-2 程序流中的视频
  • MPEG-2 传输流中的视频

它支持以下 MPEG-2 配置文件和级别:

配置文件 级别 注解
简单配置文件 Main
Main Profile 低、主、高、高-1440
高级画质 Main、High、High-1440 无可伸缩性或 4:2:2/4:4:4 的支持 (仅支持 4:2:0)
4:2:2 配置文件 主,高 无可伸缩性或 4:2:2 支持 (只有 4:2:0)

 

编解码器属性

筛选器通过 ICodecAPI 支持以下属性。

属性 默认 支持的值
AVEncCodecType MPEG-2 视频 CODECAPI_GUID_AVEncMPEG1Video
CODECAPI_GUID_AVEncMPEG2Video
AVEncCommonBufferInLevel 12222464位
AVEncCommonBufferOutLevel 12222464位
AVEncCommonBufferSize 12222464位
AVEncCommonFormatConstraint 未指定 CODECAPI_GUID_AVEncCommonFormatUnSpecified (无格式约束)
CODECAPI_GUID_AVEncCommonFormatDVD_V (DVD 视频)
CODECAPI_GUID_AVEncCommonFormatVCD (视频 CD)
AVEncCommonMaxBitRate 9800000 (9.8 Mbits/秒)
AVEncCommonMeanBitRate 7000000 (7.0 Mbits/秒)
AVEncCommonMinBitRate 128
AVEncCommonMultipassMode 1 1
AVEncCommonQuality 100 1 — 100
AVEncCommonQualityVsSpeed 75 0 — 100
AVEncCommonRateControlMode Cbr eAVEncCommonRateControlMode_CBR
eAVEncCommonRateControlMode_PeakConstrainedVBR
eAVEncCommonRateControlMode_Quality
AVEncInputVideoSystem 未指定 eAVEncInputVideoSystem_Unspecified
eAVEncInputVideoSystem_PAL
eAVEncInputVideoSystem_NTSC
AVEncMPVDefaultBPictureCount 2 0 — 2
AVEncMPVFrameFieldMode 帧模式
AVEncMPVGenerateHeaderSeqDispExt TRUE
AVEncMPVGenerateHeaderSeqExt TRUE
AVEncMPVGOPOpen FALSE
AVEncMPVGOPSInSeq 1 0 — 1
AVEncMPVGOPSize NTSC) 18 帧 (36 个字段;否则) 15 帧 (30 个字段。 1 — 30;请参阅备注
AVEncMPVIntraDCPrecision 9 8 — 10
AVEncMPVLevel
AVEncMPVProfile Main
AVEncVideoDefaultUpperFieldDominant TRUE
AVEncVideoForceSourceScanType Interlaced eAVEncVideoSourceScan_Interlaced
eAVEncVideoSourceScan_Progressive
AVEncVideoInputChromaResolution 4:2:0 eAVEncVideoChromaResolution_420 (4:2:0)
eAVEncVideoChromaResolution_SameAsSource
AVEncVideoInputChromaSubsampling 与源相同
AVEncVideoInputColorNominalRange 与源相同
AVEncVideoInputColorPrimaries 与源相同
AVEncVideoInputColorTransferFunction 与源相同
AVEncVideoInputColorTransferMatrix 与源相同
AVEncVideoMaxKeyframeDistance AVEncMPVGOPSize - 1 0 或 AVEncMPVGOPSize - 1
AVEncVideoNoOfFieldsToEncode 0
AVEncVideoOutputChromaResolution 4:2:0 eAVEncVideoChromaResolution_420 (4:2:0)
eAVEncVideoChromaResolution_SameAsSource
AVEncVideoOutputFrameRate 必须与输入帧速率相同。
AVEncVideoOutputScanType 与输入相同 eAVEncVideoOutputScan_SameAsInput
AVEncVideoPixelAspectRatio 1:1

 

建议按以下顺序设置属性:

  1. AVEncCommonFormatConstraint
  2. AVEncCodecType
  3. AVEncMPVProfile
  4. AVEncMPVLevel
  5. AVEncInputVideoSystem

按任意顺序设置剩余属性。 (但是,请参阅 GOP Structure.)

可以在筛选器图运行时设置属性。 在新设置生效之前,至少有一个 GOP 延迟。

编码器操作

编码 MPEG-1 视频时,如果满足所有约束,编码器会自动在序列标头中设置 1 位 constrained_parameters_flag 代码。

如果需要,编码器会向上舍入输入视频尺寸,使输出视频尺寸符合 MPEG 要求。 对于渐进式视频,输出尺寸在宽度和高度上都向上舍入为 16 的倍数。 对于交错视频,宽度向上舍入为 16 的倍数,高度向上舍入为 32 的倍数。 此舍入操作根据需要使用填充。

如果视频交错,编码器将执行自动电视 (3:2 下拉) 检测。 除了交错帧外,输入视频还可以包含现场图片对。

编码器的内部格式为 4:2:0 IYUV (与 I420) 相同。 它可以从 YUY2、YV12、UYVY 和 RGB-24 视频格式执行颜色转换。

若要将位流限制为 (DVD 或 VCD) 的目标格式,请设置 AVEncCommonFormatConstraint 属性。 如果此属性具有 除 GUID_AVEncCommonFormatUnSpecified 以外的值,则编码器会将 MPEG 语法限制为目标格式允许的语法。

对于实时编码,请将 AVEncCommonQualityVsSpeed 属性设置为零。 这会导致编码器优化速度。

编码模式

编码器支持多种编码模式:

  • CBR) (一次传递常量比特率。
  • 使用恒定的量化器步长 (VBR) 的基于质量的一次通过可变比特率。 在此模式下,编码器尝试达到目标质量级别,最高达到最大比特率。
  • 单通道峰值约束 VBR。 在此模式下,编码器尝试在某些内部限制内实现目标平均比特率。

若要配置编码模式,请设置以下属性:

模式 属性
Cbr AVEncCommonRateControlMode = eAVEncCommonRateControlMode_CBR
AVEncCommonQualityVsSpeed
AVEncCommonMeanBitRate
基于质量的 VBR AVEncCommonRateControlMode = eAVEncCommonRateControlMode_Quality
AVEncCommonQuality
AVEncCommonMaxBitRate
注意: 在此模式下,不使用 AVEncCommonMeanBitRateAVEncCommonMinBitRate 属性。 假定最小比特率为零。
受峰值约束的 VBR AVEncCommonRateControlMode = eAVEncCommonRateControlMode_PeakConstrainedVBR
AVEncCommonMultipassMode = 1
AVEncCommonMinBitRate
AVEncCommonMaxBitRate
AVEncCommonMeanBitRate

 

注意

不支持双传递 VBR。

 

纵横比

(PAR) 显示纵横比和像素纵横比由以下公式相关:

显示纵横比 = PAR × (图片宽度/图片高度)

编码器使用此公式计算 MPEG-1 位流的pel_aspect_ratio值或 MPEG-2 位流的aspect_ratio_information值。 (分别参阅 ISO/IEC 11172 和 ISO/IEC 138181-2。)

编码器按顺序尝试以下设置:

  1. 如果应用程序在筛选器图运行之前随时设置 AVEncVideoPixelAspectRatio 属性,则此属性用于 PAR。
  2. 否则,如果 VIDEOINFOHEADER2 结构的 dwPictAspectRatioXdwPictAspectRatioY 成员不为零,则这些成员将用于显示纵横比,并且根据显示纵横比计算 PAR。
  3. 如果这些值都不存在,则假定 PAR 为 1.0,并相应地计算显示纵横比。

在实时编码模式下 (AVEncCommonQualityVsSpeed 等于零) ,显示纵横比必须为 4:3 或 16:9,默认值为 4:3。 如果计算的显示纵横比不是 4:3 或 16:9,则编码器使用值 4:3。

GOP 结构

若要指定图片组 (GOP) 结构,请依次设置以下属性:

  1. AVEncMPVGOPSize
  2. AVEncVideoMaxKeyframeDistance
  3. AVEncMPVDefaultBPictureCount

编码器根据这些设置生成以下 GOP 结构之一:

AVEncVideoMaxKeyframeDistance AVEncMPVDefaultBPictureCount GOP 结构
0 0 IIII...
AVEncMPVGOPSize - 1 0 IPPP...
AVEncMPVGOPSize - 1 1 IBPBP...
AVEncMPVGOPSize - 1 2 IBBPBBP...

 

默认 GOP 结构为 IBBPBBP...GOP 大小为 15 帧。

如果应用程序通过 AVEncCommonFormatConstraint 属性) 将目标格式限制为 DVD (,并将 AVEncInputVideoSystem 属性设置为 NTSC 或 PAL,则编码器支持以下 GOP 大小:

视频系统 有效的 GOP 大小 默认 GOP 大小
Ntsc 1-18 18 (36 个字段)
PAL 1-15 15 (30 个字段)

 

编解码器属性更改列表

设置一个编解码器属性的值可以更改另一个属性的有效范围。 (例如,约束目标格式会限制平均比特率。) 每当应用程序设置属性时,编码器都会检查任何其他属性现在是否超出其有效范围。 如果是这样,编码器会将该属性重置为其新的默认值。 若要在发生这种情况时接收通知,请执行以下操作:

  1. 使用值 CODECAPI_CHANGELISTS 调用 ICodecAPI::RegisterForEvent
  2. 使用 IMediaEventEx 接口监视筛选器图中的事件。
  3. 如果属性的范围或默认值发生更改,编码器将发送包含已更改属性列表 的 EC_CODECAPI_EVENT 事件。

IEncoderAPI 支持

为了向后兼容,筛选器通过 IEncoderAPI 接口支持以下属性:

属性 说明
ENCAPIPARAM_BITRATE 等效于 AVEncCommonMeanBitRate
ENCAPIPARAM_PEAK_BITRATE 等效于 AVEncCommonMaxBitRate
ENCAPIPARAM_BITRATE_MODE 等效于 AVEncCommonRateControlMode

 

设置 ENCAPIPARAM_BITRATE_MODE 属性时,值映射如下:

ENCAPIPARAM_BITRATE_MODE AVEncCommonRateControlMode
ConstantBitRate eAVEncCommonRateControlMode_CBR
VariableBitRateAverage 请参阅“注意”。
VariableBitRatePeak eAVEncCommonRateControlMode_PeakConstrainedVBR

 

注意

目前,MPEG-2 视频编码器不支持 VariableBitRateAverage 编码模式。 如果设置此值,编码器默认为 CBR 编码 (eAVEncCommonRateControlMode_CBR) 。

 

获取 ENCAPIPARAM_BITRATE_MODE 属性时,将按如下所示映射值:

AVEncCommonRateControlMode ENCAPIPARAM_BITRATE_MODE
eAVEncCommonRateControlMode_CBR ConstantBitRate
eAVEncCommonRateControlMode_Quality VariableBitRatePeak
eAVEncCommonRateControlMode_PeakConstrainedVBR VariableBitRatePeak

 

限制

目前,编码器不支持以下任何功能:

  • 生成数据包化的基本流 (PES) 数据包。
  • 帧速率转换。 输入流必须具有对 MPEG-2 位流有效的帧速率。
  • MPEG-2 (frame_rate_extension_n 的帧速率扩展, frame_rate_extension_d) 。
  • 进入/退出缓冲区 (VBV) 剪辑的位置。
  • 将第 21 行数据 (隐藏式字幕信息) 插入视频基本流。
  • 在 MPEG-2 的 GOP 标头中设置 25 位 time_code 字段。
  • 去noise 筛选器。
  • 数字版权管理 (DRM) 。

编码器引入至少一个 GOP 的编码延迟。

要求

要求
最低受支持的客户端
Windows Vista 家庭高级版、Windows Vista 旗舰版、Windows 7 家庭高级版、Windows 7 专业版、Windows 7 企业版、Windows 7 旗舰版 [仅限桌面应用]
最低受支持的服务器
无受支持的版本
标头
Wmcodecdsp.h

请参阅

DirectShow 筛选器

MPEG-2 多路复用器媒体类型