Lazy loaded image
对比图制作教程(VapourSynth便携版)
字数 3352阅读时长 9 分钟
2025-7-17
2026-4-22
type
Post
status
Published
date
Jul 17, 2025
slug
vs-comparison
summary
tags
category
icon
password
😀
仅适用于WIN

前言

可能你已经见过很多关于VapourSynth(以下简称VS)对比图的教程。但是本文目的是尽量不依靠/干扰/破坏本地python环境为前提,并配合vspreview和一个vpy脚本,以最简便的方式上传到slow.pics网站,所以使用了Portable(便携版)的一键安装脚本。另一个好处就是直接将文件夹复制到另一个电脑还是可以直接使用,不用配置环境。当然这都是有代价的,那就是升级版本很麻烦,不如重装
 
科普:
Q1:为什么要制作对比图,直接看截图不行吗?
A1:那是因为只有对同一帧才有意义,直接随便看截图是无意义的
Q2:我又不做DIY,remux,encode,有必要做对比图吗?
A2:我认为如果你的目的只是有片看那就无所谓。如果是为了收藏,那感觉很有必要。有些电影并不是体积越大,码率越高就更清楚。甚至很多时候相同编码、分辨率,但码率低的却更清楚
Q3:为什么非要用VS做对比图,用VLC,potplayer截图相同时间点不就行了?
A3:这里理由有点多,我分为以下几点说: 一、因为以秒做轴很难对齐,VS可以做到以帧为单位
二、视频的帧其实是可以分为I/P/B 三种帧。不同帧信息不一样,其中B帧含的信息最少。短板比短板。所以一般都是B帧比B帧,VS可以标注出帧类型(这几个帧的具体介绍可以看VCB教程)
三、很多视频都是需要通过VS来预处理的,比如删除帧数,转换帧率,不然无法对齐

一、安装VS Portable

1、安装VS

到VS GitHub的releases仓库下载最新的Portable版本(本文撰写是为R74版本),注意这里写的是Install-Portable,是脚本文件
notion image
解压压缩包中的两个文件到单独的文件夹
notion image
双击bat结尾的文件
如果你看不到文件后缀
notion image
勾选这个选项
notion image
输入A回车,再输入Y回车
notion image
上面就说明正在安装
notion image
当出现这个界面说明安装成功
notion image
同目录下会出现一个名为vapoursynth-portable的文件夹。此时可以删除.bat和.ps1文件

2、安装插件

notion image
右键空白处,点击”在终端打开“
输入如下命令
vsrepo:插件管理器 vsjetpack:JET整合的工具包 vspreview:预览器 awsmfunc:一个脚本函数库
更新插件列表
安装必要的插件

如果需要映射杜比视界,则需要vs-nlq。此项目需要自行编译,无法通过vsrepo安装。如果不会编译,可以使用我编译好的文件(版本为0.5.0):mega
将编译好/下载的文件放到.\vapoursynth-portable\Lib\site-packages\vapoursynth\plugins\vsrepo 目录下
notion image

二、使用

1、代码编辑器

首先,需要一个代码编辑器。我这里用的vscode。简单介绍一下怎么设置
从下面地址下载
安装后打开,点击左侧插件图标,搜索chinese,安装中文插件
notion image
完成后右下角会提示重启,点击重启
notion image
点击设置
notion image
搜索files.associations,如下填写*.vpy和python
notion image

2、对比脚本

感谢afunnylookingsquash创建此脚本,同时感谢大佬帮助
点击右侧的下载按钮,放到和上面VS一样的文件夹里
notion image
用vscode打开multi_comps.vpy文件,翻到150行,下面此处被称为配置行
notion image
r“” 两个双引号内写文件具体路径
"Source1” 这里换成源的名字,不需要写全名。web写平台即可,盘写区域和厂商
比如: (r"C:\Users\iakina\Desktop\1.mkv", "test",),

写完后要点击左上角的文件-保存
notion image

3、使用

右键VS所在文件夹,点击”在终端打开“
notion image
输入如下命令
出现如下画面说明正在建立索引(此过程需要一点时间,取决于硬盘和文件)会在视频文件同目录创建一个同名,后缀为lwi的索引文件。只要这个文件还在,就会复用,不用再次等待
notion image
索引建立完会弹出一个vspreview程序
notion image

1、初次设置

