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

AviSynth EP Script: EPAVSMaker v0.10 Final

受前几天写EPOTC的影响...最近一直在思考一个问题
既然都是下面这样字符串重复,但数字有序的代码(avs又无法写循环,所以只有这样写),那么如何去简便这一步骤呢?复制还要改数字很麻烦,于是咱受某虾用php生成ass的启发,尝试用avs去生成类似于下面这样的代码,于是EPAVSMaker就这样诞生了,当然...目前还未完善,处于测试与调整阶段 {:cat_11}
EPAVSMaker已经停止开发
这可能是暂时性的,也可能是永久性的
如果您有继续开发的意向,请随意

代码: 全选

clip2 = Default(clip2, nop)
clip3 = Default(clip3, nop)
clip4 = Default(clip4, nop)
clip5 = Default(clip5, nop)
clip6 = Default(clip6, nop)
clip7 = Default(clip7, nop)
clip8 = Default(clip8, nop)
clip9 = Default(clip9, nop)
更新日志

2010/10/20 EPAVSMaker v0.10 Final
EPAVSMaker停止开发

2010/10/06 EPAVSMaker v0.10 beta
修正了倒序的问题(感谢cunhan)
优化了一点点代码

2010/10/04 EPAVSMaker beta
EPAVSMaker beta诞生
下面是EPAVSMaker beta的代码,请各位来测试讨论下这个脚本的开发思路

代码: 全选

#输出递归字符串的核心脚本
function EPAVSMK(int ep1, string "s1", string "e1", string "s2", string "e2", int "ep2", int "x1", int "x2")
{
s1 = Default(s1, "")
e1 = Default(e1, "")
s2 = Default(s2, "")
e2 = Default(e2, "")
ep2 = Default(ep2, ep1)
x1 = Default(x1, 1)
x2 = Default(x2, x1)
Assert(x1 >= 0 && x2 >= 0, "x1 x2不能为负数 | 'x1' 'x2' can not be negative")
hc = "
"
#判断算法
epp = 
\ ep1 < ep2 ? Eval("ep1 > x1-1") : 
\ ep1 > ep2 ? Eval("ep2 > x2-1") : Eval("ep1 > x1-1")
#按顺序做递归返回字符串
org1 = s1 + string(ep1) + e1
org2 = s2 + string(ep2) + e2 + hc
org3 = org1 + org2
end = epp ? EPAVSMK(ep1-1,s1,e1,s2,e2,ep2-1,x1,x2) + org3 : ""
return end
}
#输出文件用脚本
function EPAVSMaker(int ep1, string "s1", string "e1", string "s2", string "e2" , string "outavs", int "ep2", int "x1", int "x2", bool "append")
{
s1 = Default(s1, "")
e1 = Default(e1, "")
s2 = Default(s2, "")
e2 = Default(e2, "")
outavs = Default(outavs, "epavs.avs")
ep2 = Default(ep2, ep1)
x1 = Default(x1, 1)
x2 = Default(x2, x1)
append = Default(append, false)
bg = blankclip
end = bg.WriteFileStart(outavs,"EPAVSMK(ep1,s1,e1,s2,e2,ep2,x1,x2)",append=append)
return end
}
关于参数说明
EPAVSMaker(int ep1, string "s1", string "e1", string "s2", string "e2" , string "outavs", int "ep2", int "x1", int "x2", bool "append")
ep1代表目标1的有序数值的最高值 默认 无
x1代表目标1的有序数值最低值 默认 1
ep2 x2同理 默认等于 ep1 x1
s1 e1分别代表ep1数值的前后字符串 默认 空
比如

代码: 全选

"clip1="
那么

代码: 全选

s1 = "clip"
e1 = "="
s2 e2 同理 默认等于 s1 e2
outavs代表输出avs路径 默认 "epavs.avs"
append 追加模式,默认 false
由于目前该脚本有个比较关键的问题就是WriteFileStart的一次写入字符数,如果太多,会出现乱码或生成不正确的情况,那么append的目的就是为了在字符数超限制后使用,比如

代码: 全选

EPAVSMaker(9,"clip"," = ","Default(clip",", nop)","N:\ep.avs",x1=1,append=false)
那么就会生成

代码: 全选

clip1 = Default(clip1, nop)
clip2 = Default(clip2, nop)
clip3 = Default(clip3, nop)
clip4 = Default(clip4, nop)
clip5 = Default(clip5, nop)
clip6 = Default(clip6, nop)
clip7 = Default(clip7, nop)
clip8 = Default(clip8, nop)
clip9 = Default(clip9, nop)
这样就能正确的生成我想要的代码
(倒序问题已解决)
如果是

