kobebeancox
帖子: 4
注册时间: 2013-05-15 20:59

关于BT709toBT601的问题

一些DVD拉伸成720P以上的视频,压制的时候旗标用的是BT709,由此导致播放的时候产生颜色失真的问题。
据说可以让播放器/解码器强制输出BT601,但是我不知道该怎么做。。。(MPC-HC只有BT601toBT709)
求高人支招,我用的媒介是MPC-HC+LAV+madVR
头像
dgwxx
管理猿
帖子: 771
注册时间: 2010-09-19 20:42
联系: 网站

Re: 关于BT709toBT601的问题

压制的时候是否已经将601转成709这点不得而知,除非自己有DVDISO进行对比,否则播放的时候没办法判断应该使用什么matrix。
从“相信压制者”这个观点来看,应该用709。但最好的解决方案是不看那些拉伸视频。
日常推 @dgwxx: 基本没什么技术的话题,欢迎没事看看消遣。
► 显示剧情透露 平庸的rip
► 显示剧情透露 “不知道”的五大理由
kobebeancox
帖子: 4
注册时间: 2013-05-15 20:59

Re: 关于BT709toBT601的问题

dgwxx 写了:压制的时候是否已经将601转成709这点不得而知,除非自己有DVDISO进行对比,否则播放的时候没办法判断应该使用什么matrix。
从“相信压制者”这个观点来看,应该用709。但最好的解决方案是不看那些拉伸视频。
DVD拉伸成720p,播放的时候不应该选择用601吗?
zpfbj0
帖子: 17
注册时间: 2013-02-27 21:41

Re: 关于BT709toBT601的问题

DVD拉伸至720p使用BT.709标准是正确的,但这些旗标flag仅仅是打上标签而已,并不对视频内容本身进行任何处理,必须还进行色彩空间转换才行。未进行转换的视频实际上还是BT.601标准的,所以回放时色彩就不正确了。

此外播放器回放时判断色彩空间的通用标准是根据视频分辨率,旗标flag仅在部分播放器某些设置时起作用。

出现偏色问题的视频其实不少,我遇到的最多的就是片源为1080i的高清电视节目的720p/1080p压制档及楼主提到的片源为480i的DVD拉伸至720p的。如dgwxx 所说,肉眼判断的话存在主观成分。但有些会感觉很明显,获得片源后对比也证实了压制档确实存在偏色。

解决办法为可以加一个像素着色器。这是我在potplayer交流论坛的贴子,现在搬过来,供参考。本文是针对potplayer的,MPC的处理方法应该也类似。
http://potplayer.5d6d.net/thread-14355-1-1.html
===================================================
提供一个像素着色器(pixel shader)解决视频偏色问题(BT709toBT601)

本人在观看一些影片时发现存在明显的偏色问题。颜色偏黄偏淡,人的皮肤像是打了一层蜡,没有血色,嘴唇是橘红色,看起来很别扭。

出现这一问题是因为视频色彩空间有一般有两种标准,一种是用于标清视频SD的BT.601,另一种是用于高清视频HD的BT.709。播放器在播放视频时会根据分辨率选择到底使用哪一种标准回放,如果小于等于576(如480),就用标清的标准BT.601;如果大于576(如720,1080),就用高清的标准BT.709。

正常情况下,录制、压制的视频都应该是遵循这一标准的。但假如压制高清视频(如720p)时没用BT.709却使用了BT.601,则播放器播放时仍然使用BT.709标准播放就会出现如前所示的偏色问题。

使用Pixel Shader像素着色器可以解决这一问题。potplayer自带了BT.601转换至BT.709的pixel shader(BT601BT709.txt)却没有提供BT.709转换至BT.601的pixel shader。本人从网上找到了BT.709转换至BT.601的源码,现在分享出来。

1、打开potplayer安装路径下的PxShader文件夹(如C:\Program Files (x86)\Daum\PotPlayer\PxShader),具体操作为 右键-->Video-->Pixel Shader(或者直接按快捷键S),然后选择Open Folder

2、新建一个文本文件,如命名为BT709toBT601.txt,然后复制代码保存。

代码: 全选

sampler s0 : register(s0); 

float4 main(float2 tex : TEXCOORD0) : COLOR 
{ 
float4 c0=tex2D(s0,tex); 
// r=c0[0], g=c0[1], b=c0[2] 
// RGB [16,235] to YUV: 709 mode (128 is not added to Cb and Cr) 
float y=0.213*c0[0] + 0.715*c0[1] + 0.072*c0[2]; 
float Cb=-0.117*c0[0] -0.394*c0[1] +0.511*c0[2]; 
float Cr=0.511*c0[0] -0.464*c0[1] -0.047*c0[2]; 

// YUV to RGB [16,235]: 601 mode (Cb and Cr are 128 less) 
float r=y+1.371*Cr; 
float g=y-0.698*Cr-0.336*Cb; 
float b=y+1.732*Cb; 

float4 ret=float4(r,g,b,0); 

return ret; 
}
3、播放有偏色的视频时选择这个pixel shader即可。操作为 右键-->Video-->Pixel Shader(或者直接按快捷键S),然后选择BT709toBT601。播放完成后再次选择去掉对勾或选择Do not use。

需要注意的是,在播放完偏色视频文件后要记得恢复原来设置,否则以后播放正常的文件时反而会偏色了。建议增加一个快捷键(操作为F5-->General-->Shortcuts),这样操作简单,可以达到“一键切换”的效果。

上面说到的解决办法是给播放视频的普通用户的,要从根本上解决问题还是要从视频档本身下手。这里给视频制作者一些建议。在制作视频时应遵循关于颜色空间的上述规范,即标清视频576及以下使用BT.601标准,高清视频576以上使用BT.701标准。符合这一规范的视频才能在播放时正确还原颜色。如果片源不符合上述规范或者要进行标清、高清的转换(如DVD拉伸至720,或者1080压缩至480等),编码时须进行色彩空间BT.601和BT.709的相互转换。如此才能在根本上避免视频偏色的问题。

另:本文说的是颜色偏黄偏淡的偏色问题。反之,如果颜色偏红偏浓,人的嘴唇发紫等,则像素着色器选择potplayer自带的BT601BT709即可。不过出现这种偏色的影片不多,一般都是偏黄偏淡。
kobebeancox
帖子: 4
注册时间: 2013-05-15 20:59

Re: 关于BT709toBT601的问题

感谢大大提供的代码~
只是不知这里应该如何选择
图片
是否预调整和后调整都要开启?
zpfbj0
帖子: 17
注册时间: 2013-02-27 21:41

Re: 关于BT709toBT601的问题

kobebeancox 写了:感谢大大提供的代码~
只是不知这里应该如何选择
图片
是否预调整和后调整都要开启?
开一个就可以了。我开的是预调整

回到 “解码 播放 字幕 / Decoder playback and subtitles”