本页为 NMM视频技术(旧)论坛(2004–2012)的只读存档,无法登录或发帖。欢迎前往 新论坛 交流。

NMM视频技术(旧)

查看: 13038回复: 11
打印 上一主题 下一主题

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

[复制链接]
cunhan
跳转到指定楼层
1楼
发表于 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, 下载次数: 46950)

评分

  • dgwxx

dgwxx
2楼
发表于 2010-6-12 00:03 只看该作者
婚汉转向开发型程序猿了!
akiduki
3楼
发表于 2010-6-12 07:32 只看该作者
cool
从各种意义上来说 我都可以退休了
akiduki
4楼
发表于 2010-6-12 07:33 只看该作者
cool 从各种意义上来说 我都可以退休了
Yuricon
5楼
发表于 2010-6-12 09:09 只看该作者
噢噢,还打算用脚本来写呢,不过实现多Clip没什么好的思路,求Clipslice的Clips  slices AvsFilter版
话说最多支持多少Clip?实现原理求解XD
cunhan
6楼
 楼主 发表于 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一下帖子。
lititude
7楼
发表于 2010-6-12 10:39 只看该作者
赞,方便
Yuricon
8楼
发表于 2010-6-12 11:10 只看该作者
VB C#编程无能OTZ
histamine
9楼
发表于 2010-6-12 12:41 只看该作者
http://www.avisynth.info/?EasyVFR

一直在用这个脚本

赞LZ的插件
cunhan
10楼
 楼主 发表于 2010-6-12 13:02 只看该作者
本帖最后由 cunhan 于 2010-6-12 13:13 编辑

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

而且,这个脚本通过Append这样的思路来简化多clip问题也很赞啊。
EasyVFR_Mod3这个脚本真是太疼了,惊奇的发现,avs是可以嵌入perl的
SAPikachu
11楼
发表于 2010-6-13 08:29 只看该作者
巨巨GJ
真是惭愧。。。把那wrapper囧出来之后都没写过多少有用的东西。。。
kalors
12楼
发表于 2010-6-26 10:02 只看该作者
好东西,又有野学习了。。。

小黑屋手机版NMM视频技术

GMT+8, 2026-10-11 12:23 , Processed in 0.025852 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.