Chiphell - 分享与交流用户体验

 找回密码
 加入我们
搜索
      
查看: 13156|回复: 67

10bit视频编码——特性及全面播放方法介绍

  [复制链接]
发表于 2012-1-18 16:51 | 显示全部楼层 |阅读模式
本帖最后由 mawen1250 于 2012-1-23 14:23 编辑

不知道发在这个板块合不合适,去年暑假写过一篇,现在了解更多了,所以全部重写了 。

测试用视频:
http://115.com/folder/fdon21ks

一、前言

      10bit视频的播放,想偷懒的人可以直接用最新版MPC-HC、Potplayer、mplayer、QQ影音等播放器,或者使用各种解码包的最新版(都是使用ffdshow/LAV实现解码的),其内部解码器都是基于ffmpeg(libav)的。这些播放器和解码器中用的色彩转换也基本都是libswscale,所以有部分会出现色彩空间转换上的错误以及dither方式的不恰当。并且由于10bit YUV到8bit YUV再到8bit RGB的坑爹转换过程使损失也大大增加(前一步对于10bit而言还有dither的过程,可以增加一定的精度,8bit视频播放就是做了后面的一步,所以即使这样10bit的效果也还是比8bit重编码的情况好不少)。
      于是对回放质量(8bit、10bit都能受益)有追求的可以参考下面介绍的基于MPC-HC使用madVR的播放教程,也可以看VX的播放攻略,其中也包括对于电脑性能不足的情况的解决方案:http://www.vempx.net/article/552.htm

      关于10bit视频播放对电脑性能的要求,主要是不支持硬解(包括DXVA、CUVID、QuickSync),所以要靠软解,而目前软解10bit视频效率最高的就是LAV Video Decoders,基本上短时码率不超过30Mbps的话现在的双核CPU都能应付。但为了最佳的回放要靠madVR渲染器,而madVR内部各种mad的处理过程靠的不是CPU,而是GPU的Shader,也就是说显卡不能太差,显卡要能支持DX 9.0c,显存最好在384MB以上,对显卡性能的要求我没有什么可以参考的依据,只知道我自己笔记本上的GT420M和HTPC上的HD5550都毫无压力。



二、10bit的优势

      有关10bit重编码的优势,实际上就是用更高位深来进行数据的有损编码的优势,而且bit越高效果越好。最简单的一句话就是,压缩率更高,以更低的码率提供更好的还原效果,这已经足够具有意义了。
      在二进制下对8bit的源数据进行有损编码,造成相同量化损失时,以8bit为100%的error(残差)时,9bit为50%的error,10bit为25%,12bit为6.25%……所以在HEVC(也就是H.265)里有个叫IBDI(Internal bit depth increase)的技术,就是用12bit的内部精度来进行8bit源数据的重编码。
      例如:
      8bit源数据:  10011010
      8bit量化后:  10011011
      10bit量化后:1001101001
      12bit量化后:100110100001

      当然相同量化时肯定是bit越高的数据占的容量多,但由于损失程度的降低,综合下来的结果是,相同码率下高位深编码的还原程度始终大于等于低位深。
      而其实在目前的大部分有损音频编码里,不管输入的是16bit整数还是24bit整数,其内部都是用32bit浮点数来进行编码的,能大大减小error。至于为什么不在视频里用浮点数编码,可能的原因之一是,目前最强的桌面级CPU也只能勉强解码一个浮点数编码的1080p 24fps视频。

      至于你想说:“我只有8bit的显示设备,10bit有什么用呢?” 这不是什么问题,因为最终是要靠dither(抖动)转换成8bit RGB的,事实上madVR内部是不管你8bit还是10bit输入,都先升到16bit进行处理,最后再dither成8bit RGB32进行输出,所以它才能实现最高精度的转换和最小的error。
      而且最近还有这么一篇文章,对不同位深的YUV空间的色彩数量进行分析,发现8bit YUV转换成RGB后远远到达不了8bit RGB的16777216色(目前大部分高清视频就是属于8bit-Rec709的情况),只有用10bit及以上精度YUV转换为8bit RGB才能达到16.7M色:http://goldenhige.cocolog-nifty. ... gb2416777216yu.html

      另外也可参考这里taro大所说的:http://tieba.baidu.com/p/1356709843?pn=2



