| 
		
	
	
	
		
	Posts: 83Threads: 14
 Joined: Aug 2024
 
	
		
		
 03.09.2024, 01:46 
		Hi,Is it possible to run an encoding with both Vapoursynth scripts and Avisynth scripts ?
 
 By the way, I actually only need to use one Avisynth custom script (which doesn't work in custom Vapoursynth script)
 
 Thank you
 
	
	
	
		
	Posts: 12.049Threads: 65
 Joined: May 2017
 
	
	
		afaik: No.You can use Avisynth filters in Vapoursynth, but to use an Avisynth script it would need to be rewritten to Vapousynth.
 What are you trying to do?
 
 Cu Selur
 
----Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
 
 
	
	
	
		
	Posts: 83Threads: 14
 Joined: Aug 2024
 
	
	
		OK... I'll get straight to the point then. I want to replace problematic frames (with black hole / circle, like perforation) with their duplicate counterpart. 
Here is the script : 
 # Charge le plugin FFMS2LoadPlugin("C:\Program Files (x86)\AviSynth+\plugins64+\ffms2.dll")
 # Source vidéo
 video = FFVideoSource("C:\Users\Admin\Desktop\FILM 3 - ETAPE 3 - DAVINCI.mkv")
 # Fonction pour remplacer des frames spécifiques
 function ReplaceFrames(clip source, int start1, int end1, int start2, int end2) {
 # Extraire les segments à garder
 segment1 = source.Trim(0, start1 - 1)
 segment2 = source.Trim(start2, end2)
 segment3 = source.Trim(end1 + 1, source.FrameCount - 1)
 
 # Assembler les segments
 return segment1 ++ segment2 ++ segment3
 }
 # Remplacement des frames 43125 à 43129 par 43120 à 43124
 video = ReplaceFrames(video, 43125, 43129, 43120, 43124)
 # Remplacement des frames 43301 à 43304 par 43275 à 43278
 video = ReplaceFrames(video, 43301, 43304, 43275, 43278)
 # Remplacement de la frame 22261 par 22257
 video = ReplaceFrames(video, 22261, 22261, 22257, 22257)
 # Remplacement de la frame 22262 par 22257
 video = ReplaceFrames(video, 22262, 22262, 22257, 22257)
 # Remplacement de la frame 22263 par 22256
 video = ReplaceFrames(video, 22263, 22263, 22256, 22256)
 # Remplacement de la frame 22264 par 22258
 video = ReplaceFrames(video, 22264, 22264, 22258, 22258)
 # Remplacement de la frame 22437 par 22441
 video = ReplaceFrames(video, 22437, 22437, 22441, 22441)
 # Remplacement de la frame 22438 par 22442
 video = ReplaceFrames(video, 22438, 22438, 22442, 22442)
 # Remplacement de la frame 22439 par 22443
 video = ReplaceFrames(video, 22439, 22439, 22443, 22443)
 # Remplacement de la frame 22440 par 22444
 video = ReplaceFrames(video, 22440, 22440, 22444, 22444)
 
 # Remplacement de la frame 22454 par 22453
 video = ReplaceFrames(video, 22454, 22454, 22453, 22453)
 
 # Retourner le résultat final
 return video
 
	
	
	
		
	Posts: 12.049Threads: 65
 Joined: May 2017
 
	
	
		Porting: function ReplaceFrames(clip source, int start1, int end1, int start2, int end2) {# Extraire les segments à garder
 segment1 = source.Trim(0, start1 - 1)
 segment2 = source.Trim(start2, end2)
 segment3 = source.Trim(end1 + 1, source.FrameCount - 1)
 
 # Assembler les segments
 return segment1 ++ segment2 ++ segment3
 }
to Vapoursynth should be easy. 
Should be:
 def ReplaceFrames(clip: vs.VideoNode, start1: int, end1: int, start2: int, end2: int)  -> vs.VideoNode:# Extraire les segments à garder
 segment1 = source.Trim(0, start1 - 1)
 segment2 = source.Trim(start2, end2)
 segment3 = source.Trim(end1 + 1, source.num_frames - 1)
 
 # Assembler les segments
 return segment1 + segment2 + segment3
 }
