Mar 06

MP_Pipeline 0.14 – 多进程并行运行avs脚本 [2012-05-24]

(之前一直没有在Blog上发布,补发一下。。。

功能如题(拖),主要是用来解决部分EP滤镜组合使用时爆内存的情况。具体用法请参考压缩包内的示例脚本。

更新日志:

0.14
* 修复另一个导致偶然崩溃的bug

0.13
* 修复某bug导致的偶发崩溃

0.12
* 修复在某些情况下无法启动的错误

0.11
* 大大改善性能,某些情况下开销可下降80%
* 可锁定子进程内的工作线程到单一核心

0.9
* 新功能:帧预读
* 新功能:同时输出多个clip变量
* 新功能:可在多个进程间共享部分代码

0.3
* 修正x86文件夹内的子程序版本
* 内置TCPDeliver,不再依赖外部滤镜
* 修正退出时的随机崩溃
* 分块Branch

0.2
* 新增x64支持(请将压缩包内各平台的TCPDeliver.dll复制到对应的插件目录内)
* 可混合使用x86/x64子进程,详情请参考示例脚本(需要同时安装x86/x64的AviSynth)
* BRANCH进程新增一个变量,使脚本内可以区分不同的进程

源代码 下载

使用实例:

1. 基础用法

MP_Pipeline("""
FFVideoSource("SomeVideo")
QTGMC()
### prefetch: 16, 0
### ###
""")
MCTD()

# MCTD及QTGMC会在两个不同的进程内并行运行

2. 以大量内存为代价提速MCTD

# 要运行这个脚本,系统必须为64位并且至少有8GB内存
MP_Pipeline("""

# 此处数值可能有下降余地,不过我只测试过这个数
SetMemoryMax(3072)

FFVideoSource("SomeVideo")
MCTD(settings="high")
### prefetch: 16, 0
### ###
""")

# 之前用类似的脚本编码时比单纯MCTD有20%~30%速度提升

3. 分支

MP_Pipeline("""
FFVideoSource("SomeVideo")
TNLMeans()
### prefetch: 16, 0
### branch: 4
### ###
""")

# TNLMeans会在4个进程内分支执行