NMM视频技术(旧)

 找回密码
 成为会员
搜索
查看: 11748|回复: 11

[AVS插件] [TimeCodeOutPut]合并多个Clip并输出TimeCode文件

[复制链接]
发表于 2010-6-11 23:39 | 显示全部楼层 |阅读模式
本帖最后由 cunhan 于 2011-7-12 11:11 编辑

插件已升级,请勿下载本帖的附件。
新版本的插件详情请至新NMM论坛查看


这是一个基于AvsFilterNet(http://avsfilternet.codeplex.com/)二次开发的AVS滤镜

我们在处理片源的时候,往往会手动分段,做不同的处理。
当分段比较多,而且混杂有改变帧数操作(如decimate,MCBob等)的情况下,想手写timecode,就得逐段阅览,并计算始末帧的位置,但这是一件很烦人而且容易出错的事情。
这个插件就是为了从这种数数字的地狱中解脱出来而开发的。
使用出现RP问题,欢迎猛击PM骚扰。

运行环境:
AviSynth2.5 .Net Framework 2.0
注:此滤镜在windows xp 32bit下开发和调试,假如在64bit系统或者是win vista/win7下RP了,在下也没有办法了~

功能:
把若干个不同帧率的clip合并,并输出对应的timecode(format v1)文件。
只需以播放器/VMD/AvsP等打开avs,timecode文件即能生成,不需要像tfm的log那样完整地跑一遍。
Todo:
输出v2格式 timecode
增加append模式

加载滤镜:
由于是基于AvsFilterNet做二次开发的插件,所以加载形式有点特殊
LoadPlugin("AvsFilterNet.dll")
LoadNetPlugin("TimeCodeOutPut.dll")

还有另外两种加载方法,详见AvsFilterNet主页

语法:
TimeCodeOutPut(clip c, string tcfile, clip c1, [...])

待合并的clip数量最大为1022(实测). 当超过这个数字时,filter就会抱怨too many argument(max is 1024)。剩下的两个名额当然是clip c和string tcfile占据了~

例子:
newclip = TimeCodeOutPut("TimeCode.txt", c1, c2, c3)


其效果等价于
newclip = c1.assumefps(last.framerate) ++ c2.assumefps(last.framerate) ++ c3.assumefps(last.framerate)

并输出timecode文件Timecode.txt,其内容为
# timecode format v1
Assume last.framerate
0,c1.framecount-1,c1.framerate
c1.framecount,c1.framecount+c2.framecount-1,c2.framerate
c1.framecount+c2.framecount,c1.framecount+c2.framecount+c3.framecount-1,c3.framerate


TimeCodeOutPut.rar (49.75 KB, 下载次数: 45483)

评分

1

查看全部评分

发表于 2010-6-12 00:03 | 显示全部楼层
婚汉转向开发型程序猿了!
发表于 2010-6-12 07:32 | 显示全部楼层
cool
从各种意义上来说 我都可以退休了
发表于 2010-6-12 07:33 | 显示全部楼层
cool 从各种意义上来说 我都可以退休了
发表于 2010-6-12 09:09 | 显示全部楼层
噢噢,还打算用脚本来写呢,不过实现多Clip没什么好的思路,求Clipslice的Clips  slices AvsFilter版
话说最多支持多少Clip?实现原理求解XD
 楼主| 发表于 2010-6-12 10:21 | 显示全部楼层
本帖最后由 cunhan 于 2010-6-12 10:42 编辑

昨天我也想用脚本实现的,于是尝试avs document里提到的AVSLib库中的array,不过这个array无论时间效率和空间效率都不尽人意,随array的元素个数的增长指数级增长(没有测试过,个人感觉)。而且,既然涉及到array,那么必然要涉及到循环的操作,脚本里的控制流要全靠?:来做曲线实现也很伤脑筋。
后来得SAPikachu大大提点,干脆写个filter算了。
AvsFilterNet是他做的一个.NET下的AviSynth封装,于是可以使用VB.NET/C#.NET等快速上手开发filter。

AvisynthNet把传过来的所有参数变量打包成一个arg数组,于是咱在C#里只要依次取出来该做什么做什么就可以了
AvisynthNet上提供的源代码附带有Sample,里面的注释详细地做了说明

clip的数量,实测为1022。函数能接受的最大参数数量是1024,除去前面的clip c和string tcfile两个,剩下1022。
谢谢提醒,我update一下帖子。
发表于 2010-6-12 10:39 | 显示全部楼层
赞,方便
发表于 2010-6-12 11:10 | 显示全部楼层
VB C#编程无能OTZ
发表于 2010-6-12 12:41 | 显示全部楼层
http://www.avisynth.info/?EasyVFR

一直在用这个脚本

赞LZ的插件
 楼主| 发表于 2010-6-12 13:02 | 显示全部楼层
本帖最后由 cunhan 于 2010-6-12 13:13 编辑

这个脚本给了我点提示,可以增加一个append参数。
那样的话更加灵活,也破除了clip数量的限制(喂喂,1000+还不够吗!)

而且,这个脚本通过Append这样的思路来简化多clip问题也很赞啊。
EasyVFR_Mod3这个脚本真是太疼了,惊奇的发现,avs是可以嵌入perl的
发表于 2010-6-13 08:29 | 显示全部楼层
巨巨GJ
真是惭愧。。。把那wrapper囧出来之后都没写过多少有用的东西。。。
发表于 2010-6-26 10:02 | 显示全部楼层
好东西,又有野学习了。。。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

小黑屋|手机版|NMM视频技术

GMT+8, 2025-5-5 21:14 , Processed in 0.179335 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表