三、对比测试

      我对10bit与8bit编码的客观测试结果,横轴为码率,竖轴为1/(1-SSIM),SSIM(结构相似度)是一种衡量两画面间相似度的算法(在这里是编码后的视频和源视频的比较)。另外我这里出于个人需求顺便对mbtree的情况做了测试,对此不感兴趣的可以无视。

上图以Clannad AS EP01的3654-17653帧(正片的大约前一半,不含OP)为测试片段,代表典型动画的情况。
下图以The Dark Knight的1273-9327帧为测试片段,代表电影的情况,而且是全部IMAX的片段,噪点也比较少,可以看作高画质片源。


      上图中可以看到同样达到200的1/(1-SSIM)时,8bit需要4500kbps,而10bit只需要1200kbps,这样的优势我觉得不需要多说什么了。
      根据我的经验,10bit对于gradient(梯度变化)的画面(特别像是暗场之类的)优势特别明显,客观上SSIM值很高,主观上基本不会产生banding(色彩过渡区域的色带)。
      当然我也遇到了个别奇葩片源比如龙珠Z的BD-BOX,非常强的动态噪点,crf=20跑出来了25Mbps的码率,而且这时10bit和8bit重编码的差距基本可以忽略。



四、播放相关

我更新这篇文章时(2012.1.18)所使用的软件及版本:
Media Player Classic HomeCinema (x86), 1.5.3.3971, BE Mod
ffdshow tryouts project, svn 4257 (x86) - MSVC2010
LAV Filters 0.44
madVR 0.80
Haali Media Splitter v1.11.288.0
Reclock 1.8.7.7

下面我以基于MPC-HC的播放设置为例,其他播放器的做法也类似。


播放推荐使用的软件/滤镜:

1.(推荐)MPC-HC播放器下载地址:
http://www.xvidvideo.ru/media-player-classic-home-cinema-x86-x64/

http://xhmikosr.1f0.de/index.php?folder=bXBjLWhj
下载x86版本

2.(可选但推荐)LAV Filters——分离器/音视频解码器下载地址:
http://forum.doom9.org/showthread.php?t=156191

http://xhmikosr.1f0.de/index.php?folder=bGF2ZmlsdGVycw
下载“Installer (both x86/x64)”,也就是安装版,使用最方便
安装时注意勾选FLAC的分离、解码支持

3.(推荐)madVR渲染器下载地址:
http://forum.doom9.org/showthread.php?t=146228
下载以后解压出来的madVR文件夹放在纯英文目录中,然后双击里面的install.bat即可注册好,注意保留这个文件夹。

4.(可选)Haali分离器下载地址:
http://customers.corecodec.com/downloads.php

http://www.free-codecs.com/haali_matroska_splitter_download.htm
mkv还是更推荐使用Haali Media Splitter作为分离器,因为它能支持文件间的Link,比如一些把OP、ED切到外面去的压制,然后播放正片时会自动根据UID在指定的章节连接到那些文件。
如果不需要这个功能的话,LAV Splitter就够用了。
但是Haali有个霸道的设定,改变了H.264的MediaType,导致一些解码器无法正常调用(我这里用到的LAV和ffdshow没有问题),所以如果需要用到其他一些解码器的话在Haali的设置里将Output——Use custom media type for H.264设为No。

另外现在也有个AV Splitter,支持更多自定义的高级功能,喜欢折腾的可以尝试。

5.(可选)ffdshow tryout解码器组件下载地址:
http://www.xvidvideo.ru/ffdshow-tryouts-project-x86-x64/

http://xhmikosr.1f0.de/index.php?folder=ZmZkc2hvdw
下载x86版本,Intel的CPU可以选icl12编译版,MSVC2010编译版通用。

