Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion.

Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules.

Domains: forum.doom9.org / forum.doom9.net / forum.doom9.se

 

Go Back   Doom9's Forum > Capturing and Editing Video > Avisynth Usage
Register FAQ Today's Posts Search

Reply
 
Thread Tools Search this Thread
Old 1st October 2025, 10:25   #1  |  Link
dani75
Registered User
 
Join Date: Jul 2016
Location: Paris, France
Posts: 29
Opening an image sequence in AvS exactly like in VD?

Good morning everybody.
Sorry if the following question has already been asked, but I can't find the answer in the threads already posted.
VirtualDub is able to export image sequences, and to load such sequences in a very simple way : you only have to select the first image, and it loads exactly the full sequence.
I would like to do the same in an AviSynth(+) script : only select the first image for loading the full sequence.
I have read all the documentation and experimented for some the various functions available for loading image sequences (ImageSource, ImageReader, CoronaSequence). However, I had to specify with expressions how the filenames of the sequence were built, and give the exact number of images in the sequence. I would like to have the behaviour of VD in AviSynth. Is it possible without writing a complex script such as to determine the expressions to use for the filenames of the sequences and the exact number of images in the sequence ?

Last edited by dani75; 2nd October 2025 at 09:00.
dani75 is offline   Reply With Quote
Old 1st October 2025, 13:41   #2  |  Link
takla
Registered User
 
Join Date: May 2018
Posts: 242
Quote:
ffmpeg -framerate 30 -i "path/to/folder/*%04d.png" -c:v utvideo -vf "libplacebo=format=yuv420p:zscale=rin=limited:pin=709:tin=709:min=709:r=limited:p=709:t=709:m=709" OUTPUT.mkv
In case you don't find an answer, you could use ffmpeg to convert the folder to a lossless UT video.
Obvously adjust framerate, format and colorspace to your needs.
If you have more than 9999 frames, adjust *%04d.png to *%05d.png or 06d, etc.
takla is offline   Reply With Quote
Old 1st October 2025, 14:17   #3  |  Link
Shirtfull
Registered User
 
Join Date: May 2007
Posts: 54
Open image sequence in vdub.
select sequence range to output.
start vdub frame server and save to avi not vdr.
Then open avi in avisynth using AvsPmod or preferred app.
Shirtfull is offline   Reply With Quote
Old 2nd October 2025, 01:25   #4  |  Link
_Al_
Registered User
 
Join Date: May 2011
Posts: 407
Well, virtualdub is using some programing to sort this the way it works.

As a sort of seeing it what can be done, I was doing exactly the same things, writing a function for vapoursynth using python, there is a load of logging in that function, so it is clear what happens. Instead of log, print can be used:
Code:
def get_num(stem):
    ''' gets a number from trailing digit part of a base filename (called stem in pathlib)'''
    digits = ''
    for ch in reversed(stem):
        if ch.isdigit(): digits = f'{ch}{digits}'
        else:            break
    digits = digits.lstrip('0')
    if digits == '': num = 0
    else:            num = int(digits)
    return num


def only_same_pattern(path, paths):
    '''to accept only files for imwri.Read with the same pattern like selected file'''
    digits = ''
    path_stem = path.stem
    for ch in reversed(path_stem):
        if ch.isdigit(): digits = f'{ch}{digits}'
        else:            break
    if digits == '': return [path]
    same_non_digit_part = path_stem[:-len(digits)]
    if same_non_digit_part:
        return [p for p in paths if str(p.stem)[:-len(digits)] == same_non_digit_part]
    else:
        stem_length =len(path_stem)
        return [p for p in paths if str(p.stem).isdigit() and len(str(p.stem))==stem_length]


