Jul 17

近期EP作品汇总

继续发充数文章。。。最近弄了不少东西,之前只在Twitter发过很快就被刷掉了,还是得在这记录一下。

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个进程内分支执行
Oct 29

ffms2编译注意点

1. 首先libav的header不能跟mingw的系统header放一起,否则会很坑爹。。。

2. libav里面会引用inttypes.h,这个文件必须从mingw里面复制到某个地方,然后把内容改掉,不然会出现一大堆错误。改好的文件

3. LIB路径参考设置:D:\MinGW\local\lib;D:\MinGW\lib\gcc\i686-pc-mingw32\4.6.1;D:\MinGW\lib;$(LibraryPath)

4. 如链接时找不到 __imp____lc_codepage 符号,参考此处修复。注意libs.cpp里面的文件名要修正。

Mar 01

自用的x264压制脚本(8/19更新)

某晚上在某EP群搅流基术交流技术时获得强烈反响,于是稍微改进下就贴上来了。

 

脚本主要功能:
* 支持1Pass crf + 2Pass bitrate模式,自动获取crf出来的码率作为2pass参数
* 自动记录压制log
* 多target支持,脚本内可定义多套预置参数

代码 | 代码打包下载 | 免Python打包版

(脚本需求Python 3

更新日志:

 

## 2011-08-19

* Bug修复
* 如在参数中指定音频,则在1pass自动禁用以防止错误(可使用–1pass-same-extra-args禁用此行为)

## 2011-08-15
* 任务系统显示增强
^ 控制台标题栏显示整体及运行中任务进度
^ 任务完成后在信息输出中显示码率及fps

## 2011-08-12
* 以彩色输出任务列表
* 修复:1pass任务有时会在完成时卡死

## 2011-08-05
* 修复任务系统与额外参数的冲突

## 2011-08-04
* 新增任务系统,默认可同时运行两个1pass任务,并于所有1pass完成后再逐个运行2pass任务。简单命令说明请参考encx264.py !task help
* 可于target内指定x264路径,可参考sample设置
* 本版本无法从旧版自动更新,请下载完整版

## 2011-04-11
* 新参数:–inFile-2pass * :2pass时使用另一个avs脚本
* 参数现在对大小写不敏感了

## 2011-03-15
* 默认不记录压制进度,减小log体积

## 2011-03-14
* 支持指定x264优先级
* 支持1pass压制,把target内的2pass参数删除即可
* 支持脚本自动更新

## 2011-03-06
* 可直接在命令行附加x264参数

## 2011-03-03
* 修正路径内不能包含空格的问题

基本用法:
下载后放到x264目录,然后使用以下格式执行命令即可开始压制:

 
    encx264.py <target> xxxx.avs xxxx.mp4 <crf> --tc ""

其中<target>为脚本内定义的target名字,后面的–tc ""是禁用输入timecode(因为我做的片子全部是VFR,为了偷懒脚本默认会使用脚本目录下的timecode.txt作为输入timecode,如果找不到就会报错)
target的定义方法请参考脚本内的现有target,注意花括号参数会在运行时替换为实际值。最终传给x264的参数由公共参数和target特定参数组成。
脚本可选参数:

–bitrate *:强制指定码率,适用于1pass不是crf的target
–sar *:指定sar,注意如果target内没有default_sar,不在命令行指定sar会报错
–ref *:指定ref,如忽略脚本会使用target指定的default_ref
–pass 2:跳过1pass,如之前用脚本运行过1pass,码率会从记录文件内读取,否则需要用–bitrate指定码率
–tc "xxxx.txt":指定输入timecode,忽略的话脚本会使用avs目录下的timecode.txt,找不到就会报错。如要禁用输入timecode,指定–tc ""
–bitrate-ratio *:2pass和1pass的码率比例,默认为1.0(即使用一样的码率)
–priority [idle|below_normal|normal|above_normal|high]:指定x264进程优先级
–inFile-2pass "xxxxx.avs":2pass时使用另一个avs脚本
— [参数]:在–后面的所有参数都会直接添加到x264命令行,例:
encx264.py <….> — –vf resize:640×480

任务系统:

默认可同时运行两个1pass任务,并于所有1pass完成后再逐个运行2pass任务。
添加任务: encx264.py !task add <参数>
(如:encx264.py !task add mkv_720p avs.avs video.mp4 20 –tc "")
清空任务: encx264.py !task clear
执行任务: encx264.py !task run