#
Comparison
#
Vapoursynth-Preview
#
Setup
Install Python 3.10
- During installation tick
Add Python 3.10 to PATH
.
- During installation tick
Install Git
- Optionally type
git version
in your terminal to verify Git was installed.
- Optionally type
Install Vapoursynth
- Select
Install for me only
. - If you have any issues here, check out the official Installation Guide.
- Select
Before we install vs-preview, we need to install the following dependencies:
To install LSMASHSource, download LSMASHSource and open it. Inside the zip, open the x64 folder, copy
LSMASHSource.dll
and paste it in%appdata%\VapourSynth\plugins64
To install the rest of the plugins, run the following commands in your terminal:
vsrepo.py install libp2p sub placebo dovi_library
pip install git+https://github.com/OpusGang/awsmfunc.git
If
vsrepo.py
command doesn't work, make sure Windows is set to open.py
files with Python.Install vs-preview:
pip install vspreview
Create a new file called
comp.vpy
.Open
comp.vpy
with a text editor such as notepad++ and paste the following, edit as required and save it:import vapoursynth as vs from vapoursynth import core from awsmfunc import FrameInfo ## Hold shift and right click your file, select copy as path and paste it here clip1 = core.lsmas.LWLibavSource(r"C:\Paste\File\Path\Here.mkv") clip2 = core.lsmas.LWLibavSource(r"C:\Paste\File\Path\Here.mkv") clip3 = core.lsmas.LWLibavSource(r"C:\Paste\File\Path\Here.mkv") ## Name of the source, uncomment as needed depending on how many sources you're comparing source1 = "FirstSourceName" source2 = "SecondSourceName" source3 = "ThirdSourceName" ## Convert clip to 16bit (Only for filters that need it such as tonemapping and gamma fixing) ##clip1 = core.resize.Bicubic(clip1, format=vs.YUV444P16) ##clip2 = core.resize.Bicubic(clip2, format=vs.YUV444P16) ##clip3 = core.resize.Bicubic(clip3, format=vs.YUV444P16) ## Uncomment and edit values as needed if clips need cropping (Black letterboxing) [16 BIT REQUIRED FOR ODD NUMBERS] ##clip1 = core.std.Crop(clip1, left=240, right=240, top=0, bottom=0) ##clip2 = core.std.Crop(clip2, left=0, right=0, top=276, bottom=276) ##clip3 = core.std.Crop(clip3, left=0, right=0, top=21, bottom=21) ## Uncomment and edit values as needed if you need to upscale your clips ## Always scale to the highest resolution ##clip1 = core.resize.Spline36(clip1, 1920, 1080) ##clip2 = core.resize.Spline36(clip2, 1920, 1080) ##clip3 = core.resize.Spline36(clip3, 3840, 2160) ## Uncomment and edit values as needed if you need to trim your clips (Calculate the frame difference and enter the number here) ##clip1 = clip1[0:] ##clip2 = clip2[24:] ##clip3 = clip3[0:] ## Tonemapping (For HDR/DV content only), src_csp=1 is for HDR, src_csp=3 is for DV [16 BIT REQUIRED] ##clip1 = core.placebo.Tonemap(clip1, dynamic_peak_detection=0, tone_mapping_function=3, src_csp=1, dst_csp=0) ##clip2 = core.placebo.Tonemap(clip2, dynamic_peak_detection=0, tone_mapping_function=3, src_csp=3, dst_csp=0) ##clip3 = core.placebo.Tonemap(clip3, dynamic_peak_detection=0, tone_mapping_function=3, src_csp=1, dst_csp=0) ##Set DV clips to limited after tonemapping so FrameInfo works ##clip1 = core.resize.Bicubic(clip1, format=vs.YUV444P16, range=0) ##clip2 = core.resize.Bicubic(clip2, format=vs.YUV444P16, range=0) ##clip2 = core.resize.Bicubic(clip3, format=vs.YUV444P16, range=0) ## Fix Gamma bug (When one source is much brighter than others) [16 BIT REQUIRED] ##clip1 = core.std.Levels(clip1, gamma=0.88, min_in=4096, max_in=60160, min_out=4096, max_out=60160, planes=0) ##clip2 = core.std.Levels(clip2, gamma=0.88, min_in=4096, max_in=60160, min_out=4096, max_out=60160, planes=0) ##clip3 = core.std.Levels(clip3, gamma=0.88, min_in=4096, max_in=60160, min_out=4096, max_out=60160, planes=0) ## Displays the frame number, type, and group name in the top left corner clip1= FrameInfo(clip1, source1) clip2= FrameInfo(clip2, source2) clip3= FrameInfo(clip3, source3) ## Slow.pics labelling for automatic comparisons clip1 = clip1.std.SetFrameProp('Name', data = source1) clip2 = clip2.std.SetFrameProp('Name', data = source2) clip3 = clip3.std.SetFrameProp('Name', data = source3) ## Comment/Uncomment as needed depending on how many clips you're comparing clip1.set_output(1) clip2.set_output(2) clip3.set_output(3)
That's it for the setup, now to use vspreview you just need to run this command in your terminal or paste it in a text file and save it as
comp.bat
:vspreview /path/to/comp.vpy
Now, when making comps you just edit
comp.vpy
to include the necessary file paths, comment/uncomment lines as required, edit the crop, trim, upscale, etc values when needed and then runcomp.bat
or runvspreview comp.vpy
directly from your terminal.
#
Quality of Life Changes for Screenshotting Manually via VS-Preview (Recommended)
Use slow.pics friendly file naming, so you can drag all the images onto the site and have them automaically sorted In VSPreview on the bottom bar select Misc, set file name template to
{frame}_{script_name}_({index})
.Jump through frames quickly In VSPreview on the bottom bar select Playback, directly right of the playback keys set the
1
value to120
.Take screenshots quicker by setting the save image button to enter Open
%localappdata%\Programs\Python\Python310\Lib\site-packages\vspreview\toolbars\misc
and edittoolbar.py
- Line 150:Replace Qt.SHIFT + Qt.Key_S
withQt.Key_Return
. - If you can't spam fast enough, in vs-preview click settings and set PNG compression to a lower level (higher value).Swap binds to save your pinky finger, so you no longer have to hold shift all the time Open
%localappdata%\Programs\Python\Python310\Lib\site-packages\vspreview\toolbars\playback\
and edittoolbar.py
- Line 164-165 AddQt.SHIFT +
beforeQt.Key_Left
andQt.Key_Right
- Line 166-167 RemoveQt.SHIFT +
beforeQt.Key_Left
andQt.Key_Right
#
Making the comparison
- Press
Right Arrow
key to move forward a set amount of frames. Number
keys to switch between video sources and compare quality.- Double tap
Enter
key to take and save screenshots. - Aim to screenshot a variety of scenes like light/dark, low/high motion, etc.
- Try and match frame type when screenshotting, e.g. all sources on a
B
frame, single frame jump comes in handy for when they don't match (Shift + Arrow keys
).- Note: If a source file does not have
B
frames for you to match, you should skip matching frame type entirely for that source. This is usually true for Crunchyroll WEB-DLs, which have noB
frames.
- Note: If a source file does not have
#
Screenshotting Automatically
If you don't want to take screenshots and upload them manually, then you can simply use VS-Preview's automatic comparison function.
- Click the
comp
button in the toolbar. - Set the
Picture Type
toAll
, orB
if you want matching frame-types - Name the collection appropriately for Slow.pics.
- Use a large amount of images to make the comparison as useful as possible, ideally at least 40 since you'll get a lot of futile results with it being automatic.
- Hit
Start Upload
and patiently wait while vspreview absolutely molests your battlestation.
#
Automatic Comparison Scripts
Prerequisites:
- Install Python 3.10
- Install Vapoursynth
- Select
Install for me only
. - If you have any issues here, check out the official Installation Guide.
- Select
- Install dependencies via running the following command in your terminal:
pip install pathlib anitopy pyperclip requests requests_toolbelt
- Download LSMASHSource and open it. Inside the zip, open the x64 folder, copy
LSMASHSource.dll
and paste it in%appdata%\VapourSynth\plugins64
- (Optional) Install FFmpeg and add it to PATH.
Instructions:
- Put
comp.py
into the same folder where the video files you want to compare are located. - Rename your files to have the typical
[Group] Show - EP.mkv
naming, since the script will try to parse the group and show name. - When there's no group, such as BDMV or WEB-DL, use the source/service as the group tag.
For example:
This will result in images named as JPBD.png, Crunchyroll WEB-DL.png, and Group.png from JPBD, Crunchyroll WEB-DL, and Group respectively.
/Comparison/ ├── [JPBD] Youjo Senki - 01.m2ts ├── [Crunchyroll WEB-DL] Youjo Senki - 01.mkv ├── [Group] Youjo Senki - 01.mkv └── comp.py
- Adjust the variables in the script accordingly.
- Run the script via either double clicking it or by running
py comp.py
in your terminal.
#
Manually with MPV
- Install MPV
- Screenshots are to be taken using MPV.
- Slow.pics must be used for making comparisons.
- Any other video-altering settings (different scalers, shaders, etc) are not allowed to be used.
- Hardware decoding must be disabled.
- Both screenshots are to be the exact same frame.
- Both screenshots must be taken at the same resolution, take scaled screenshots if necessary.
- Always scale to the highest resolution.
- Subtitles are to be disabled.
- Comparisons must be titled the name of the anime, and all encodes must be labelled accordingly.
- You must include source in the comparison, this will usually be the BDMV/Remux when BluRay encodes are being compared or WEB-DL if WEB encodes are being compared.
MPV config must be the one as shown below:
no-deband
profile=gpu-hq
screenshot-format=png
It's recommended to use the latest git builds of MPV.