def custom_imwri_Readt(source, **kwargs):
    '''
    beta, weird results could occur,
    the idea is, source is just one image in a python list, that will become first image of new clip where only images of the same name pattern
    will be included in a clip
    
    same as imwri.Read() , but:
    -passing more arguments possible - fpsnum, fpsden, lastnum
    -source cannot be in a printf style form, like "image%06d.png" etc. , use core.imwri.Read() instead if using that
    -source must be a single filename or list of filenames.
    -if source is a single filename:
        -if firstnum is not passed, clip starts with passed source_path, not first image in that directory
        -clip is constructed with images only that have the same numbering pattern as selected source_path has
        -clip is constructed with images only that have the same extension as selected source_path has
    '''
    fpsnum   = kwargs.pop('fpsnum', None)
    fpsden   = kwargs.pop('fpsden', 1)
    firstnum = kwargs.pop('firstnum', None)
    lastnum  = kwargs.pop('lastnum',  None)
    if firstnum is not None: firstnum = int(str(firstnum).strip())
    if lastnum  is not None: lastnum = int(str(lastnum).strip())
    if isinstance(source, (list,tuple)):
        paths = [Path(source_path) for source_path in source]
    else:
        source_path = source
        path = Path(source_path)
        if not path.is_file():
            raise ImwriReadError('[imwri_Read] source must be a filename (filenames will be selected with same '
                                 'numbering pattern and extension) or a python list of filenames only.\n Not in print '
                                 'style form, like "image%06d.png" etc.')
        paths = list(path.parent.glob(f'*{path.suffix}'))
        if len(paths)>1:
            paths = only_same_pattern(path, paths)
        if len(paths)>1:
            firstnum_loaded = get_num(paths[0].stem)
            if firstnum is not None:
                firstnum_index = max(firstnum-firstnum_loaded, 0)
                if firstnum_index > len(paths):
                    log(f'firstnum={firstnum}, it is higher than numbering of files, it is ignored')
                    firstnum_index = 0
                else: log(f'firstnum={firstnum}')
            else:
                log(f'firstnum was not passed, so it was determined by selected source path: {path.name}, '
                    f'firstnum={get_num(path.stem)}')
                firstnum_index = paths.index(path)
            if lastnum is not None:
                lastnum += 1
                lastnum_index = min(lastnum-firstnum_loaded, len(paths))
                if lastnum_index <= firstnum_index:
                    log(f'lastnum={lastnum-1}, it is less than firstnum={firstnum}, it is ignored')
                    lastnum_index = len(paths)
                else: log(f'lastnum={lastnum-1}')
            else:
                log(f'lastnum was not passed')
                lastnum_index  = len(paths)
            paths = paths[firstnum_index:lastnum_index]
    if   len(paths)==1: paths_print = f'"{paths[0].name}"'
    elif len(paths)<4:  paths_print = ', '.join([f'"{p.name}"' for p in paths])
    else:               paths_print = f'"{paths[0].name}", ...., "{paths[-1].name}"'
    clip = core.imwri.Read(list(map(str, paths)), **kwargs)
    if isinstance(clip, (tuple,list)):
        head='clip,_'
        clip = clip[0]
    else:
        head='clip'
    log(f'{head}=core.imwri.Read([{paths_print}]{kwargs_printed(spacer=" "*30,**kwargs)})')
    if fpsnum is not None:
        log(f'clip.std.AssumeFPS(fpsnum={fpsnum}, fpsden={fpsden})')
        return clip.std.AssumeFPS(fpsnum=fpsnum, fpsden=fpsden)
    return clip
But the way it looks, there might be already something like that done for Avisynth already.

Last edited by _Al_; 2nd October 2025 at 01:29.
_Al_ is offline   Reply With Quote
Old 6th October 2025, 18:13   #5  |  Link
dani75
Registered User
 
