版面规则
提问时请注意:尽量详细描述操作过程、AVS脚本内容等,最好能写出片名,只贴图有时无法看出问题原因。
提示:发布原创内容请尽量使用附件上传。使用网盘会出现过期失效的问题,请注意。
xuguang_he
帖子: 15
注册时间: 2013-03-30 12:00

如何解决线条很虚的情况

如附件图,帽檐和鸭子的嘴的线条都比较虚,甚至有种重影的感觉,不知通过什么滤镜能解决。
以下是我目前设置的AVS代码:

代码: 全选

LoadPlugin("D:\Program Files\Megui\tools\dgindex\DGDecode.dll")
LoadPlugin("D:\Program Files\Megui\tools\avisynth_plugin\MaskTools.dll") 
LoadPlugin("D:\Program Files\Megui\tools\avisynth_plugin\mt_masktools-25.dll") 
LoadPlugin("D:\Program Files\Megui\tools\avisynth_plugin\RemoveGrain.dll")
LoadPlugin("D:\Program Files\Megui\tools\avisynth_plugin\FFT3dGPU.dll")
DGDecode_mpeg2source("E:\yazhi\sources\A.Miss.Mallard.Mystery.2000.DVDRip.x264.AC3.s01e14.d2v")

function LimitedSharpenFaster( clip clp, 
 \                       float "ss_x",   float "ss_y", 
 \                       int   "dest_x", int   "dest_y",
 \                       int   "Smode" , int   "strength", int  "radius", 
 \                       int   "Lmode",  bool  "wide",     int  "overshoot", int "undershoot",
 \                       int   "soft",   int   "edgemode", bool "special",
 \                       int   "exborder" )
{
ox = clp.width
oy = clp.height

Smode     = default( Smode,       3 )
ss_x      = (Smode==4)
 \        ? default( ss_x,      1.25)
 \        : default( ss_x,      1.5 )
ss_y      = (Smode==4)
 \        ? default( ss_y,      1.25)
 \        : default( ss_y,      1.5 )
dest_x    = default( dest_x,     ox )
dest_y    = default( dest_y,     oy )
strength  = (Smode==1)
 \        ? default( strength,  160 )
 \        : default( strength,  100 )
strength  = (Smode==2&&strength>100) ? 100 : strength
radius    = default( radius,      2 )
Lmode     = default( Lmode,       1 )
wide      = default( wide,    false )
overshoot = default( overshoot, 1)
undershoot= default( undershoot, overshoot)
softdec   = default( soft,        0 )
soft    =  softdec!=-1 ? softdec : sqrt( (((ss_x+ss_y)/2.0-1.0)*100.0) ) * 10
soft    = soft>100 ? 100 : soft
edgemode  = default( edgemode,    0 )
special   = default( special, false )
exborder  = default( exborder, 0)
#radius =   round( radius*(ss_x+ss_y)/2)  #  If it's you, Mug Funky - feel free to activate it again  
xxs=round(ox*ss_x/8)*8
yys=round(oy*ss_y/8)*8
smx=exborder==0?dest_x:round(dest_x/Exborder/4)*4
smy=exborder==0?dest_y:round(dest_y/Exborder/4)*4

clp.isYV12() ? clp : clp.converttoyv12()

ss_x != 1.0 || ss_y != 1.0 ? last.lanczosresize(xxs,yys) : last
tmp = last

edge = mt_logic( tmp.mt_edge(thY1=0,thY2=255,"8 16 8 0 0 0 -8 -16 -8 4")
 \              ,tmp.mt_edge(thY1=0,thY2=255,"8 0 -8 16 0 -16 8 0 -8 4")
 \              ,"max") .mt_lut("x 128 / 0.86 ^ 255 *") #.levels(0,0.86,128,0,255,false) 

tmpsoft       = tmp.removegrain(11,-1)
dark_limit1   = tmp.mt_inpand()
bright_limit1 = tmp.mt_expand()
dark_limit    = (wide==false) ? dark_limit1   : dark_limit1  .removegrain(20,-1).mt_inpand()
bright_limit  = (wide==false) ? bright_limit1 : bright_limit1.removegrain(20,-1).mt_expand() 
minmaxavg     = special==false
 \            ? mt_average(dark_limit1, bright_limit1)
 \            : mt_merge(dark_limit,bright_limit,tmp.removegrain(11,-1),Y=3,U=-128,V=-128)

Str=string(float(strength)/100.0)
normsharp = Smode==1 ? unsharpmask(strength,radius,0) 
 \        : Smode==2 ? sharpen(float(strength)/100.0) 
 \        : Smode==3 ? mt_lutxy(tmp,minmaxavg,yexpr="x x y - "+Str+" * +")
 \        :            mt_lutxy(tmp,tmpsoft,"x y == x x x y - abs 16 / 1 2 / ^ 16 * "+Str+
 \                       " * x y - 2 ^ x y - 2 ^ "+Str+" 100 * 25 / + / * x y - x y - abs / * + ?")

OS = string(overshoot)
US = string(undershoot)
mt_lutxy( bright_limit, normsharp, yexpr="y x "+OS+" + < y x y x - "+OS+" - 1 2 / ^ + "+OS+" + ?")
mt_lutxy( dark_limit, last, yexpr="y x "+US+" - > y x x y - "+US+" - 1 2 / ^ - "+US+" - ?")

Lmode==1 ? mt_clamp(normsharp, bright_limit, dark_limit, overshoot, undershoot) : last
 
normal = last
zero   = mt_clamp(normsharp, bright_limit, dark_limit, 0,0)

Lmode==3 ? mt_merge(normal,zero,edge.mt_inflate()) : normal

      edgemode==0  ?  last 
 \  : edgemode==1  ?  mt_merge(tmp,last,edge.mt_inflate().mt_inflate().removegrain(11,-1),Y=3,U=1,V=1)
 \  :                 mt_merge(last,tmp,edge.mt_inflate().mt_inflate().removegrain(11,-1),Y=3,U=1,V=1)

AMNT  = string(soft)
AMNT2 = string(100-soft)
sharpdiff=mt_makediff(tmp,last)
sharpdiff2=mt_lutxy(sharpdiff,sharpdiff.removegrain(19,-1),
 \           "x 128 - abs y 128 - abs > y "+AMNT+" * x "+AMNT2+" * + 100 / x ?")

soft==0 ? last : mt_makediff(tmp,sharpdiff2)
  
     (ss_x != 1.0 || ss_y != 1.0) 
\ || (dest_x != ox || dest_y != oy) ? lanczosresize(dest_x,dest_y) : last

ex=blankclip(last,width=smx,height=smy,color=$FFFFFF).addborders(2,2,2,2).coloryuv(levels="TV->PC")
 \.blur(1.3).mt_inpand().blur(1.3).bicubicresize(dest_x,dest_y,1.0,.0)
tmp =  clp.lanczosresize(dest_x,dest_y)

clp.isYV12() ? ( exborder==0 ? tmp.mergeluma(last)
 \                           : mt_merge(tmp,last,ex,Y=3,U=1,V=1) )
 \           : ( exborder==0 ? tmp.mergeluma(last.converttoyuy2())
 \                           : tmp.mergeluma( mt_merge(tmp.converttoyv12(),last,ex,Y=3,U=1,V=1)
 \                                           .converttoyuy2()) )
 
(edgemode!= -1) ? last : edge.lanczosresize(dest_x,dest_y).greyscale

return last
}

