分类 分享 下的文章

感觉没什么人介绍Editor。。
参照前面的配置文章配置好(提供的压缩包直接解压即可使用)

编写vpy脚本

每个压制的视频配置可能不同,对新的压制任务建议直接另存脚本修改。
2020-04-18T17:35:57.png
编写好脚本后通过Check script检查脚本有没有错误
2020-04-18T17:38:58.png
通过Preview可以预览情况
2020-04-18T17:40:46.png

配置额外脚本模板

VapourSynth一般是做预(初步简单的)处理,所以需要配合x264之类完成最后的压制,这里通过Editor来做(为什么不写bat,后面说...)。

选择Encode video
2020-04-18T17:45:50.png
然后再Preset输一个名字,Header选择Y4M(因为要传给Encoder处理),然后Executable选择你要使用的压制软件,Arguments设定你的压制参数之类的,然后点Save保存预处理模板。
2020-04-18T17:48:35.png

在这里你可以直接开始跑压制了,不过对于有许多任务的时候不建议。

添加更多的任务到VapourSynth jobs server watcher中

比如我这里要压制二十多集的电脑线圈,通过Enquene encode job添加到server中,选择前面设定好的模板,然后修改一下一些参数,输出名什么的。
2020-04-18T17:53:37.png
然后Save就会添加到server中了,注意点Preset的Save会变更这个预设的内容
2020-04-18T17:56:00.png

通过这样一些列操作,就能愉快的压制了,如果出现什么错误,VapourSynth jobs server watcher也会hold住的。

当然前面这一些列操作完全等价于下面的bat脚本(位于EncodeWorker文件夹下)

Tools\VSPipe.exe --y4m "go04.vpy" - | Binaries\ffmpeg.exe -i - -i "[Yousei-raws] Dennou Coil 04 [BDrip 1920x1080 x264 FLAC].mkv" -map 0:v -pix_fmt yuv420p -c:v libx264 -me_method umh -crf 21 -map 1:a -c:a aac -b:a 192K "outputs\04.mp4" -y

回到刚才的问题,为什么不直接bat呢,因为不好看进度,虽然有魔改版的x264可以,但我又不用...

最后

Tips! VapourSynth压制字幕时,指定字体文件夹而不用安装挺方便,AVS的不太清楚(没用过)

另外分享几张压制输出的效果图
2020-04-18T18:05:36.png
2020-04-18T18:06:13.png
2020-04-18T18:06:49.png
2020-04-18T18:07:08.png
2020-04-18T18:08:52.png

另外有个问题,VapourSynth Editor把配置记录放哪儿了呢,即使是全新解压出来,一运行就能看到之前的记录,就很奇怪。。

4K 120帧 码率一般

h265好像放不出来... 点此
[dplayer url="https://alime-customer-upload-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/customer-upload/1587092931656_dncm9btymm7f.m3u8" pic="" /]

[dplayer url="https://alime-customer-upload-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/customer-upload/1586819473240_mbx52sr3vegh.m3u8" pic="" /]

主要是为了方便压字幕。
之前(很久)弄VapourSynth把电脑环境搞得乱七八糟的,根据官方指南知道是可以搞个便携版的。

需要的物料(目前最新)

x265选的是x265-gcc-multilib-full.exe

解压整理

Simply decompress the portable VapourSynth archive into the Python dir
and overwrite all existing files. Done.
  • 新建一个文件夹EncodeWorker
  • EncodeWorker下新建一个文件夹Tools、一个Fonts文件夹和一个Binaries文件夹
  • 将前面下载的三个压缩包全部解压至EncodeWorker/Tools中
  • 将x264/x265/ffmpeg的exe提取至Binaries中
  • EncodeWorker文件夹下新建go.vpy和go.bat文件

至此准备工作完成,完整压缩包奉上

插件模板等

例如经常需要用到的havsfunc、adjust、mvsfunc和nnedi3_resample可以到HomeOfVapourSynthEvolution下载,
vapoursynth上提到的插件也指出了一些下载。

添加了一些插件和py文件,全部结构如下

由于自用的浏览器cookie管理插件导入导出时用的是字典形式,而python里面对[{}, {}]的cookies加载支持不太友好。
所以根据RFC6265和RequestsCookieJar源码,写了一个适用于此形式cookie的转换脚本,便于python载入使用。
代码如下:

'''
@作者: weimo
@创建日期: 2020-04-11 21:45:46
@上次编辑时间: 2020-04-11 22:37:48
@一个人的命运啊,当然要靠自我奋斗,但是...
'''
import json
from pathlib import Path
from http.cookiejar import Cookie
from requests.cookies import RequestsCookieJar

def convert(cookies_path: str = "cookies.json"):
    # convert [{}, {}] cookies to RequestsCookieJar format
    try:
        _cookies = json.loads(Path(cookies_path).read_text(encoding="utf-8"))
    except Exception as e:
        return
    BASECOOKIE = {
        "version": 0,
        "name": "",
        "value": "",
        "port": None,
        "port_specified": False,
        "domain": "",
        "domain_specified": False,
        "domain_initial_dot": False,
        "path": "/",
        "path_specified": False,
        "secure": False,
        "expires": None,
        "discard": False,
        "comment": None,
        "comment_url": None,
        "rest": {},
    }
    cookies = RequestsCookieJar()
    for c in _cookies:
        BASECOOKIE["name"] = c["name"]
        BASECOOKIE["value"] = c["value"]
        if c["domain"] != "":
            BASECOOKIE["domain"] = c["domain"]
            BASECOOKIE["domain_specified"] = True
            if c["domain"].split(".").__len__() == 3:
                BASECOOKIE["domain_initial_dot"] = True
        BASECOOKIE["path"] = c["path"]
        BASECOOKIE["secure"] = c["secure"]
        BASECOOKIE["expires"] = c.get("expirationDate")
        if c["path"] != "":
            BASECOOKIE["path"] = c["path"]
            BASECOOKIE["path_specified"] = True
        if c["httpOnly"]:
            BASECOOKIE["rest"].update({"httpOnly":None})
        if c["hostOnly"]:
            BASECOOKIE["rest"].update({"hostOnly":None})
        cookies.set_cookie(Cookie(**BASECOOKIE))
    return cookies

if __name__ == "__main__":
    convert("cookies.json")