Join Date: Jul 2016
Location: Paris, France
Posts: 29
Thank you to all three for your answers.
After having analyzed them, I think that I should clarify my purpose : writing an AviSynth subfunction, which would take as single argument the path of an image file (.jpg or .jpeg) which starts an image sequence, and open this last for subsequent calls to filters. Doing it with a CallCmd to VirtualDub opening such a sequence and producing an intermediate video file should be a comfortable way, but I am looking for a simpler but efficient solution.
Looking into ImageSource() documentation, I could easily write the instructions to build the string expression required for the "file" argument, but it seems harder for the "end" argument because the script would have to test the existence of all the files allowed by the expression and compute the "greatest number" embedded in them (this is probably the way _AI_ wrote his function above for VapourSynth, but unfortunately I don't know about Python).
I would like to avoid such complexity. Has anybody a great idea ?
dani75 is offline   Reply With Quote
Old 6th October 2025, 20:15   #6  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,498
Anything of use in this thread?
Append a still image respecting aspect ratio and possibly adding borders :- https://forum.doom9.org/showthread.p...er#post1906414

Or,

Avisynth w/ GScript and ImageReader - open a series of images :- https://forum.doom9.org/showthread.p...ght=picvidshow
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???
StainlessS is offline   Reply With Quote
Old 6th October 2025, 23:40   #7  |  Link
dani75
Registered User
 
Join Date: Jul 2016
Location: Paris, France
Posts: 29
Hi StainlessS !
Unfortunately not (if I didn't miss anything). The first script uses this feature of ImageSource or ImageReader: "If file points to a single file (no sprintf pattern), then that file is read once and the image subsequently returned for all requested frames".
The second one uses ImageReader with the file argument pointing successively to each image file of a sequence for opening it and appending it to the previous images of the sequence, assuming that we know exactly how many files there are in the sequence.
Thanks however.
It seems therefore that such a function for "Opening an image sequence in AviSynth exactly like in VD" doesn't exist.
dani75 is offline   Reply With Quote
Old 7th October 2025, 00:40   #8  |  Link
wonkey_monkey
Formerly davidh*****
 
wonkey_monkey's Avatar
 
Join Date: Jan 2004
Posts: 2,886
Sounds like what's needed is Avisynth function that takes a filename, identifies the number of digits immediately preceding the filetype separator (last .), identifies the number in that place, then counts forward from there, testing each file for existence until it doesn't succeed. Then it should return an array consisting of: wildcarded string ("filename%0[x]d.jpg", where x is the number of digits found), first frame number (number found in original string), and last number. Then those parameters can be passed into imagesource etc.

It doesn't sound like something you could write in a pure Avisynth script [waits for StainlessS to prove me wrong].
__________________
My AviSynth filters / I'm the Doctor

Last edited by wonkey_monkey; 7th October 2025 at 00:48.
wonkey_monkey is offline   Reply With Quote
Old 7th October 2025, 13:33   #9  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,498
OK, will have a go at it.

EDIT:
Quote:
Originally Posted by takla View Post
# ...
If you have more than 9999 frames, adjust *%04d.png to *%05d.png or 06d, etc.
Is an awful lot less bother if you just choose 6 digit variation, ALL of the time (when writing files, 1 million frames will usually be enough).

EDIT: Will only support fixed number of digits at END of name node, ie
"fred0000" OK
"fred00" OK
"fred99", "fred100", NOT OK, 2 digits, then 3 digits. (must use "fred099", "fred100")
"fred0000test" NOT OK, digits not at and of name node.

Harass me if you really MUST have "fred0000test" like usage.
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 7th October 2025 at 14:31.
StainlessS is offline   Reply With Quote
Old 7th October 2025, 18:21   #10  |  Link
dani75
Registered User
 
Join Date: Jul 2016
Location: Paris, France
Posts: 29
wonkey_monkey : you described exactly what I had in mind if I had chosen to write a pure AviSynth script for my subfunction. The difficulty comes with that loop for counting forward, because the only way is to use GScript instructions that I am not familiar with. I suspect also that performing all this process in AviSynth(+) to build the arguments to ImageSource will be time consuming. That's why I am rather moving towards the solution of a CallCmd to VirtualDub in command line opening such a sequence through a job and producing an intermediate video file.

StainlessS : specifying "fred%0d" will only read a sequence such as "fred99", "fred100", "fred%03d" will only read a sequence such as "fred099", "fred100", and "fred%06d" will only read a sequence such as "fred000099", "fred000100". "fred%06d" will not be able to read a sequence such as "fred099", "fred100". Therefore the script building the wildcarded string should be a little bit "clever". That's why I was asking for a better solution. Unless somebody tells us he is currently writing a new DLL with a new function for "Opening an image sequence in AviSynth exactly like in VD", I am starting to write the function in pure Avisynth with a CallCmd to VirtualDub.

Thanks anyway.
dani75 is offline   Reply With Quote
Old 7th October 2025, 19:21   #11  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,498
Dani, please provide a zip of images that adhere to your required variable number of digits format, you can probably post them on SendSpace without an account.
Only need to be eg 32x32 or thereabouts.

EDIT: This is current hack together code, totally untested and probably not working.
Only copes with fixed number of digits. [EDIT: No longer true]

SCRIPT REMOVED, SEE post #18.

EDIT: Defo has bugs in it. [EDITED]

EDIT: Takes filenames like eg ".\IMAGE\Fred_000100.jpg", loads jpegs with 6 digit index, starting from index 100.

EDIT: Not sure that I want to do variable number digits, you should always use 6 digit index, does away with this kind of multi-digit nonsense.
As a temp fix, you could use some kind of bulk file renamer to make sure all files are 6 digit index.
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 9th October 2025 at 09:48.
StainlessS is offline   Reply With Quote
Old 7th October 2025, 19:50   #12  |  Link
dani75
Registered User
 
Join Date: Jul 2016
Location: Paris, France
Posts: 29
Using CoronaSequence will probably help solving the problem of having variable number of digits.
I will probably try this solution after I am finished with the CallCmd solution.
dani75 is offline   Reply With Quote
Old 7th October 2025, 21:24   #13  |  Link
Emulgator
Big Bit Savings Now !
 
Emulgator's Avatar
 
Join Date: Feb 2007
Location: close to the wall
Posts: 2,104
Since I sometimes happen to manually delete repeated/obsolete/parent-for-retouched-frames while inspecting with IrfanView I can suggest an easier way:
Pull the frame folder onto den4b ReNamer, press
Rule -> Serialize -> pad with leading zeros to length 6 -> Rename.
On a SSD a pass is done in 1, max 3 sec, (then maybe a second pass is needed if for name collision reasons a (2) had been appended)
After such purging filename holes or doublettes have ceased to exist, and any VD, FFmpeg, AviSynth shall happily digest that sequence.
__________________
"To bypass shortcuts and find suffering...is called QUALity" (Die toten Augen von Friedrichshain)
"Data reduction ? Yep, Sir. We're that issue working on. Synce invntoin uf lingöage..."
Emulgator is offline   Reply With Quote
Old 7th October 2025, 21:39   #14  |  Link
dani75
Registered User
 
Join Date: Jul 2016
Location: Paris, France
Posts: 29
Thank you Emulgator, but I want to automatise that task.
dani75 is offline   Reply With Quote
Old 7th October 2025, 22:46   #15  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,498
I think that if it works, then will support mixed number of digits, where transitions are from eg 99->100 and 999->1000 etc.
[Not eg 63->064, nor 125->0126, which I doubt that Vdub supports either]

This
Code:
tmpName = RT_String("%s%s%0*d%s",Path,NameStem,DCnt,i,Ext)
0*=leading zeros to minimum total digit length of DCnt (* inserts DCnt variable value into string)
d is the variable i value converted into the index, but, if i has more digits than DCnt, output digits are expanded, not limited to DCnt digits.
This stuff in several lines above achieves expanding number of digits with transitions of eg 999->1000 [3 digits to 4 digits]
Also, ScanEnd=1000000, artificially limits index number to 1 million, which you could just change to 1000000000 (1Billion) if you like.

I dont currently have any images to test with.
EDIT: After a sleep and re-examine script, think may be working ok, but still untested.
EDIT: Updated script below, AVS+ Only. [still untested]

EDIT: SCRIPT REMOVED

@dani75, please do try the script function and say whether it works ok or not, thanx.
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 8th October 2025 at 20:51.
StainlessS is offline   Reply With Quote
Old 8th October 2025, 16:45   #16  |  Link
_Al_
Registered User
 
Join Date: May 2011
Posts: 407
Quote:
Originally Posted by dani75 View Post
... this is probably the way _AI_ wrote his function above for VapourSynth
python uses list object, which is a simple one dimension array of things (in our case paths), and those objects are in a square brackets, example, [path1,path2].

ImageReader for vapoursynth, imwri.Read(), can take that list of paths (one dimensional array of paths) to create a video. That might not be possible in Avisynth.
In vapoursynth yes. So I just getting all paths list (that have same printf format in directory) and getting position index for that given file. Then using simple slicing for whole list I got a new list that start with that given path position. And that new list (array of paths) is passed to vapoursynth imwri.Read source plugin (ImageReader).

Avisynth uses array as well, maybe slicing of that array too, not sure about passing array of paths into ImageReader.
_Al_ is offline   Reply With Quote
Old 8th October 2025, 18:40   #17  |  Link
dani75
Registered User
 
Join Date: Jul 2016
Location: Paris, France
Posts: 29
Dear StainlessS,
thank you for your code. Here are some sequences in order to test it :
https://www.sendspace.com/file/a6axrc
https://www.sendspace.com/file/smv4yv
I am currently writing the solution with CallCmd.

_AI_ : thank you for your explanations !

Last edited by dani75; 8th October 2025 at 19:40.
dani75 is offline   Reply With Quote
Old 8th October 2025, 20:20   #18  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,498
Script function Updated. [several bugs smashed]

OpenImageSeqLikeVD.avsi [Updated, Tested, Working]
Code:
Function OpenImageSeqLikeVD(String fn,Float "fps",bool "use_DevIL", bool "Info", String "Pixel_Type",bool "Debug") {
# OpenImageSeqLikeVD.avsi        #    https://forum.doom9.org/showthread.php?p=2023422#post2023422
# Requires AVS+, and RT_Stats. https://www.mediafire.com/file/xa3t1wx234gyzfq/RT_Stats_25%252626_x86_x64_dll_v2.00Beta13_20201229.zip/file
# Takes filenames like eg ".\IMAGE\Fred_0100.jpg", loads jpegs with minimum 4 digit index, starting from index 100.
# Debug stuff outputs info to M$ DebugView [DebugView v4.90]:- https://learn.microsoft.com/en-us/sysinternals/downloads/debugview
    Function OISLVD_IsDigit(String S) {C=RT_Ord(S) return C>=48&&C<=57}
    myName     = "OpenImageSeqLikeVD: "
    fps        = Default(fps,24.0)
    use_DevIL  = Default(use_DevIL,false)
    Info       = Default(Info,False)
    Pixel_Type = Default(Pixel_Type,"RGB24")
    Debug      = Default(debug,true)            # Change default to False if you like.
    fn   = fn.RT_GetFullPathName
    Name = fn.RT_FilenameSplit(4)
    DCnt=0
    for(i=Name.StrLen,1,-1) { if(OISLVD_IsDigit(Name.MidStr(i,1))) { DCnt=DCnt+1} Else {Break} }
    (Debug) ? RT_DebugF("DCnt=%d",DCnt,name=myName) : NOP
    if(DCnt==0) {
        Assert(Exist(fn),myName+RT_String("""File Does Not Exist, "%s"""",fn))
        (Debug) ? RT_DebugF("""ImageSource("%s",start=0,end=0,fps=%f, use_DevIL=%s,info=%s, pixel_type="%s")""",fn,fps,use_DevIL,Info,pixel_type,name=myName) : NOP
        Return ImageSource(fn,start=0,end=0,fps=fps, use_DevIL=use_DevIL,info=info, pixel_type=pixel_type)
    }
    Path = fn.RT_FilenameSplit(3)
    Ext  = fn.RT_FilenameSplit(8) # Incl leading '.'
    NameStem = Name.LeftStr(Name.StrLen-DCnt)
    start=Name.RightStr(DCnt).RT_NumberValue
    ScanEnd  = 1000000
    (Debug) ? RT_DebugF("""NameStem="%s" DCnt=%d start=%d""",NameStem,DCnt, Start,name=myName) : NOP
    end = -1
    for(i=start,ScanEnd) {
        tmpName = RT_String("%s%s%0*d%s",Path,NameStem,DCnt,i,Ext)
        ex = Exist(tmpName)
        (Debug) ? RT_DebugF("""Testing file %d) "%s" : %s""",i,tmpName,(ex)?"EXISTS": "NOT_EXIST",name=myName) : NOP
        if(!ex) { break }
        end = i
    }
    Assert(end>=start,myName+RT_String("""File Does Not Exist, "%s"""",fn))
    tmpName = RT_String("%s%s%%0%dd%s",Path,NameStem,DCnt,ext)
    (Debug) ? RT_DebugF("""ImageSource("%s",start=%d,end=%d,fps=%f, use_DevIL=%s,info=%s, pixel_type="%s")""",tmpName,start,end,fps,use_DevIL,Info,pixel_type,name=myName) : NOP
    Return ImageSource(tmpName,start=start,end=end,fps=fps, use_DevIL=use_DevIL,info=info, pixel_type=pixel_type)
}
Files for testing [~1.5MB]
https://www.mediafire.com/file/eax4z...D_TEST.7z/file

Test0.avs
Code:
Import(".\OpenImageSeqLikeVD.avsi")

OpenImageSeqLikeVD(".\IMAGE_0\Testing.jpg")
Test0.LOG
Code:
00000101	20:08:34	[3468] OpenImageSeqLikeVD: DCnt=0
00000102	20:08:34	[3468] OpenImageSeqLikeVD: ImageSource("C:\OpenImageSeqLikeVD_TEST\IMAGE_0\Testing.jpg",start=0,end=0,fps=24.000000, use_DevIL=False,info=False, pixel_type="RGB24")



Test1.avs
Code:
Import(".\OpenImageSeqLikeVD.avsi")

OpenImageSeqLikeVD(".\IMAGE_1\YGT_0.jpg")
Test1.LOG
Code:
00000101	20:03:34	[8064] OpenImageSeqLikeVD: DCnt=1
00000102	20:03:34	[8064] OpenImageSeqLikeVD: NameStem="YGT_" DCnt=1 start=0
00000103	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 0) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_0.jpg" : EXISTS
00000104	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 1) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_1.jpg" : EXISTS
00000105	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 2) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_2.jpg" : EXISTS
00000106	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 3) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_3.jpg" : EXISTS
00000107	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 4) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_4.jpg" : EXISTS
00000108	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 5) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_5.jpg" : EXISTS
00000109	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 6) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_6.jpg" : EXISTS
00000110	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 7) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_7.jpg" : EXISTS
00000111	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 8) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_8.jpg" : EXISTS
00000112	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 9) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_9.jpg" : EXISTS
00000113	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 10) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_10.jpg" : EXISTS
00000114	20:03:34	[8064] OpenImageSeqLikeVD: Testing file 11) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_11.jpg" : EXISTS

