如何使用Windows MediaTranscoder API将HDR视频转码为SDR视频
Windows MediaTranscoder 设置转码输出位深度(HDR转SDR)的实现方法
你需要手动修改MediaEncodingProfile的视频编码属性来指定输出位深度,预设的CreateMp4重载方法没有直接暴露位深度设置入口,具体操作步骤如下:
步骤1:创建基础编码配置
先用预设方法创建目标分辨率的基础编码配置:
MediaEncodingProfile profile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.HD720p);
步骤2:修改视频编码属性配置位深度
从profile中取出视频编码属性对象,设置目标位深度及匹配的像素格式:
var videoProps = profile.Video; // 设置输出位深度为8位(SDR的标准位深度) videoProps.BitDepth = 8; // 设置匹配8位深度的像素格式,NV12为绝大多数硬件、播放器兼容的通用格式 videoProps.Subtype = MediaEncodingSubtypes.Nv12; // 可选配置:强制标记输出为SDR动态范围,避免识别异常 videoProps.NominalDynamicRange = MediaVideoDynamicRange.Sdr;
步骤3:配置转码器启用自动色调映射(HDR转SDR必选)
如果是HDR源转SDR,需要开启转码器内置的视频处理能力,自动完成HDR到SDR的色域、亮度映射:
MediaTranscoder transcoder = new MediaTranscoder(); // 启用内置视频处理管线,自动完成色调映射 transcoder.AlwaysUseVideoProcessing = true;
注意事项
- 位深度设置需要和
Subtype指定的编码子类型匹配:8位深度对应Nv12、Yuy2等子类型,10位深度对应P010等子类型,格式不匹配会导致配置不生效或转码失败。 - 如果需要输出10位SDR或10位HDR内容,修改
BitDepth为10并匹配对应子类型即可。
内容的提问来源于stack exchange,提问作者Sazzad Hissain Khan
相关产品推荐
相关产品推荐