So you could save that in a file named replaceframes.py (in your 'Hybrid/64bit/vsscripts'-folder) and then use it in a custom section through:
 import replaceframes
 # Remplacement des frames 43125 à 43129 par 43120 à 43124
 clip = replaceFrames.ReplaceFrames(clip, 43125, 43129, 43120, 43124)
 # Remplacement des frames 43301 à 43304 par 43275 à 43278
 clip = replaceFrames.ReplaceFrames(clip, 43301, 43304, 43275, 43278)
 # Remplacement de la frame 22261 par 22257
 clip = replaceFrames.ReplaceFrames(clip, 22261, 22261, 22257, 22257)
 # Remplacement de la frame 22262 par 22257
 clip = replaceFrames.ReplaceFrames(clip, 22262, 22262, 22257, 22257)
 # Remplacement de la frame 22263 par 22256
 clip = replaceFrames.ReplaceFrames(clip, 22263, 22263, 22256, 22256)
 # Remplacement de la frame 22264 par 22258
 clip = replaceFrames.ReplaceFrames(clip, 22264, 22264, 22258, 22258)
 # Remplacement de la frame 22437 par 22441
 clip = replaceFrames.ReplaceFrames(clip, 22437, 22437, 22441, 22441)
 # Remplacement de la frame 22438 par 22442
 clip = replaceFrames.ReplaceFrames(clip, 22438, 22438, 22442, 22442)
 # Remplacement de la frame 22439 par 22443
 clip = replaceFrames.ReplaceFrames(clip, 22439, 22439, 22443, 22443)
 # Remplacement de la frame 22440 par 22444
 clip = replaceFrames.ReplaceFrames(clip, 22440, 22440, 22444, 22444)
 # Remplacement de la frame 22454 par 22453
 clip = replaceFrames.ReplaceFrames(clip, 22454, 22454, 22453, 22453)
 clip = replaceFrames.ReplaceFrames(clip, 22440, 22440, 22444, 22444)
 
 return clip
Got no time to test, but this should work. 
One could also use https://github.com/Irrational-Encoding-W...emapFrames  in a custom section.
 
Cu Selur
	
----Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
 
 
	
	
	
		
	Posts: 83Threads: 14
 Joined: Aug 2024
 
	
	
		Thank you. However I had several issues, I guess they're basic (like core not defined, source not defined, module 'vapoursynth' has no attribute 'get_core', and others). Since it's only for one video I just run a second encoding with Avisynth custom script.
 
 But to get back to the original topic, do you think it would be possible that Hybrid switches from Vapoursynth to Avisynth (or vice versa) during encoding, for example just before output is generated on the script, the video would be reloaded into an avisynth script and further filters would be applied ?
 
	
	
	
		
	Posts: 96Threads: 26
 Joined: Feb 2024
 
	
	
		 (03.09.2024, 04:16)Selur Wrote:  You can use Avisynth filters in Vapoursynth 
oh? i haven't seen the avisynth tab in ages and i'd like to use deflicker filters. 
is there a way i can still activate the avisynth tab and filters to use them in vaporsynth?
	 
	
	
	
		
	Posts: 12.049Threads: 65
 Joined: May 2017
 
	
	
		https://forum.selur.net/thread-3835.html hast an example how Avisynth filters can be used. 
No, there is no special gui support for this.
 
Cu Selur
	 
----Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
 
 
	
	
	
		
	Posts: 12.049Threads: 65
 Joined: May 2017
 
	
	
		Sorry, fixed the syntax for the replaceFrames.py from vapoursynth import coreimport vapoursynth as vs
 
 def ReplaceFrames(clip: vs.VideoNode, start1: int, end1: int, start2: int, end2: int):
 # Extract segments to keep
 segment1 = clip[:start1]  # From the start to the frame before start1
 segment2 = clip[start2:end2 + 1]  # From start2 to end2
 segment3 = clip[end1 + 1:]  # From the frame after end1 to the end
 
 # Combine the segments
 return segment1 + segment2 + segment3
then call it in Hybrid under "Filtering->Vapoursynth->Custom->Insert before->ReplacBlackFrames"
 import replaceFrames
 # Remplacement des frames 43125 à 43129 par 43120 à 43124
 clip = replaceFrames.ReplaceFrames(clip, 43125, 43129, 43120, 43124)
 # Remplacement des frames 43301 à 43304 par 43275 à 43278
 clip = replaceFrames.ReplaceFrames(clip, 43301, 43304, 43275, 43278)
 # Remplacement de la frame 22261 par 22257
 clip = replaceFrames.ReplaceFrames(clip, 22261, 22261, 22257, 22257)
 # Remplacement de la frame 22262 par 22257
 clip = replaceFrames.ReplaceFrames(clip, 22262, 22262, 22257, 22257)
 # Remplacement de la frame 22263 par 22256
 clip = replaceFrames.ReplaceFrames(clip, 22263, 22263, 22256, 22256)
 # Remplacement de la frame 22264 par 22258
 clip = replaceFrames.ReplaceFrames(clip, 22264, 22264, 22258, 22258)
 # Remplacement de la frame 22437 par 22441
 clip = replaceFrames.ReplaceFrames(clip, 22437, 22437, 22441, 22441)
 # Remplacement de la frame 22438 par 22442
 clip = replaceFrames.ReplaceFrames(clip, 22438, 22438, 22442, 22442)
 # Remplacement de la frame 22439 par 22443
 clip = replaceFrames.ReplaceFrames(clip, 22439, 22439, 22443, 22443)
 # Remplacement de la frame 22440 par 22444
 clip = replaceFrames.ReplaceFrames(clip, 22440, 22440, 22444, 22444)
 # Remplacement de la frame 22454 par 22453
 clip = replaceFrames.ReplaceFrames(clip, 22454, 22454, 22453, 22453)
 clip = replaceFrames.ReplaceFrames(clip, 22440, 22440, 22444, 22444)
would create code like:
 # Importsimport vapoursynth as vs
 # getting Vapoursynth core
 import sys
 import os
 core = vs.core
 # Import scripts folder
 scriptPath = 'F:/Hybrid/64bit/vsscripts'
 sys.path.insert(0, os.path.abspath(scriptPath))
 # loading plugins
 core.std.LoadPlugin(path="F:/Hybrid/64bit/vsfilters/SourceFilter/LSmashSource/LSMASHSource.dll")
 # defining beforeReplaceBlackFrames-function - START
 def beforeReplaceBlackFrames(clip):
 import replaceframes
 
 # Remplacement des frames 43125 à 43129 par 43120 à 43124
 clip = replaceFrames.ReplaceFrames(clip, 43125, 43129, 43120, 43124)
 # Remplacement des frames 43301 à 43304 par 43275 à 43278
 clip = replaceFrames.ReplaceFrames(clip, 43301, 43304, 43275, 43278)
 # Remplacement de la frame 22261 par 22257
 clip = replaceFrames.ReplaceFrames(clip, 22261, 22261, 22257, 22257)
 # Remplacement de la frame 22262 par 22257
 clip = replaceFrames.ReplaceFrames(clip, 22262, 22262, 22257, 22257)
 # Remplacement de la frame 22263 par 22256
 clip = replaceFrames.ReplaceFrames(clip, 22263, 22263, 22256, 22256)
 # Remplacement de la frame 22264 par 22258
 clip = replaceFrames.ReplaceFrames(clip, 22264, 22264, 22258, 22258)
 # Remplacement de la frame 22437 par 22441
 clip = replaceFrames.ReplaceFrames(clip, 22437, 22437, 22441, 22441)
 # Remplacement de la frame 22438 par 22442
 clip = replaceFrames.ReplaceFrames(clip, 22438, 22438, 22442, 22442)
 # Remplacement de la frame 22439 par 22443
 clip = replaceFrames.ReplaceFrames(clip, 22439, 22439, 22443, 22443)
 # Remplacement de la frame 22440 par 22444
 clip = replaceFrames.ReplaceFrames(clip, 22440, 22440, 22444, 22444)
 # Remplacement de la frame 22454 par 22453
 clip = replaceFrames.ReplaceFrames(clip, 22454, 22454, 22453, 22453)
 clip = replaceFrames.ReplaceFrames(clip, 22440, 22440, 22444, 22444)
 return clip
 # defining beforeReplaceBlackFrames-function - END
 
 # Import scripts
 import validate
 # Source: 'G:\TestClips&Co\files\test.avi'
 # Current color space: YUV420P8, bit depth: 8, resolution: 640x352, frame rate: 25fps, scanorder: progressive, yuv luminance scale: limited, matrix: 470bg
 # Loading G:\TestClips&Co\files\test.avi using LWLibavSource
 clip = core.lsmas.LWLibavSource(source="G:/TestClips&Co/files/test.avi", format="YUV420P8", stream_index=0, cache=0, prefer_hw=0)
 frame = clip.get_frame(0)
 # setting color matrix to 470bg.
 clip = core.std.SetFrameProps(clip, _Matrix=vs.MATRIX_BT470_BG)
 # setting color transfer (vs.TRANSFER_BT601), if it is not set.
 if validate.transferIsInvalid(clip):
 clip = core.std.SetFrameProps(clip=clip, _Transfer=vs.TRANSFER_BT601)
 # setting color primaries info (to vs.PRIMARIES_BT470_BG), if it is not set.
 if validate.primariesIsInvalid(clip):
 clip = core.std.SetFrameProps(clip=clip, _Primaries=vs.PRIMARIES_BT470_BG)
 # setting color range to TV (limited) range.
 clip = core.std.SetFrameProps(clip=clip, _ColorRange=vs.RANGE_LIMITED)
 # making sure frame rate is set to 25fps
 clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
 # making sure the detected scan type is set (detected: progressive)
 clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_PROGRESSIVE) # progressive
 clip = beforeReplaceBlackFrames(clip)
 # adjusting output color from: YUV420P8 to YUV420P10 for NVEncModel
 clip = core.resize.Bicubic(clip=clip, format=vs.YUV420P10, range_s="limited")
 # set output frame rate to 25fps (progressive)
 clip = core.std.AssumeFPS(clip=clip, fpsnum=25, fpsden=1)
 # output
 clip.set_output()
(see Vapoursynth Script Preview)
 
Cu Selur
	
----Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
 
 
	
	
	
		
	Posts: 12.049Threads: 65
 Joined: May 2017
 
	
	
		Quote:But to get back to the original topic, do you think it would be possible that Hybrid switches from Vapoursynth to Avisynth (or vice versa) during encoding, for example just before output is generated on the script, the video would be reloaded into an avisynth script and further filters would be applied ?  
You mean that Hybrid does a multipass encoding, first for example, it uses Avisynth to filter the source, saves the output into some lossless compressed file, then uses Vapoursynth to filter that output and encodes it to whatever output was chosen? 
Sorry, no. Hybrid atm. does not support this, and rewriting Hybrid to do this seems too much work for the gain.
 
Cu Selur
	 
----Dev versions are in the 'experimental'-folder of my GoogleDrive, which is linked on the download page.
 
 
	
	
	
		
	Posts: 83Threads: 14
 Joined: Aug 2024
 
	
	
		Yes basically, because I think that's how it works between filters : reusing the last video and re-encoding it.But if it's too complicated there's no need to bother, we just have to import the video again.
 |