# ...

00000420	20:03:35	[8064] OpenImageSeqLikeVD: Testing file 317) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_317.jpg" : EXISTS
00000421	20:03:35	[8064] OpenImageSeqLikeVD: Testing file 318) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_318.jpg" : EXISTS
00000422	20:03:35	[8064] OpenImageSeqLikeVD: Testing file 319) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_319.jpg" : EXISTS
00000423	20:03:35	[8064] OpenImageSeqLikeVD: Testing file 320) "C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_320.jpg" : NOT_EXIST
00000424	20:03:35	[8064] OpenImageSeqLikeVD: ImageSource("C:\OpenImageSeqLikeVD_TEST\IMAGE_1\YGT_%01d.jpg",start=0,end=319,fps=24.000000, use_DevIL=False,info=False, pixel_type="RGB24")




Test2.avs
Code:
Import(".\OpenImageSeqLikeVD.avsi")

OpenImageSeqLikeVD(".\IMAGE_2\YGT2_000.jpg")
Test2.LOG
Code:
00000102	20:04:18	[2684] OpenImageSeqLikeVD: DCnt=3
00000103	20:04:18	[2684] OpenImageSeqLikeVD: NameStem="YGT2_" DCnt=3 start=0
00000104	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 0) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_000.jpg" : EXISTS
00000105	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 1) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_001.jpg" : EXISTS
00000106	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 2) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_002.jpg" : EXISTS
00000107	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 3) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_003.jpg" : EXISTS
00000108	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 4) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_004.jpg" : EXISTS
00000109	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 5) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_005.jpg" : EXISTS
00000110	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 6) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_006.jpg" : EXISTS
00000111	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 7) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_007.jpg" : EXISTS
00000112	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 8) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_008.jpg" : EXISTS
00000113	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 9) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_009.jpg" : EXISTS
00000114	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 10) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_010.jpg" : EXISTS
00000115	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 11) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_011.jpg" : EXISTS