LoadPlugin("D:\Program Files\Megui\tools\avisynth_plugin\TIVTC.dll")
tfm(order=1).tdecimate()
LoadPlugin("D:\Program Files\Megui\tools\avisynth_plugin\SangNom.dll")
SangNom(order=1,aa=48)
tfm(mode=5, pp=0, slow=2, scthresh=12.0, cthresh=9, MI=80, mChroma=true, chroma=false)
tdecimate(mode=1, hybrid=0, vfrDec=1)
LimitedSharpenFaster(ss_x=1.50, ss_y=1.50, Smode=3, strength=1500, soft=0)
fft3dgpu(sigma=2, plane=4, precision=2)
crop(2, 0, -4, 0)
#resize
#denoise
附件
截自原版DVD,感觉有很多斑斑点点的小杂色块,所以我用了&quot;FFT3dGPU&quot;滤镜降噪,但也让线条清晰度变得稍差
截自原版DVD,感觉有很多斑斑点点的小杂色块,所以我用了"FFT3dGPU"滤镜降噪,但也让线条清晰度变得稍差
截自原版DVD,画面很虚,线条也不清晰
截自原版DVD,画面很虚,线条也不清晰
截自原版DVD,似乎有叠影
截自原版DVD,似乎有叠影
例如这个画面,线条经&quot;LimitedSharpenFaster”及&quot;SangNom&quot;处理后变得很有油画感
例如这个画面,线条经"LimitedSharpenFaster”及"SangNom"处理后变得很有油画感
经我处理后的一些其他画面,线条也不是很让人满意
经我处理后的一些其他画面,线条也不是很让人满意
经我处理后的一些其他画面,线条也不是很让人满意
经我处理后的一些其他画面,线条也不是很让人满意
经我处理后的一些其他画面,线条也不是很让人满意
经我处理后的一些其他画面,线条也不是很让人满意
这个是出问题的画面!!!
这个是出问题的画面!!!
SNAG-13033020541100.jpg (74.1 KiB) 查看 10483 次
上次由 xuguang_he 在 2013-03-30 21:16,总共编辑 2 次。
xuguang_he
帖子: 15
注册时间: 2013-03-30 12:00

Re: 如何解决线条很虚的情况

片名:鸭子侦探

片源是PAL制式的DVD,有拉丝现象。
BBA
帖子: 16
注册时间: 2012-06-21 21:59

Re: 如何解决线条很虚的情况

为啥要两次tfm捏...不解
锐化过度才像油画
线条可试试TOON之类的,或者是用mask做处理
头像
Billy Herrington
帖子: 83
注册时间: 2013-01-09 9:54

Re: 如何解决线条很虚的情况

you need to remove those chroma shifts in the first place, or you would never get good edges
lwjkk666
帖子: 321
注册时间: 2012-05-29 13:43

Re: 如何解决线条很虚的情况

LZ需要啃一下精品DVDRIP那篇文才行,论坛里头有
tfm(order=1).tdecimate()
tfm(mode=5, pp=0, slow=2, scthresh=12.0, cthresh=9, MI=80, mChroma=true, chroma=false)
tdecimate(mode=1, hybrid=0, vfrDec=1)

这两句的意义是?PAL制式25FPS的,用tfm.tdcimate不是搞成23了?话说我还未试过上了之后画面会变成怎样。看楼主说片源是PAL估计是欧版的吧,我最近也是搞4区的PALDVD动画(Beast War),25p+少量看似25i但是又似锯齿的scene,后来直接QTGMC轰上去,成品看了一集还没发现什么问题。希望能帮上忙

顺便请教一下chroma shifts具体画面表现是怎样的,对应滤镜?求科普
PS:楼主可否放一小段片源。
xuguang_he
帖子: 15
注册时间: 2013-03-30 12:00

Re: 如何解决线条很虚的情况

tfm.tdcimate这句我是用MeGUI的自动分析得出的,不懂更具体的……
BBA
帖子: 16
注册时间: 2012-06-21 21:59

Re: 如何解决线条很虚的情况

PAL的还真没处理过...
总之最好是不要信Megui分析出来的结果(偶尔能对的样子?
求个源试试(很怀念的片我也求源啦噗
xuguang_he
帖子: 15
注册时间: 2013-03-30 12:00

Re: 如何解决线条很虚的情况

这个是欧版DVD,音频语言是未知鸟语,RIP完以后还得合成国语音轨,所以可能一时半会儿还做不好
这版DVD画面的问题真的蛮多的,又例如这种小杂点
附件
见鸭子的袖子
见鸭子的袖子
SNAG-13033112263300.jpg (96.47 KiB) 查看 10418 次
xuguang_he
帖子: 15
注册时间: 2013-03-30 12:00

Re: 如何解决线条很虚的情况

画幅边缘偶尔还会冒出这样的黑线……
附件
画幅边缘的黑线,不时会出现
画幅边缘的黑线,不时会出现
SNAG-13033112295100.jpg (32.58 KiB) 查看 10418 次
lwjkk666
帖子: 321
注册时间: 2012-05-29 13:43

Re: 如何解决线条很虚的情况

xuguang_he 写了:这个是欧版DVD,音频语言是未知鸟语,RIP完以后还得合成国语音轨,所以可能一时半会儿还做不好
这版DVD画面的问题真的蛮多的,又例如这种小杂点
看来LZ还是不清楚tfm(order=1).tdecimate()
的用处

回到 “AviSynth”