代码: 全选

EPAVSMaker(10,"clip"," = ","Default(clip",", nop)","N:\ep.avs",x1=1,append=false)
那么输出的代码就会出现问题,比如丢行,乱码之类的

这时候就需要用append了

代码: 全选

EPAVSMaker(9,"clip"," = ","Default(clip",", nop)","N:\ep.avs",x1=1,append=false)
EPAVSMaker(15,"clip"," = ","Default(clip",", nop)","N:\ep.avs",x1=10,append=true)
那么这样的话生成的代码就是这样了

代码: 全选

clip1 = Default(clip1, nop)
clip2 = Default(clip2, nop)
clip3 = Default(clip3, nop)
clip4 = Default(clip4, nop)
clip5 = Default(clip5, nop)
clip6 = Default(clip6, nop)
clip7 = Default(clip7, nop)
clip8 = Default(clip8, nop)
clip9 = Default(clip9, nop)

clip10 = Default(clip10, nop)
clip11 = Default(clip11, nop)
clip12 = Default(clip12, nop)
clip13 = Default(clip13, nop)
clip14 = Default(clip14, nop)
clip15 = Default(clip15, nop)
(好吧,请无视空行OTZ)

这只是暂时性的解决方案之一,如果你有什么更好的想法,请在回复中指出
最后别吐槽为啥要EP到用AVS去生成AVS {:cat_15}
上次由 Yuricon 在 2010-10-20 18:14,总共编辑 2 次。
cunhan
核心会员
核心会员
帖子: 214
注册时间: 2010-09-20 22:09

Re: AviSynth EP Script: EPAVSMaker beta 测试讨论

递归木鱼你好

正题:写入序号是正向还是反向,差别在于,你是先写文件后递归还是先递归后写文件而已。
sunyata
帖子: 29
注册时间: 2010-09-23 22:10

Re: AviSynth EP Script: EPAVSMaker beta 测试讨论

vim+visincr?
头像
nuomi
帖子: 197
注册时间: 2010-09-25 12:59

Re: AviSynth EP Script: EPAVSMaker beta 测试讨论

没有最EP,只有更EP。
#输出递归字符串的核心脚本
function EPAVSMK(int ep1, string "s1", string "e1", string "s2", string "e2", int "ep2", int "x1", int "x2")
{
s1 = Default(s1, "")
e1 = Default(e1, "")
s2 = Default(s2, "")
e2 = Default(e2, "")
ep2 = Default(ep2, ep1)
x1 = Default(x1, 1)
x2 = Default(x2, x1)
Assert(x1 >= 0 && x2 >= 0, "x1 x2不能为负数 | 'x1' 'x2' can not be negative")
hc = "
"
#判断算法
epp =
\ ep1 < ep2 ? Eval("ep1 > x1-1") :
\ ep1 > ep2 ? Eval("ep2 > x2-1") : Eval("ep1 > x1-1")
#按顺序做递归返回字符串
end = epp ? s1 + string(ep1) + e1 + s2 + string(ep2) + e2 + hc + EPAVSMK(ep1-1,s1,e1,s2,e2,ep2-1,x1,x2) : ""
return end
}
#输出文件用脚本
function EPAVSMaker(int ep1, string "s1", string "e1", string "s2", string "e2" , string "outavs", int "ep2", int "x1", int "x2", bool "append")
{
s1 = Default(s1, "")
e1 = Default(e1, "")
s2 = Default(s2, "")
e2 = Default(e2, "")
outavs = Default(outavs, "epavs.avs")
ep2 = Default(ep2, ep1)
x1 = Default(x1, 1)
x2 = Default(x2, x1)
append = Default(append, false)
bg = blankclip
end = bg.WriteFileStart(outavs,"EPAVSMK(ep1,s1,e1,s2,e2,ep2,x1,x2)",append=append)
return end
}
话说这是源代码吧,研究一下。
头像
Yuricon
帖子: 141
注册时间: 2010-09-20 0:19

Re: AviSynth EP Script: EPAVSMaker v0.10 beta [2010/10/06更新]

其实还一个问题,WriteFileStart必须有clip,而这样的话递归又会出错,所以现在是把输出string和写入文件分为2个模块,当然...如果是用EPAVSMaker生成一个临时的WriteFileStart序列,然后再自动载入去执行,那么倒是有一定可行性 {:cat_15}

回到 “AviSynth”