Microsoft MPEG-2 视频编码器
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 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_Video、 MEDIASUBTYPE_I420
MEDIATYPE_Video、 MEDIASUBTYPE_IYUV
MEDIATYPE_Video、 MEDIASUBTYPE_RGB24
MEDIATYPE_Video、MEDIASUBTYPE_UYVY
MEDIATYPE_Video、 MEDIASUBTYPE_YUY2
MEDIATYPE_Video、 MEDIASUBTYPE_YV12
输入引脚接口
IMemInputPin
IPin
IQualityControl
输出引脚媒体类型
MEDIATYPE_Stream、 MEDIASUBTYPE_MPEG2_VIDEO
MEDIATYPE_Stream、 MEDIASUBTYPE_MPEG2_PROGRAM
MEDIATYPE_Stream、 MEDIASUBTYPE_MPEG2_TRANSPORT
MEDIATYPE_Video、 MEDIASUBTYPE_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 |
建议按以下顺序设置属性:
按任意顺序设置剩余属性。 (但是,请参阅 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 注意: 在此模式下,不使用 AVEncCommonMeanBitRate 和 AVEncCommonMinBitRate 属性。 假定最小比特率为零。 |
受峰值约束的 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。)
编码器按顺序尝试以下设置:
- 如果应用程序在筛选器图运行之前随时设置 AVEncVideoPixelAspectRatio 属性,则此属性用于 PAR。
- 否则,如果 VIDEOINFOHEADER2 结构的 dwPictAspectRatioX 和 dwPictAspectRatioY 成员不为零,则这些成员将用于显示纵横比,并且根据显示纵横比计算 PAR。
- 如果这些值都不存在,则假定 PAR 为 1.0,并相应地计算显示纵横比。
在实时编码模式下 (AVEncCommonQualityVsSpeed 等于零) ,显示纵横比必须为 4:3 或 16:9,默认值为 4:3。 如果计算的显示纵横比不是 4:3 或 16:9,则编码器使用值 4:3。
GOP 结构
若要指定图片组 (GOP) 结构,请依次设置以下属性:
编码器根据这些设置生成以下 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 个字段) |
编解码器属性更改列表
设置一个编解码器属性的值可以更改另一个属性的有效范围。 (例如,约束目标格式会限制平均比特率。) 每当应用程序设置属性时,编码器都会检查任何其他属性现在是否超出其有效范围。 如果是这样,编码器会将该属性重置为其新的默认值。 若要在发生这种情况时接收通知,请执行以下操作:
- 使用值 CODECAPI_CHANGELISTS 调用 ICodecAPI::RegisterForEvent。
- 使用 IMediaEventEx 接口监视筛选器图中的事件。
- 如果属性的范围或默认值发生更改,编码器将发送包含已更改属性列表 的 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 旗舰版 [仅限桌面应用] |
最低受支持的服务器 |
无受支持的版本 |
标头 |
|
请参阅