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

关于在expr中加入current_frame的方法

每次看taro大大的文章都有新收获,其实是因为看多少学多少,剩下的没仔细看 {:husky}

想做一个根据帧号变化的mask,原画面是匀速平移,比宇宙更远的地方01话tirm(11795,11932),懒得传raw了,有原盘的菊苣可以去看看。
贴上原图
截取之后00帧
图片
截取之后137帧
图片
大图可以看到右下角线条边缘有溢出。原先讨论时,有菊苣认为也可能是特效,不过我打算处理一下。

线条是一个匀速向右平移的过程,我最先算了00帧的mask表达式(偷懒只设了一条边)

代码: 全选

y = -3.1365x + 6235.6
图片
137帧的表达式

代码: 全选

y = -3.0558x + 6205.4
图片
用avspmod看了下是否准确

代码: 全选

0f_mask=mt_lutspa( mode="absolute", expr="3.1467 x * y + 6235.6 - 0 > 255 0 ?")
137f_mask=mt_lutspa( mode="absolute", expr="x 3.0558 * y + 6205.4 - 0 > 255 0 ?")
问题不大,然后考虑通过引入当前帧号做出mask平移效果,考虑到x的斜率差不多,所以统一取3.1

代码: 全选

3.1x+y-(6235.6-a*current_frame)>0
算出a为0.2204
表达式为3.1x+y-(6235.6-0.2204cur_fra)>0
所以最后的语句为

代码: 全选

ScriptClip("""mt_lutspa(mode="absolute",expr="3.1 x * y + 6235.6 - 0.2204  "+string(current_frame)+" * + 0 > 255 0 ?")""")
但是查看觉得好像不对,137帧的mask比00帧的大了,实际应该是小啊。

求助大佬,难道中缀变后缀的时候写错了?
lwjkk666
帖子: 321
注册时间: 2012-05-29 13:43

Re: 关于在expr中加入current_frame的方法

好吧,我看到是chorma shift的问题,还有,这段帧是静态图过渡的吗
freesilent
帖子: 35
注册时间: 2012-02-03 14:01

Re: 关于在expr中加入current_frame的方法

回ls,是画面平移+略微放大。
后来仔细检查了一遍,发现斜率近似成3.1是不行的, 会造成很大偏差,最后我重新算了开头和结尾的mask方程

代码: 全选

y = -3.1268x + 6220.5
y = -3.1347x + 6362.5
然后近似成3.13就没啥大问题了
最后的表达式

代码: 全选

3.13 x * y + 0.9387 cf * 6225.88 + - 0 > 255 0 ?

回到 “AviSynth”