6.(可选)Reclock下载地址:
http://forum.slysoft.com/forumdisplay.php?f=85
我主要是用到了它的WASAPI独占输出,可以实现音频解码后的PCM信号bit exact输出至音频设备(不受操作系统的混音、重采样影响)。

7.(可选)xy-VSFilter下载地址
http://code.google.com/p/xy-vsfilter/downloads/list
一个国人基于VSFilter 2.39进行优化修改后的VSFilter,对于ASS字幕播放的效率大大提高,也能支持10bit/16bit的输入/输出,自动根据分辨率判断BT.601/BT.709进行RGB转换……

备注:
现在LAV Filters、madVR、xy-VSFilter间正在研究新的滤镜间的通信方式,比如最近LAV和madVR同时放出测试版,前者支持DXVA2硬解码(仅用于Win 7/Vista),并且想办法将硬解后的视频从显存中抓回来以NV12输出(以前硬解后的视频就直接交由显卡处理后输出至显示器,所以存在各种限制),然后可以输入ffdshow做后处理、VSFilter渲染字幕,并可以用madVR来渲染……
而xy-VSFilter和madVR也在研究新的字幕的传递、渲染方式。目前无论是VSFilter将字幕渲染在解码器输出的视频流后再给渲染器处理(Resize、RGB Conversion)的方式,还是MPC-HC内置字幕引擎将字幕渲染在渲染器层(已经过RGB转换、resize和加黑边)的方式,都存在其固有的弊端,今天ANE也有篇新文章讲到了这个问题:http://afternoonnapsempire.org/subtitle-renderer-matters/



五、播放设置图文教程

      要强调一点以避免人误会,以下的播放设置是全方面播放设置的教程,也是我自己使用的方案,但只有一部分是关于10bit的(实际上对8bit也一样,这样做是最有利于回放效果的)。
      所以如果只是为了完美回放8bit/10bit H.264视频,只要安装并在渲染器里选择madVR就可以了,可以参考VX的播放攻略:http://www.vempx.net/article/552.htm

1.字幕设置




2.滤镜调用设置




3.滤镜内的设置










4.渲染器设置







另外补充一点,Reclock本身是开发出来用于音视频同步、PAL降速等工作的,所以其工作与频率密切相关,如果你的CPU超频或降频了很可能会出现播放速度上的问题,这时你只能不用Reclock或者恢复默认频率。

5.播放时的音视频流切换


评分

3

查看全部评分

发表于 2012-1-18 16:53 | 显示全部楼层
沙发?
发表于 2012-1-18 16:56 | 显示全部楼层
放到显卡区干嘛。。。10BIT连硬解都不能完全不在这讨论范围吧。。
发表于 2012-1-18 17:00 | 显示全部楼层
很详细,不过LZ如果做个近似码率的10bit vs 8bit的CPU性能消耗对比更好。
但我估计这东西只有支持硬解的硬件普及了后才有可能推广。就好像现在1080p60还没普及一个道理。
发表于 2012-1-18 17:02 | 显示全部楼层
这个放在这里意义不明
 楼主| 发表于 2012-1-18 17:22 | 显示全部楼层
原先写的那篇是放在水区了,然后有人说可以发到显卡区来,于是就这样了……
发表于 2012-1-18 17:25 | 显示全部楼层
很不错啊,这个值得研究下。
发表于 2012-1-18 17:32 | 显示全部楼层
很详细。

不过觉得楼主写这篇教程的目的性不明确~

播放这一类高位视频的意义是什么?需要什么样的硬件?(如pc端的配置、显示器端的面板或者电视机的型号)能不能硬解(相应到具体工业的ARM、解码器)?等等……
发表于 2012-1-18 18:04 | 显示全部楼层
LZ你居然跑这里来了...支持啊~*/-12
发表于 2012-1-18 18:07 | 显示全部楼层
现在没时间弄啊。。等有时间了试试
发表于 2012-1-18 18:19 | 显示全部楼层
让所有人都去按这几页的设置去折腾,简直是蛋疼
这么多插件,估计bug也不少,还得追着更新吧?
这就说明10bit编码目前来说完全是自hign的不成熟产品,也就是垃圾
因为如果不是垃圾
早就会有人做好稳定的编码解码器
早就会有人做好一键播放的软件
何必像现在一样 一遍遍地造轮子 做这些看似复杂、实际低级重复的事
 楼主| 发表于 2012-1-18 18:37 | 显示全部楼层
