clinky
帖子: 3
注册时间: 2010-10-06 21:18

最好的奇数切边的方法,一个实验

旧nmm论坛里有一个关于LanczosResize内部切边的讨论,大虾提到为了实现YV12奇数切边,对色度平面少切或多切半个像素。另一种方法是转成rgb或yuv444(yv24),但是又存在转换造成的损失。以下是一个比较这些方法的实验:
源是一个704x480的动画,首先在yv12下用lanczosresize切奇数,avs脚本是这样:
x = 702
LanczosResize(x,480,1,0,x,480)
x = x-2
LanczosResize(x,480,1,0,x,480)
……

"x = x-2 \n LanczosResize(x,480,1,0,x,480)"重复226次,结果如下图
切奇数边n次yv12.png
这个结果表明,在yv12下,resizer内部切边造成了色度平面的误差。
再看rgb下的情况:
切奇数边n次rgb.png
avisynth2.6 alpha添加了yv24的支持,所以看看converttoyv24()以后的情况:
切奇数边n次yv24.png
选择用rgb还是yv24,就要考虑从yv12转换到哪一个损失较小。用yv12来源向rgb和yv24各自反复转换100次,结果是色度的误差都很严重,转yv24稍好些。后来发现,先从yv12转yuy2,再从yuy2转yv24,反着来一遍,反复100次,结果和原图肉眼无差别。因此一个很好(不知道是不是最好)的方法是:如果源是yv12,先转yuy2,再转yv24,奇数切边和resize,再转yuy2,再转yv12。
我上传了一些奇数切边和色彩转换的对比图:
http://ishare.iask.sina.com.cn/f/10604067.html
264768502
核心会员
核心会员
帖子: 402
注册时间: 2010-09-23 17:38

Re: 最好的奇数切边的方法,一个实验

所以说嘛...yv12不要没事切奇数...
即使一定要切奇数,resize肯定也放在最后一步的(除了某些无聊的拉大...),一般来说也只做一次,并不会如此极端的多次进行..
要比较嘛,最好是一次奇数切边和2次或多次颜色空间转换比较,对压片的人来说比较具有实际意义
就像之前试验的resize小数一样...真正应用的时候有多少人会去切小数呢
头像
dgwxx
管理猿
帖子: 771
注册时间: 2010-09-19 20:42
联系: 网站

Re: 最好的奇数切边的方法,一个实验

crop(8,0,-8,0)万岁~ {:cat_3} 压的时候sar 40:33什么烦恼都没了。观众播放的时候根据喜好选择渲染器(/resizer)。
日常推 @dgwxx: 基本没什么技术的话题,欢迎没事看看消遣。
► 显示剧情透露 平庸的rip
► 显示剧情透露 “不知道”的五大理由
头像
vempx
管理猿
帖子: 146
注册时间: 2010-09-19 20:45

Re: 最好的奇数切边的方法,一个实验

确实,在SAR普及的现在,前期Resize没什么优势了
而且AE那个东西,在很小的误差范围内几乎不可见
在提问前还请仔细查阅公告帖以及各版置顶帖
相信置顶中也许会有您需要的内容


~My Blog~
clinky
帖子: 3
注册时间: 2010-10-06 21:18

Re: 最好的奇数切边的方法,一个实验

同意sar,但即使不resize,有时也会碰到切奇数边的情况,比如左边奇数条黑边,右边奇数条黑边,如果在YV12下用resizer的内部切边,即使不resize,还是会造成误差,当然只切一次时这个误差是微量不可见的。
头像
Yuricon
帖子: 141
注册时间: 2010-09-20 0:19

Re: 最好的奇数切边的方法,一个实验

clinky 写了:同意sar,但即使不resize,有时也会碰到切奇数边的情况,比如左边奇数条黑边,右边奇数条黑边,如果在YV12下用resizer的内部切边,即使不resize,还是会造成误差,当然只切一次时这个误差是微量不可见的。

代码: 全选

function ecrop(clip clip, int l, int t, int r, int b)
{
l = Default(l, 0)
t = Default(t, 0)
r = Default(r, 0)
b = Default(b, 0)
Assert(l >= 0 && t >= 0 && r >= 0 && b >= 0, "'l' 't' 'r' 'b'必须为正整数 | The 'L' 't' 'r' 'b' must be a positive integer")
Assert((l+r)%2 == (t+b)%2 == 0, "'l+r' 't+b'必须为偶数 | The 'L + r' 't + b' must be even")
end = 
\ (l + r)%2 == 0 && l%2 != 0 && r%2 != 0 && (t + b)%2 == 0 && t%2 != 0 && b%2 != 0 ? Overlay(clip,clip,x=r,y=b).crop(l+r,t+n,-(r-r),-(b-b)) : 
\ (l + r)%2 == 0 && l%2 != 0 && r%2 != 0 ? Overlay(clip,clip,x=r,y=0).crop(l+r,t,-(r-r),-b) : 
\ (t + b)%2 == 0 && t%2 != 0 && b%2 != 0 ? Overlay(clip,clip,x=0,y=b).crop(l,t+b,-r,-(b-b)) : 
\ clip.Crop(l,t,-r,-b)
return end
}
肯定是有损的,上面这只是一个非常麻烦的方法
zhbconan
帖子: 11
注册时间: 2010-12-15 6:26

Re: 最好的奇数切边的方法,一个实验

dgwxx 写了:crop(8,0,-8,0)万岁~ {:cat_3} 压的时候sar 40:33什么烦恼都没了。观众播放的时候根据喜好选择渲染器(/resizer)。
我碰上过原生黑边刚好加一起16的情况=。=
那一次把我乐坏了。。。
头像
-o-o-304-o-o-
超级版主
帖子: 640
注册时间: 2010-10-10 20:00
来自: US
联系: 网站

Re: 最好的奇数切边的方法,一个实验

zhbconan 写了: 我碰上过原生黑边刚好加一起16的情况=。=
那一次把我乐坏了。。。
按照规范的话就应该是这样吧。。
► 显示剧情透露 En Taro 06!Taro Pie NC Fanclub project始动!聊天用Q群开放中
► 显示剧情透露 胸中有万言,退敌无一策,是谓书生误国"
► 显示剧情透露 前辈们的信念
► 显示剧情透露 妇联招新广告,走过路过可以看看撒
► 显示剧情透露 香芋派,后期菊苣们的一致选择
► 显示剧情透露 众菊苣喜评香芋派
► 显示剧情透露 聊天用工具
zhbconan
帖子: 11
注册时间: 2010-12-15 6:26

Re: 最好的奇数切边的方法,一个实验

@304.。。对于一个经常搞老片的人来说。。。碰到一次真不容易。。。
头像
-o-o-304-o-o-
超级版主
帖子: 640
注册时间: 2010-10-10 20:00
来自: US
联系: 网站

Re: 最好的奇数切边的方法,一个实验

zhbconan 写了:@304.。。对于一个经常搞老片的人来说。。。碰到一次真不容易。。。
老美的MV做个几个都挺正规的饿。。。纯video黑边也非常标准真的挺好做。。
► 显示剧情透露 En Taro 06!Taro Pie NC Fanclub project始动!聊天用Q群开放中
► 显示剧情透露 胸中有万言,退敌无一策,是谓书生误国"
► 显示剧情透露 前辈们的信念
► 显示剧情透露 妇联招新广告,走过路过可以看看撒
► 显示剧情透露 香芋派,后期菊苣们的一致选择
► 显示剧情透露 众菊苣喜评香芋派
► 显示剧情透露 聊天用工具

回到 “理论讨论 / Theoratical discussion”