我正在尝试使用MF H.265编码视频,无论我如何尝试,其质量始终低于非MF编码器所要求的相同设置的视频,例如VideoPad在相同的4000比特率。
Videopad产生一个游泳男孩的this视频。我的应用产生了this视频。我的应用程序中的天空在6K比特率下显然更糟,而VideoPad在1K比特率下。
pMediaTypeOutVideo->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video);
pMediaTypeOutVideo->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_HEVC);
pMediaTypeOutVideo->SetUINT32(MF_MT_AVG_BITRATE, 4000000);
MFSetAttributeSize(pMediaTypeOutVideo, MF_MT_FRAME_SIZE, 1920,1080);
MFSetAttributeRatio(pMediaTypeOutVideo, MF_MT_FRAME_RATE, 25, 1);
MFSetAttributeRatio(pMediaTypeOutVideo, MF_MT_PIXEL_ASPECT_RATIO, 1, 1);
pMediaTypeOutVideo->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive);
pMediaTypeOutVideo->SetUINT32(MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_Wide);
CComPtr<ICodecAPI> ca;
hr = pSinkWriter->GetServiceForStream(OutVideoStreamIndex, GUID_NULL, __uuidof(ICodecAPI), (void**)&ca);
if (ca)
{
if (true)
{
VARIANT v = {};
v.vt = VT_BOOL;
v.boolVal = VARIANT_FALSE;
ca->SetValue(&CODECAPI_AVLowLatencyMode, &v);
}
if (true)
{
VARIANT v = {};
v.vt = VT_UI4;
v.ulVal = 100;
hr = ca->SetValue(&CODECAPI_AVEncCommonQualityVsSpeed, &v);
}
if (true)
{
VARIANT v = {};
v.vt = VT_UI4;
v.ulVal = eAVEncCommonRateControlMode_Quality;
ca->SetValue(&CODECAPI_AVEncCommonRateControlMode, &v);
if (true)
{
VARIANT v = {};
v.vt = VT_UI4;
v.ulVal = 100;
ca->SetValue(&CODECAPI_AVEncCommonQuality, &v);
}
}
}
无论如何,4000k的质量仍然不如ffmpeg产生的质量。同样eAVEncCommonRateControlMode_Quality
和CODECAPI_AVEncCommonQuality
似乎没有生效(在H.264中有效)。要获得更好的质量,唯一的方法是提高比特率。
此外,速度参数似乎也不会影响质量或编码器速度。
即使使用1000k Videopad制作的视频在天空中也没有像素化。当然,它的速度是1/100。
硬件NVIDIA编码器是否比基于软件的ffmpeg差?我想念什么?
编辑:使用软件渲染(从MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS
到FALSE)也同样糟糕。
我用MediaInfo检查了两个视频,很明显它们使用了不同的HEVC配置文件,这应该是影响NVidia编码视频质量的主要原因。这是比较屏幕截图:
您可以尝试将输入的IMFMediaType中的MF_MT_VIDEO_PROFILE设置为eAVEncH265VProfile_Main_420_8。另外,MF_MT_MPEG2_LEVEL也应相应设置。例如到eAVEncH265VLevel4_1。
也许仅仅是因为软件编码器比硬件编码器要好。
[如果我看一下:https://www.techspot.com/article/1131-hevc-h256-enconding-playback/page7.html,与x265(2016年日期)相比,我还将确认硬件nvidia编码器是错误的。
我无法进行更多调查,但是根据我对您的帖子的了解:
我发现至少三个论坛说NVidia HEVC编码器使图像模糊。并且您确认了这一点,所以...是否为假新闻,(日期为2018/2019)。]
来自NVidia https://developer.nvidia.com/nvidia-video-codec-sdk#NVENCFeatures(日期未定义)。>>
我对此图一无所知,但NVidia似乎假装它们是最好的...所以还是假新闻。
谁是最好的...
询问NVidia,它们通常应该告诉您最佳的Mediafoundation设置,以获取正确的视觉视频,而不会造成模糊...从我的NVidia论坛经验中,您可以等待很长时间才能得到答案...