[SOLVED] Get Errors on AVIsynth-Nodes

Questions and answers on how to get the most out of FFAStrans
ThomasM
Site Admin
Posts: 231
Joined: Wed Feb 22, 2017 6:36 am

[SOLVED] Get Errors on AVIsynth-Nodes

Post by ThomasM »

Hi there,

I got in troublle with pre-defined AVIsynth-Nodes. The internal "Resize" and "FPS Converter"-Nodes give me back Script-errors. I Attache the whole Workflow "TEST_Full_Scanner_Workflow_Stumm" where one part is the filtering and transcoding using AVIsynth-nodes. These Nodes are fed by a preceding node doing a ProRes. This workflow can be fed with an .AVI, filename must be 16FA2345INV7654.avi or N8FA2345INV76564.avi to get the Variables right.

When I isolate the Workflow and only take the AVIsynth-Nodes, it works (TEST Resize_FPS_Crop). This workflow takes .mov-files.

I attach the latest .LOG - maybe this helps?

Any idea?

regards,
the desperate Thomas
Attachments
20190605-115525-234-85E2E0E2E128.txt
(130.02 KiB) Downloaded 376 times
TEST_Full_Scanner_Workflow_Stumm.xml
(109.96 KiB) Downloaded 390 times
TEST Resize_FPS_Crop.xml
(16.1 KiB) Downloaded 390 times
Last edited by ThomasM on Fri Jun 07, 2019 7:41 am, edited 1 time in total.
emcodem
Posts: 1811
Joined: Wed Sep 19, 2018 8:11 am

Re: Get Errors on AVIsynth-Nodes

Post by emcodem »

Hey Thomas, very nice workflow, congrats! :-)

Up in front, for avisynth related errors, it is mostly very helpful to get the .avs file of interest. You have to enable "keep cache files" option in your workflow to get access to it. In your case this would be:

Code: Select all

D:\FFAStrans-WorkFolder\20190604150347\20190605-115525-234-85E2E0E2E128\avs_v_fpsconv_20190605-115553-818-645590E04CAA.avs
now to the problem: In your workflow that does NOT work, you have the following code in your avisynth script.

Code: Select all

m_clip = AssumeFPS(m_clip, %s_assumed_fps_from_log%, 1, true)
In the example that works, you have a number instead of a variable. Are you sure the variable "s_assumed_fps_from_log" has the correct value at the time when the failing node, assumefps is executed?

Also i am pretty sure that you can also use the builtin fps converter with "Just set playback speed" option. maybe this spits out a better error message. But in the end it don't matter, personally i prefer to work with the custom nodes wherever possible.

Cheers,
emcodem
emcodem, wrapping since 2009 you got the rhyme?
ThomasM
Site Admin
Posts: 231
Joined: Wed Feb 22, 2017 6:36 am

Re: Get Errors on AVIsynth-Nodes

Post by ThomasM »

Hallo emcodem,

Danke für Deine schnelle Antwort - thanks for your fast reply!

I checked the workflow and found out, that populating the variable (Set FPS VAR) does not work because the RegEx takes the whole path with drive and not only the File I created with another node more to the beginning (FIND _assumefps_ Echo). The latter node extracts a string from the original LOG-file from the scanned .AVI-File. I tried to get the CMD in the "populate Variables"-node, but I was not successful with this.

Is there an easy way to get the Number from the string into the variable? I tried

$regext("%s_original_path%\%s_archnumber%\*.fps","(\w+)_Archivdigitalisat")

and

$regext("%s_original_path%\%s_archnumber%\*.fps","(\A..)")

the latter gave out z: and not 22 (or any other FPS the Log could have...).

Now it is clear - I have to have an expression which gives me only the last numbers from the end of the filename. I also could rename this temporary .fps to ANYNAME_22.fps, maybe this is easier to handle?

Any help appreciated,
Thomas
emcodem
Posts: 1811
Joined: Wed Sep 19, 2018 8:11 am

Re: Get Errors on AVIsynth-Nodes

Post by emcodem »

Hey Thomas :-)

besides the regex might not currently work, i guess the variable value will still not be set in the "Set Assume FPS" Node. Variables are always only visible to the current brach (Zweig) and it's sub-branches. You'd need to connect DEL###.fps to "Wait For Var Ready" if that's possible. This way, "Set FPS VAR" which sets your variable and "Set Assume FPS" which consumes your variable are in the same branch.

