在视频解码方面,为什么硬件解码跟软件解码比起来,前者的画面质量总是肉眼可见地略逊一筹?

论坛 期权论坛 期权     
匿名用户1024   2021-5-15 09:16   10597   5
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
有关回应  16级独孤 | 2021-5-15 09:16:48 发帖IP地址来自
话说 解码和输出关系大么?
测试了下用 POTPLAYER ffmpeg关DXVA和开的对比,渲染器用的普通视频渲染而没用madVR之类。
视频取自憨豆特工115555帧
关闭


开启


有区别噻?


用Diffimg测试,好吧软件是我自己闲的汉化的不是很完全,但看到没有任何区别。去doom9找了下貌似也说是差不多完全一样。

嗯PC上 貌似解码不影响渲染输出。


视频信息:Johnny English (CHD)
文件格式                                     : AVC
文件格式/信息                                  : Advanced Video Codec
帧率                                       : 23.976 fps
色彩空间                                     : YUV
色度抽样                                     : 4:2:0
位深度                                      : 8位
编码函数库                                    : x264 core 118 r2085 8a62835


额 这个MPEG2 用VMR9无渲染
AMD Video Decoder对FFdshow
ffdshow

AMD Video Decoder







视频  secret base ~君がくれたもの~
文件格式                                     : MPEG Video
格式版本                                     : Version 2
帧率                                       : 29.970 fps
标准                                       : NTSC
色彩空间                                     : YUV
色度抽样                                     : 4:2:0
位深度                                      : 8位
3#
有关回应  16级独孤 | 2021-5-15 09:16:49 发帖IP地址来自
解码的本质就是将一个个原来被编码的数据变成一个个像素点对应的像素值(YUV或者RGB)。会造成两者差异性的地方通常在下面三个方面:
1. 变化和量化精度的不同:解码过程中,硬件和软件可能造成区别的地方是反量化和DCT变换或者小波变换或者其他变换,可能存在一些硬件为了设计上的简便对精度进行了一些调整,因此会造成最后像素值的差异。但是,这些差异在现在硬件解码上,肉眼是基本看不出来的。
2. 像素插值:常用的编码采用的是YUV420的色彩采样,对每个像素采样的时候,对亮度逐个采样,但是色差是4个像素采样一个,如下图4个像素:
     A(采样Y,U,V)    B(Only Y)
     C(Only Y)            D(Only Y)
   BCD点的UV值采用的是与A相同的UV值(也有其他的,比如取ABCD 4点UV的均值)。
   但是,在解码后播放的时候,硬件和软件对于ABCD的UV值可能会采取不同的策略(这种差异同样也会出现在两个不同的解码方案上),以保证每个显示的像素都有各自的UV值,这个策略可能是直接使用A点UV值,或者与相邻的4个像素进行滤波处理,达到像素间平滑,例如双线性的插值。在早期的硬件解码时,显卡中没有专门的用于解码的模块,因此在这些处理上往往会用更加快速而不是精度的方法去实现,因此会造成画质上的差异。
3. 显示输出:在解码结束的时候,需要将结果在屏幕上输出,硬件解码结果往往可以直接用于显示,但是软件解码的结果需要从内存传递到显存后进行输出。这当中需要进行一次转换,假设显示的时候使用的api要求使用RGB的输出,但是解码的结果是YUV的,那么需要进行一次转换,这是一个线性的转换,但是由于像素的精度只有8bit,因此会有一些差值(1/255之内),当然,这个肉眼几乎看不出来的。

综上,造成软解和硬解画质上区别的原因主要是在解码和显示过程中一些计算精度上的区别,造成了两者的区别。通常来说,软解在这些计算精度上会比硬解更高。
如果使用更高的码率(更小的量化单位),更高的bit色的时候,这些差异会减小,但是会增加加酸量。
同时,随着硬件的不断发展,现在的显卡或者soc都会有独立的解码模块,计算的精度也越来越高了,这种差异正在逐步减小。
4#
有关回应  16级独孤 | 2021-5-15 09:16:50 发帖IP地址来自
题目里的这个玄学测评可不行,要用科学的经过测试的办法来评价;


用一些工具先简单的测试一下

测试用视频 DOTA Dragon Blood 第一季第一集前 01:30,片源 1920x1080,主要暂时手上没别的,哪天有空拿别的再测一下;
主要目标用 NetFlix 的 vmaf Netflix/vmaf 工具来衡量不同解码下的画面质量


首先用 ffmpeg 通过不同的方式将 mp4 的片源转化为 yuv,显卡为 RTX2060
  1. ffmpeg -i source.mp4 -c:v rawvideo -pix_fmt yuv420p software.yuvffmpeg -hwaccel cuda -i source.mp4 -c:v rawvideo -pix_fmt yuv420p hardware-cuda.yuvffmpeg -hwaccel dxva2 -i source.mp4 -c:v rawvideo -pix_fmt yuv420p hardware-dxva2.yuv
复制代码
可以观察到第一种只有 CPU 占用,后两个有大量 GPU Video Decode 占用


然后通过 vmaf 默认模型将 software.yuv 和 hardware-cuda.yuv 用 Netflix/vmaf Models 进行比较,得到 98.6 的分数

得分超过 95 可以认为肉眼分辨不出区别
所以单从软硬件解码上,输出的视频是看不出区别的
也就是说题目里说的不成立啊
5#
有关回应  16级独孤 | 2021-5-15 09:16:51 发帖IP地址来自
谢邀,来晚了。
理论上来说是合乎标准的硬件解码器和软件解码器的输出应该是一样的。
实际实现上,硬件解码可能比较容易出一些异常,处理得不好有可能影响画质吧。
赞同楼上的回答。
6#
有关回应  16级独孤 | 2021-5-15 09:16:52 发帖IP地址来自
在播放平均码率低于3MB/s的视频时,解码对画面的影响微乎其微,主要影响画面的是渲染这一步,粗略的说至少占80%
硬件解码影响画面的主要原因是用了yuv420输出格式,很显然它比完全体yuv444少一半,别看整整少了一半,但实际中影响很小,主要原因是片源本身就不够清晰,吃不满整个输出,打个比方,你用垃圾相机拍了一张图片,放廉价显示器上看和放高价显示器上看效果差不多,因为图片本身太差劲了,显示器根本没构成太大瓶颈
另外,硬件解码也不是只能输出yuv420,有的硬件也能输出yuv444,一般来说,电脑显卡都能输出yuv444,但会极大的增加运算量,不过如果不在乎用电费,让他输出也行,电视和手机要看芯片参数,能不能不一定
软件解码也不全都是yuv444,基本上没有手动设置过的播放器(也包括压根没有这个设置选项的播放器),软件解码也是yuv420
回到问题本身?那肉眼可见的差距是哪里来的?
答:在换软硬解码时,播放器偷偷把渲染器也给换了
硬件解码配套的渲染器是对性能需求比较小的(自然画面也差)
软件解码搭配的渲染器是对性能需求比较大的(自然画面也好)
为什么要这么搞?
因为如果不这么弄,低性能电脑怎么设置播放起来都卡,如果给出更复杂的选项,就不符合刷瓜式播放器这个定位
你想要精益求精,请用类似potplayer这样的播放器
最后,轻度追求画质的用户没必要去倒腾解码器,换个好渲染器效果立竿见影,比如madvr
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:136515
帖子:27303
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP