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

关于一些BD 的staff字幕

目前见过图书馆战争和圣痕炼金术士,都是静止字幕,黑白字幕,后期另外加上去的

先是图书馆战争。
由于可能存在的ffms seek问题,我这里没法很好的测试(比如
s.crop(120,108,1106-1920,640-1080).tfm(pp=0)
s.ClipSlice(s=38900,e=40032,l=120,t=108,r=1920-1106,b=1080-640,sp1="tfm(pp=0)", cpmode=0,epmode=0,spmode=0,cspmode=1,color=$000000)在39095帧结果不一致之类的。)

不过就这片可能存在的问题,和我目前想的解决方案说一下。
首先是那个羽化的画中画,由于背景的关系,直接overlay效果就很好,找了半天,38913帧的画中画部分tfm不能进行场匹配,走默认PP=6效果自然也可以,不过也可以根据这片的特点可以将字幕单独抽出来,让字幕部分保持原来的样子

代码: 全选

ivtc2=s.ClipSlice(s=38900,e=40032,l=186,t=166,r=1920-1052,b=1080-600,sp2="tfm(slow=2,mode=5,pp=0)", cpmode=0,epmode=0,spmode=0,cspmode=1,color=$000000)
ivtc1=overlay(ivtc2,s.crop(122,108,1106-1920,640-1080).tfm(mode=5,slow=2,pp=6),x=122,y=108)
smask=s.trim(38912,39000).Scriptmask

mt_merge(ivtc1,s,smask,y=3,u=3,v=3)

converttorgb32(matrix="rec709")


function Scriptmask(clip "Script", int "Lhthr",int "Llthr",int "Chthr",int "Clthr",int "radius")
{
Lhthr = default(Lhthr,230)
Llthr = default(Llthr,20)
Chthr = default(Chthr,136)
Clthr = default(Clthr,120)
radius = default(radius,1)
Frames=Script.framecount()
begin=Script.trim(0,-1).Smask(Lhthr,Llthr,Chthr,Clthr,radius)
end=Script.trim(Frames,Frames-1).Smask(Lhthr,Llthr,Chthr,Clthr,radius)
mid=Script.trim(int (Frames/2), int (Frames/2)-1).Smask(Lhthr,Llthr,Chthr,Clthr,radius)
ms=mt_logic(mt_logic(begin,end,"min"),mid,"min").mt_lut("x 128 / 0.86 ^ 255 *")
scmask= radius==0 ? ms.removegrain(19,-1).blur(1.2)
\: radius==1 ? ms.removegrain(19,-1).mt_expand().blur(1.2)
\:                    ms.removegrain(19,-1).mt_expand().mt_expand().blur(1.2)

scmask
}


function Smask(clip "s",int "Lhthr",int "Llthr",int "Chthr",int "Clthr",int "radius")
{
y=s.grayscale
sy=mt_logic(y.mt_binarize(Llthr,upper=true),y.mt_binarize(Lhthr),"max")
u=s.utoy
su=mt_logic(u.mt_binarize(Chthr,upper=true),u.mt_binarize(Clthr),"min").spline36resize(s.Width(),s.Height())
radius==3 ?  mt_logic(sy,su,"min").mt_expand
\:                 mt_logic(sy,su,"min")
}

另外画中画部分和字幕有淡入淡出效果,比如38898帧,需要用到vinverse之类的滤镜,那么可以避免用该滤镜处理背景
smask=s.trim(38936,39000).Scriptmask(radius=2)
mt_merge(ivtc1,s.vinverse(),smask,y=3,u=3,v=3)

圣痕就很典型了,字幕无缟,背景有缟
所以类似这样应该就可以了
m=s.trim(2145,2235).Scriptmask(radius=3,Lhthr=233,Llthr=30)
ccc=s.ccc(1)
mt_merge(ccc,s,m,Y=3,U=3,V=3)
上面的没有回补
图片 图片
头像
lititude
帖子: 11
注册时间: 2010-09-19 22:42

Re: 关于一些BD 的staff字幕

感谢提供方案,我也会尽快研究的。

回到 “AviSynth”