Also, i fear the way you want to use the populate variable does not work the way you assume it to work. Your expression is:

Code: Select all

$regext("%s_original_path%\%s_archnumber%\*.fps","(\w+)_Archivdigitalisat")
This looks like you expect it to look for a file on the filesystem which it just does not do. It is just about strings, not about finding files on the filesystem.

I don't have more time today, sorry. It is best for you to write the fps value to a file with a fixed filename (or a filename containing %s_job_id% and folder and use the $read function to read the value from the file in your populate variables processor...
emcodem, wrapping since 2009 you got the rhyme?
ThomasM
Site Admin
Posts: 231
Joined: Wed Feb 22, 2017 6:36 am

Re: Get Errors on AVIsynth-Nodes

Post by ThomasM »

emcodem,

Thank you so much - good hint with the branches. I was not aware of this. I thought, a var is valid thoughout a starting workflow... Always learning.

Ok, feierabend - enjoy the sunny evening... 😃☀️

Regards,
Tom
admin
Site Admin
Posts: 1687
Joined: Sat Feb 08, 2014 10:39 pm

Re: Get Errors on AVIsynth-Nodes

Post by admin »

Hi Thomas, the branch thing is a crucial aspect to be aware of. Think about it: Create and connect at the same level two "Populate variables" to a node. Select the exact same variable populated with different data. Which one will be used on the next connected node(s)? The one that finish first? No, you actually split your workflow in two thus creating two separate branches which are mostly totaly unaware of each other. So you cannot populate a variable in one branch and use the data in another branch. What you CAN do is store the data in a file and in another branch wait for that file to exist, read its contents and use the data. That is probably currently the best way to share data from populated variables between branches.

And as emcodem points out, the $regext() function and most other functions work on the string presented (or the value a variable represent). If you want to read contents of a file use $read("\\full\file.path") to a variable. Now you can use regext to extract strings from the file read.

So with this in mind, restructure your (impressive (non-working ;-))) workflow and give it another try. Best of luck!

-steinar
ThomasM
Site Admin
Posts: 231
Joined: Wed Feb 22, 2017 6:36 am

Re: Get Errors on AVIsynth-Nodes

Post by ThomasM »

Steinar,

thank you for this explanation. emcodem gave this explanation in his great instructional-thread, but i did not get the point correctliy - sorry for that.

Now - today I will restructure all.

Again, thanks for your advice!
regards,

tom
ThomasM
Site Admin
Posts: 231
Joined: Wed Feb 22, 2017 6:36 am

Re: Get Errors on AVIsynth-Nodes

Post by ThomasM »

...it's me again...

so, I tried the $read-function:

$read("%s_original_path%\%s_archnumber%\FPS.fps")

where the FPS.fps-file has only the extracted FPS-number as content (for example: 22 - no more than these two digits).

But the outcome is not 22 when I try to echo the variable to a text-file. I also tried $read(input string = "%s_original_path%\%s_archnumber%\FPS.fps") without success. What do i miss out?


I attach the new Workflow for reference.

rergards,

tom
Attachments
TEST_Full_Scanner_Workflow_Stumm.xml
(105.42 KiB) Downloaded 384 times
ThomasM
Site Admin
Posts: 231
Joined: Wed Feb 22, 2017 6:36 am

Re: Get Errors on AVIsynth-Nodes

Post by ThomasM »

Hi there,

is it possible, that $read() does not accept wildcards?

$read("%s_original_path%\Input.fps") -> works
$read("%s_original_path%\*.fps") -> does not work.

Will test the whole workflow tomorow...

Regards,
tom
emcodem
Posts: 1811
Joined: Wed Sep 19, 2018 8:11 am

Re: Get Errors on AVIsynth-Nodes

Post by emcodem »

Hey thomas,
exactly, the * symbol cannot be used here. You have to point to the full, correct path in the read function. Fun fact: there is a chance that windows 8.1 notation works where ~ is used as wildcard but please do not dig too deep into that topic.
My recommendation for creating temporary files in your workflow is to use the cache direcrory variable and the jobid variable. Keep all the temp files in one folder so u dont need to delete all files separately.

cheers!
emcodem
emcodem, wrapping since 2009 you got the rhyme?
Post Reply