我正在缓慢上传几张截图,说一下主要问题。
前2张是原本的1080p视频配上1920x1080的字幕,除了上面所说的分辨率问题,色彩也有区别,但具体是哪个色彩有问题我也不清楚,个人感觉MPC-HC的更正常一些。
后2张是把这个字幕随便放在一个720p的视频里,可以看出这时DirectVobSub把1920x1080的字幕渲染到720p的视频上也出现了问题,MPC-HC则是把1920x1080的字幕渲染到1366x768的窗口上。而且明显是MPC-HC的字幕更清楚,因为分辨率与屏幕匹配。
点击图片查看原图
1920x1080字幕,1920x1080视频,1920x1080屏幕,MPC-HC字幕,最正确的显示
1920x1080字幕,1920x1080视频,1920x1080屏幕,DirectVobSub字幕的图就不上了,2者除了颜色有区别,效果都是正常的。
1920x1080字幕,1920x1080视频,1366x768屏幕,MPC-HC字幕
1920x1080字幕,1920x1080视频,1366x768屏幕,DirectVobSub字幕
1920x1080字幕,1280x720视频,1366x768屏幕,MPC-HC字幕
1920x1080字幕,1280x720视频,1366x768屏幕,DirectVobSub字幕
总结以后,如果要正确显示字幕的样式,MPC-HC字幕需要字幕属性里的分辨率和最后输出的屏幕分辨率相同,DirectVobSub则是需要字幕属性里的分辨率和视频的分辨率相同,而且后者在视频分辨率与屏幕分辨率不同时,字幕也会做Resize,导致视觉效果变差,特别是upscale的情况。
关于颜色的问题,我猜测是DirectVobSub的字幕弄进视频帧用的YV12和RGB转换矩阵是BT.601,但是整个高清视频最后在渲染器里转换时用的是BT.709,所以导致颜色出错。我试了EVR和madVR都是一样。
所以我又试了一下ffdshow强制RGB32输出,配合EVR渲染器,这样DirectVobSub的字幕弄进视频帧就直接是RGB的了,渲染器中不需要再进行YV12和RGB的转换,实际截图也证明了这样的色彩和MPC-HC字幕是一样的。但是这种RGB32强制输出的方式目前是不适用于10bit视频的,所以总的来说能用MPC-HC的字幕就尽量用。