本帖最后由 mawen1250 于 2012-1-18 18:43 编辑
麦特 发表于 2012-1-18 18:19
让所有人都去按这几页的设置去折腾,简直是蛋疼
这么多插件,估计bug也不少,还得追着更新吧?
这就说明10b ...

你确定我那么多教程都是为了播放10bit而写的?你要简单的话有一个madVR渲染器就能完美播放。
编码解码不是都有么?而且这本来就是H.264标准里的东西,你不能因为你还在用的那些老的东西不能支持就去否认它的价值。事实上我上面所说到的支持10bit解码的播放器、解码器都是基于开源项目ffmpeg/libav的,你能找到的所有XX影音里面的音视频解码基本都是用ffmpeg的。 你要商业软件的话DiVX H.264 Decoder和MainConcept也支持。
 楼主| 发表于 2012-1-18 18:38 | 显示全部楼层
狂风战士 发表于 2012-1-18 17:32
很详细。

不过觉得楼主写这篇教程的目的性不明确~

意义我上面都说的很明白了,需要什么硬件我也说了,码率不是很高的话目前的双核都能满足的。
发表于 2012-1-18 18:53 | 显示全部楼层
本帖最后由 麦特 于 2012-1-18 18:53 编辑
mawen1250 发表于 2012-1-18 18:37
你确定我那么多教程都是为了播放10bit而写的?你要简单的话有一个madVR渲染器就能完美播放。
编码解码不是 ...

1、不存在“完美”一说,10bit相应的各种插件解码器渲染器都在不断更新修复大量bug。

2、全世界可能有几百个播放器,几十个常用播放器,但一个能直接高质量播放10bit的播放器都没有,这说明不仅我认为10bit是不成熟的自high,各位软件作者也这么想。

3、所以我没有觉得你帖子不好,我是觉得这种帖子对用户没有意义。你可以发给播放器软件的作者,比如qq影音,让他们的软件可以自动识别10bit编码并正确解码。用户是负责享受,不是负责发明创造,更何况这种繁琐的设置 连 发明创造都谈不上,只是低级重复而已。
发表于 2012-1-18 19:05 | 显示全部楼层
麦特 发表于 2012-1-18 18:53
1、不存在“完美”一说,10bit相应的各种插件解码器渲染器都在不断更新修复大量bug。

2、全世界可能有几 ...

人家感兴趣就好啦,干嘛低级重复低级重复的说来说去,你这样对感兴趣的人很不尊重哎。
 楼主| 发表于 2012-1-18 19:10 | 显示全部楼层
本帖最后由 mawen1250 于 2012-1-18 19:11 编辑
麦特 发表于 2012-1-18 18:53
1、不存在“完美”一说,10bit相应的各种插件解码器渲染器都在不断更新修复大量bug。

2、全世界可能有几 ...

但对于8bit也是一样的,Limited Range YUV(16-235)——>Full Range RGB(0-255)这步大部分的解码器/渲染器都是做得不好(只是不好,但没有错误可言),很容易引入banding。而只有madVR这种内部精度16bit并且有很好的dither算法的渲染器才能实现最好的回放效果。
发表于 2012-1-18 19:24 | 显示全部楼层
没有要求就用个企鹅播放器,mpc-hc,mplayer,pot,都能搞定10bit...
普通用户也不会去纠结那些问题...
高级用户自然会自己去研究...
发表于 2012-1-18 19:40 | 显示全部楼层
麦特 发表于 2012-1-18 18:19
让所有人都去按这几页的设置去折腾,简直是蛋疼
这么多插件,估计bug也不少,还得追着更新吧?
这就说明10b ...