# ...

00000412	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 308) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_308.jpg" : EXISTS
00000413	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 309) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_309.jpg" : EXISTS
00000414	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 310) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_310.jpg" : EXISTS
00000415	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 311) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_311.jpg" : EXISTS
00000416	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 312) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_312.jpg" : EXISTS
00000417	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 313) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_313.jpg" : EXISTS
00000418	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 314) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_314.jpg" : EXISTS
00000419	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 315) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_315.jpg" : EXISTS
00000420	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 316) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_316.jpg" : EXISTS
00000421	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 317) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_317.jpg" : EXISTS
00000422	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 318) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_318.jpg" : EXISTS
00000423	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 319) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_319.jpg" : EXISTS
00000424	20:04:18	[2684] OpenImageSeqLikeVD: Testing file 320) "C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_320.jpg" : NOT_EXIST
00000425	20:04:18	[2684] OpenImageSeqLikeVD: ImageSource("C:\OpenImageSeqLikeVD_TEST\IMAGE_2\YGT2_%03d.jpg",start=0,end=319,fps=24.000000, use_DevIL=False,info=False, pixel_type="RGB24")
Seems to do as required.

EDIT: Requires Avs+ and RT_Stats:- https://www.mediafire.com/file/xa3t1...01229.zip/file

EDIT: LOG files captured by DebugView.
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???

Last edited by StainlessS; 9th October 2025 at 10:11.
StainlessS is offline   Reply With Quote
Old 8th October 2025, 21:00   #19  |  Link
wonkey_monkey
Formerly davidh*****
 
wonkey_monkey's Avatar
 
Join Date: Jan 2004
Posts: 2,886
I bet no-one could write an Avisynth script that puts a million quid in my bank account...

waits
__________________
My AviSynth filters / I'm the Doctor
wonkey_monkey is offline   Reply With Quote
Old 8th October 2025, 21:04   #20  |  Link
StainlessS
HeartlessS Usurer
 
StainlessS's Avatar
 
Join Date: Dec 2009
Location: Over the rainbow
Posts: 11,498
No point, would not make a lot of difference
__________________
I sometimes post sober.
StainlessS@MediaFire ::: AND/OR ::: StainlessS@SendSpace

"Some infinities are bigger than other infinities", but how many of them are infinitely bigger ???
StainlessS is offline   Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 21:51.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2026, vBulletin Solutions Inc.