第一次要点击右上角的SlowPics Comps-settings。如下设置
notion image
其中的username password是slow.pics的账号和密码(此项是必填,注册后填入对应信息即可),点击login登录后无任何变化,不需要管
notion image
点击vspreview下面的Settings
notion image
将Save Plugins Bar Position从原本的Local改为Global
关闭vspreview,重新运行上面的命令即可保存

2、正式发布

使用键盘上的1,2,3等数字键即可切换源,当所有源都同步时即可发布。如果不同步,请看5、不同步的处理方法
有半自动和自动的两种方式发布。半自动就是手动选画面,自动是由vspreview选择画面。推荐使用半自动
半自动
寻找细节丰富/丰富、明亮/黑暗、运动速度快/慢的图片,并且都为B帧的画面。按crtl+空格即会选中当前帧,选中的帧会显示在右侧的这里
notion image
下面填写右侧最上面1处的源,不同源之间用vs. 分割,然后填写下面2处的tmdb编号和类型
notion image
然后点击右下角的Start Upload
notion image
完成后,会显示Finished,点击1处的小按键即可复制对应的网址链接
notion image
自动
下面填写右侧最上面1处的源,不同源之间用vs. 分割,2处是做几个对比图,3处是从哪个帧开始截取画面,4处是到哪个帧停止截取。要选择尽量避开开头和结尾的演员表。5处填写tmdb编号和类型
notion image
然后点击右下角的Start Upload
notion image
完成后,会显示Finished,点击1处的小按键即可复制对应的网址链接
notion image

4、检查

将上面得到的网址粘贴到浏览器,就会如下显示
notion image
点击主画面或者按数字键1,2,3等即可切换源。点击下面缩略图切换不同帧

5、不同步的处理方法

视频如果不同步可以有其他参数可以加,脚本101行到149行为具体说明
英语原文
Required Arguments:
filepath (single string or tuple of strings for seamless branching discs)
name (the name of the clip to be displayed with FrameInfo)
Optional Arguments:
Trimming:
int → trim N frames from the start of the clip
tuple of 2 ints → (start, end) trim frames between start and end
list of tuples containing 2 ints each → multiple trim ranges, example: [(500, 506), (11501, 11598), (67801, 68000)]
Omit trim value(s) to keep clip untouched
Padding:
Pad(positions, counts) → pads frames after the frames specified in positions
positions and counts are a list of ints, for example:
Pad([1000, 2000], [1, 7]) would add one blank frame after frame 1000 and 7 blank frames after frame 2000
Resizing:
Resize(width, height) → the width and height you want to resize to
Note that resizing is applied to the clip before cropping
Cropping:
Crop(left, right, top, bottom) → values to crop the clip with
Adding Borders:
AddBorders(left, right, top, bottom) → values to add black borders to the clip with
Decimate:
Decimate(order) → Decimates duplicate frames in telecined video sources
order is an int, accepted values are 0 or 1 (0 for Bottom Field, 1 for Top Field)
Luma Adjustment:
Luma → Applies luminance correction to the clip to fix clips that suffer from the 0.88 gamma bug
Tonmapping:
HDR → tonemap the clip using HDR10 metadata
HDR10Plus → tonemap the clip using HDR10+ metadata
DOVI → tonemap the clip using Dolby Vision metadata
FPS Adjustment:
NoFPS → prevents the clip from having its framerate normalized
Note that by default, all clips are normalized to the FPS value set below with fpsnum, fpsden
Bake Enhancement Layer:
BakeEL(path) → Bakes the Dolby Vision enhancement layer into the video stream
Provide the file path to the EL.mkv as an argument
Skip:
Skip → Skips the clip for output in vspreview
Engine:
Sets the video indexing engine to one of the three available options in VapourSynth. Defaults to using LSMASH.
Engine.LSMASH → Sets the video indexing engine to be LSMASH.
Engine.BESTSOURCE → Sets the video indexing engine to be BestSource.
Engine.FFMS2 → Sets the video indexing engine to be ffms2.
Examples:
(r"file1.mkv", "Source1", (10, 200), Crop(0, 0, 140, 140))
(r"file2.EVO", "Source2", 24, HDR)
(r"file3.vob", "Source3", Luma, NoFPS)
((r"part1.m2ts", r"part2.m2ts"), "Source4", Resize(1920, 1080), DOVI)
(r"00002.m2ts", "Source5", AddBorders(0, 0, 140, 140), HDR10Plus, Pad([10000],[20]), Engine.FFMS2)
下面我会根据具体示例来详细讲解如何使用
不同参数用半角逗号隔开,且无严格顺序

