Vapoursynth基本使用简介

NAZOrip@A
NAZOrip@A 2017年10月25日
  • 在其它设备中阅读本文章

关于VS的基本使用方式...关于下载安装在别的教程里已经很详细的写了所以不说了


video = /clip = /src = /src16 =/res =
在编程语言中,“=”是赋值符号,其左为变量,其右为待赋值项,比如在python中:

x = int(input(请输入保质期到期日期,格式为年月日))
y = str(input(请输入食品名称))

而等于号要写成“==”,大于等于号就写成“>=”,不等于就写成“!=”。
有了x与y后,程序就可以准备好处理将来需要完成的任务了,比如:

if (今天日期>=x):
    print(str(y)+“过期了!”)

在VS中有以下几种写法:

1.
src = 导入视频
scaled = 裁剪(src,裁剪到1280x720)
denoised = 降噪(scaled,降噪强度4)

2.
video = 导入视频
video = 裁剪(video,裁剪到1280x720)
video = 降噪(video,降噪强度4)

3.
video = 降噪(裁剪(导入视频,裁剪到1280x720),降噪强度4)

以及以下两种用法:

video3 = video1 + video2 #连接两段视频
videoParted = video[a:b] #从帧a~b两点分离出一个片段, 由于视频在VS中已经被ffms2/lavf解码所以不用再担心I帧P帧B帧的问题

在这里出现了方括号, 这就是python基本的文字编辑功能, 打个比方, 再举个例子:

spellCard1 = "唐伞惊吓闪光"
spellCard2 = '妖精尽灭光' #双引号还是单引号都随便
spellCard3 = "小人的地狱"

然后我们对以上内容进行修改,注意0是指第一个字:

sentence1 = spellCard1[0:1]
sentence2 = spellCard2[0]+"怪会"
sentence3 = spellCard1[3]+spellCard3[1]

finalSentence = str(sentence1)+str(sentence2)+str(sentence3)+'!'

所以最后得出的结果是【唐伞妖怪会吓人!】, 其中的方括号[]就是将它所附着的变量里的文字进行抽取操作。

再进一步, 如果要从结果中提取“伞怪”两个字, 可以finalSentence=finalSentence[1:4:2]即可。
其中, 1:4和之前公式一样都是划区, 而后面的:2代表了选中向后的第2个字符, 也就是隔着1个字符。
两个功能连起来就是在“伞妖怪会”这个范围内选取第1和第3个字符(第0个字符是唐)然后在VS里面, 你就可以照着这个例子随意的选取需要的视频帧了~ 如果空着那个4的话就表示一直选到文章或视频帧结尾哦


import / import as
导入模组,比如在用python做一些加减乘除外的运算符时(比如根号squareroot)就通过import math导入math功能,然后以x = math.sqrt(x)的方式使用math里的sqrt函数。因为导入库的命令顺序永远在最前排,所以VS文件里的前几行是一堆import

as的作用是给导入的东西重命名以方便调用。例:

import vapoursynth as vs

相当于

import vapoursynth
vs = vapoursynth

导入之后,需要通过core = vs.get_core()来调用VS内核,然后设置内存占用:

core = vs.get_core(threads=, accept_lowercase=)
core.max_cache_size = 13500

threads: 整数, 占用CPU线程数,默认(0)占用全部
accept_lowercase: True/False,允许小写,有助于降低故障率,默认关闭,建议打开(=True)
13500: 占用13.5GB的内存,剩下的要足以留给系统和浏览器,聊天软件等较占内存的程序

接着导入视频,通常用两种工具:

video = core.ffms2.Source(视频地址) #.avi .mp4 .mkv .m2ts ... 速度比Libav快但稳定性一般,日常使用没问题
video = core.lsmas.LWLibavSource(视频地址) #同上,要将整个视频读取完才能开始,虽然慢,而且这期间程序会未响应,但稳定性好,建议在批量处理时用

输入视频地址的方式没什么特别的,就是要避免python将\A,\B,\n等内容理解为命令,比如:
'D:\Anime\Accel World\bin\01.m2ts'
为了避免这种情况,可以将“\”写成“/”,但这样太麻烦,所以最流行的写法还是:
r'D:\Anime\Accel World\bin\01.m2ts'
在python的管辖范围之外就不用担心这个问题了,但还是要注意VS和编码器各有自己的语法规则

接下来就是加载滤镜了,这部分会在另一个贴中发布

处理完视频之后,用video.set_output()以表示视频已经准备好输出了,video也可以根据你写的变量换成别的词,上面已经提到这里就不说了。
同样,这个命令与math.sqrt(x)的原理相同。即调用VS里的视频功能。另外指出滤镜处理完的视频是video变量中赋的值: video=视频,math=函数1+函数2+...

video.set_output()

最后,将之前的东西放在一块就是:

import vapoursynth as vs
core = vs.get_core()
core.max_cache_size = 总内存数减系统和其他程序所需
video = core.ffms2.Source(视频地址)
video.set_output()

将写好的文件保存为.vpy(这里记为save),再写一个调用vspipe的压制参数.bat就可以开始压制了,这个压制参数的格式是:

vspipe.exe save.vpy - --y4m | x264(或x265) --demuxer y4m(或在x265中用--y4m) [参数] - --output 输出视频

例子:

D:\VapourSynth\core64\vspipe.exe first.vpy - --y4m | D:\x264.exe --demuxer y4m --crf 23 --aq-mode 3 --keyint 300 --min-keyint 1 --scenecut 44 --qcomp 0.62 --bframes 9 --b-adapt 2 --direct auto --me umh --merange 27 --partitions all --ref 6 --trellis 2 --rc-lookahead 120 --no-fast-pskip --subme 11 --psy-rd 1:0 --deblock 0:0 --aq-strength 0.8 --opencl - --output D:\Desktop\first.mp4

如果文件的目录名有空格,编码器/vspipe会误认为两组信息,所以这种情况下需要在两边加双引号。