"让所有人...简直是蛋疼"
"垃圾"
这种充斥无聊逻辑的回复 建设性在哪里? 可以申请ban吗
发表于 2012-1-18 20:01 | 显示全部楼层
本帖最后由 =456123 于 2012-1-18 20:02 编辑

madVR 好是好,仓库机太老胜任不了啊 ,EVR路过,10BIT的视频虽然效果拔群,老机器越来越吃力了
发表于 2012-1-18 20:42 | 显示全部楼层
文章结构有点问题*/-19


文章内容再好,也需要忽悠人来吸引眼球。

要推销"全面播放方法",必须要花篇幅向 读者=看片的人 展示这么做有什么价值,而不是引用一下就完了。
(e.g. 10-bit encoded ** are common/growing common;encode as 8-bit=>severe banding)

你的概述,写得真心不是概述*/-91标题也没很好的吻合内容
发表于 2012-1-18 21:02 | 显示全部楼层
toniisland 发表于 2012-1-18 19:05
人家感兴趣就好啦,干嘛低级重复低级重复的说来说去,你这样对感兴趣的人很不尊重哎。 ...

我的话请看清楚。

楼主说出正确的播放方法,不是低级重复,但是让用户这样自己动手改设置是低级重复,基本等价于“唱一遍国歌,背三首唐诗,看片软件才能启动”
这个过程显然应该由软件作者完成,而因为目前地球上没有一个软件作者屑于做这件事,说明10bit目前基本上是自high。
 楼主| 发表于 2012-1-18 21:55 | 显示全部楼层
本帖最后由 mawen1250 于 2012-1-18 22:00 编辑
麦特 发表于 2012-1-18 21:02
我的话请看清楚。

楼主说出正确的播放方法,不是低级重复,但是让用户这样自己动手改设置是低级重复,基 ...

没关系,就算你不这么做,10bit编码相比8bit的优势依然存在。即使是用libswscale做转换,先转成了8bit YUV再转成8bit RGB,也比直接8bit YUV编码的结果error要小。
你要是想要证据可以对比我压的Kanon的截图:http://bt.ktxp.com/html/2012/0113/232797.html
Yousei-raws是8bit no-mbtree,我压的是10bit no-mbtree,码率都在5000kbps左右,截图没有用madVR渲染。用的是ffms2,其内部也是用libswscale转换的,所以和非madVR渲染的播放结果是一致的。
发表于 2012-1-18 21:58 | 显示全部楼层
麦特 发表于 2012-1-18 21:02
我的话请看清楚。

楼主说出正确的播放方法,不是低级重复,但是让用户这样自己动手改设置是低级重复,基 ...

有傻瓜方案,你可以用企鹅,mpc-hc,mplayer,pot,无需设置,一步到位.
发表于 2012-1-18 23:47 | 显示全部楼层
暂时没接触过。*/-42
发表于 2012-1-18 23:49 | 显示全部楼层
10bit  12bit 将来还是交给 H.265
发表于 2012-1-19 00:59 | 显示全部楼层
AVC死掉之前应该是不会升级硬解的位深了.....
发表于 2012-1-19 01:20 | 显示全部楼层
我只想知道4M以上码率下,10bit的优势明显不。。。
potplayer在硬解和软解之间的切换还是不方便,一般收的动画都是BDrip,4M以上动态码率,感觉应该够了
 楼主| 发表于 2012-1-19 01:42 | 显示全部楼层
xiaoxin9039 发表于 2012-1-19 01:20
我只想知道4M以上码率下,10bit的优势明显不。。。
potplayer在硬解和软解之间的切换还是不方便,一般收的 ...

具体要看片源情况,不过基本上4M属于比较中等的码率,所以通常还是会有比较明显的优势的。
发表于 2012-1-19 09:24 来自手机 | 显示全部楼层
是不是也要10bit显示器?
俺没显示器啊。
发表于 2012-1-19 10:25 | 显示全部楼层
10bit显示器估计得专业级别的显示器吧……
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

小黑屋|手机版|Archiver|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806

GMT+8, 2018-6-21 14:47 , Processed in 0.021472 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.1

© 2007-2017 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表