1、Trim(修剪)

有时候同一个电影,不同版本可能片头不一样等等原因,导致稍微对不齐。而Trim可以选择删除前面多少帧,或删除中间多少帧。下面举一个例子
notion image
notion image
这个日版(JPN,左侧)7005帧为转场,德版是(GER,右侧)7484帧为转场。那就是德版多479帧
那配置行应该这样写,即在多出帧数的名称后面写多出的帧数
如果是要去除一段视频,应该为(start, end);多段为[(500, 506), (11501, 11598), (67801, 68000)]

2、Padding(填充)

其实就是和上面相反的动作,大部分情况不需要用到的
示例Pad([1000, 2000], [1, 7]) 意思是会在第 1000 帧之后添加 1 个空白帧,并且在第 2000 帧之后添加 7 个空白帧

3、Resizing(调整大小)

Resize(width, height) 通常在对比分辨率不同时使用。
注意要和有无黑边的区别(有时可能是画幅不一样),如1920 × 800和1920 × 1080,是因为黑边导致的分辨率不同,并不使用Resizing
示例。把UHD的4K转为1920×1080(1080p)

4、Cropping(裁剪)

Crop(left, right, top, bottom)
依次是左右上下,填对应数字.如果对应位置不需要调整,就填0
示例Crop(0, 0, 140, 140)

5、Adding Borders(加黑边)

AddBorders(left, right, top, bottom)
依次是左右上下,填对应数字.如果对应位置不需要调整,就填0
示例AddBorders(0, 0, 140, 140)

6、Decimate

主要出现在老电影中,面向实体也就是DVD时会出现。电影原生是以23.976fps制作,但是NTSC制的DVD是29.970fps,当时大部分处理方式是3:2 Pulldown技术,把每4帧原始画面拆分成场,重新组合成5帧。也就是会多出来帧数。而到蓝光时代也会出现这个情况,虽然原生兼容了23.976fps了,但是可以没有正确处理母带等原因导致的多出帧数
大概判断方法,当发现时长差不多时,一个视频比另一个视频帧数却多,并且对不齐的情况下。就可以使用
示例Decimate(field_order) field_order为数字0/1.如果是DVD可以看mediainfo中Scan order部分,Top Field First为顶场优先,也就是 1,另一种即为底场优先,填0.蓝光就只能把两种都试一遍,在vspreview中按空格播放预览一下,没有拉丝现象即正确处理

7、Luma Adjustment(亮度调整)

有些法版蓝光会出现伽马不正确的表现,通常为比其他盘亮,这时就通过此参数调整
Luma

8、Tonmapping(映射)

将HDR/HDR+/DV映射成SDR。如果是带DV的原盘,需要先转换成mkv格式,因为VS无法读取m2ts中的DV RPU信息。如果是FEL的DV,那需要额外把DV的EL层bake进文件,具体看第10项
HDR HDR10Plus DOVI

9、FPS Adjustment(帧率调整)

notion image
默认会把所有视频同步到24000/1001,即23.976fps。如果被同步后对不齐,即可以使用这个参数还原原始帧率
NoFPS

10、Bake Enhancement Layer

待写
BakeEL(r”path”)

11、Skip(跳过)

添加此参数即可跳过处理此文件
skip

12、Engine

索引引擎设置为 VapourSynth 中的三个可用选项之一。默认使用的是LSMASH。
Engine.LSMASH → 将视频索引引擎设置为 LSMASH。
Engine.BESTSOURCE → 将视频索引引擎设置为 BestSource。
Engine.FFMS2 → 将视频索引引擎设置为 ffms2。

例子

其他的事

做完对比图,更重要的是判断优劣。碍于本人水平,大多数瑕疵我也看不出来,并且VCB已经写出完善瑕疵教程。如果想学习认识瑕疵的,可以看VCB的公开教程 第四章 认识瑕疵

参考文章

 
💡
使用上的问题,欢迎您在底部评论区留言,一起交流~
上一篇
hetzner简单开机配置(含合并Volume)
下一篇
翻录蓝光原盘(UHD/BD)教程