This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

SelectEvery für Color Filter
#1
Guten Tag Smile 
Ich hüpfe immer von Projekt zu Projekt wenn ich mich von einem derer etwas ausgebrannt fühle , Jetzt gerade versuche ich mal wieder meine guten alten Scrubs dvds zu encoden (bzw ich suche erst eine gute methode bevor ich wirklich alle staffel durchgehe). Mixed interlaced soweit ich es beurteilen kann.

Jetzt kamm mir die 'geniale idee' (da ich eh mit bob deinterlace) Jede even frame 'normal' zu behandeln (so das sie in meinen augen gut aussieht) aber jeder odd frame entweder sehr hohen oder sehr niedrigen Kontrast etc zu geben. Eine art fake HDR/LDR frame, die benutzt werden kann um alle Teporalen Filter e.g grain oder noise damit zu füttern . Zum schluss muss natürlich nochmal ein SelectEvery sein um nur die even frames zurück zu lassen.

Ich glaube damit könnte man so einiges ausporbieren was für alte videos hilfreich wäre. Auch der gedanke progressive material zu bobben um die erste frame zu verdunkel und die zweite zu erhellen um sie einzeln zu bearbeiten und sie am schluss zusammen zu mischen. Das könnte sogar im HD bereich nützlich sein wenn man manuel echtes HDR material zu SD Konvertieren möchte.


Also das Feature request in kurz zusammengefasst: Bitte zusätlich zu ReplaceFrameSample einen SelectEvery filter für 'alle' Color filter (und vieleicht noch den schärfe filtern? bzw nützlichen nicht temporale filter)
Reply
#2
Okay,.. mir ist schon nicht klar wie das im Code aussehen soll.
Auch erscheint es mir schon sehr speziell, so dass ich denke das gehört vermutlich eher in eine Custom-Bereich, aber vielleicht lasse ich mich überzeugen wenn Du mir ein Skript und einen BeispielClip zukommen lassen kannst bei dem das wirklich sinnig ist.

Cu Selur
Reply
#3
(11.03.2021, 19:27)Selur Wrote: Okay,.. mir ist schon nicht klar wie das im Code aussehen soll.
Auch erscheint es mir schon sehr speziell, so dass ich denke das gehört vermutlich eher in eine Custom-Bereich, aber vielleicht lasse ich mich überzeugen wenn Du mir ein Skript und einen BeispielClip zukommen lassen kannst bei dem das wirklich sinnig ist.

Cu Selur

Das werde ich machen ! Scrubs hat glücklicherweise trotzallem eine gute color range , also kann man doch mehr raus rausohlen als normal sichtbar wäre. 
Ich werde heute abend noch einne script schreiben und ein kurzen clip anhängen.
Reply
#4
Mach das, werde ich mir dann vermutlich in Ruhe am WE anschauen und drüber nachdenken ob und wie ich das eventuell hinzufügen würde. Smile
(draufschauen werde ich je nach dem noch heute Abend, aber vermutlich noch nichts entscheiden)

Cu Selur
Reply
#5
(11.03.2021, 19:45)Selur Wrote: Mach das, werde ich mir dann vermutlich in Ruhe am WE anschauen und drüber nachdenken ob und wie ich das eventuell hinzufügen würde. Smile
(draufschauen werde ich je nach dem noch heute Abend, aber vermutlich noch nichts entscheiden)

Cu Selur
Genau alles ohne hektik . und vielen Dank fürs zeit nehmen Smile

Also der script steht soweit , nur gibt es noch einen kleinen bug den ich wohl nicht ganz verstehe. Der Script klappt gut bis er die clips interleaved, obwohl beide clips mit AssumeFPS auf 25fps gesetzt werden, wird der zweite cip mit 50fps (oder doppelter frame anzahl) zusammen gemischt. Den fehler versuche ich dann morgen zu finden zsm mit einenr schönen sample stelle.
(anmerkung: das ist nur ein Beispiel Script)
scriptPath = 'C:/Home/Apps/Hybrid/64bit/vsscripts'
sys.path.append(os.path.abspath(scriptPath))
core.std.LoadPlugin(path="C:/Home/Apps/Hybrid/64bit/vsfilters/ColorFilter/TimeCube/vscube.dll")
core.std.LoadPlugin(path="C:/Home/Apps/Hybrid/64bit/vsfilters/Support/RemapFramesVapoursynth.dll")
import adjust
#
# split clips with SelectEvery
clipEven = core.std.SelectEvery(clip=clip, cycle=2, offsets=[0])
#
# Do stuff with Even frames
#
# ColorMatrix
clipEven = core.std.SetFrameProp(clip,prop="_Transfer",intval=1)
clipEven = core.resize.Bicubic(clip=clipEven, matrix_in_s="2020cl", matrix_s="240m", range_in=0, range=0)
clipEven = core.std.Levels(clip=clipEven, min_in=0, max_in=255, min_out=0, max_out=235, planes=[0])
clipEven = core.remap.Rfs(baseclip=clipEven, sourceclip=adjust.Tweak(clip=clip, hue=0.00, sat=0.56, cont=0.50, bright=0, coring=True))
clipEven = core.resize.Bicubic(clip=clipEven, format=vs.RGB24, matrix_in_s="240m")
clipEven = core.timecube.Cube(clip=clipEven, cube="C:/Home/Apps/Hybrid/64bit/vsfilters/ColorFilter/TimeCube/PQ_to_BT709_slope_v2.cube")
#
# split clips with SelectEvery
clipOdd = core.std.SelectEvery(clip=clip, cycle=2, offsets=[1])
#
# Do stuff with Odd frames
#
# Interleave clips back to one
clipEven = core.std.AssumeFPS(clip=clipEven,fpsnum=25, fpsden=1)# new fps: 25
clipOdd = core.std.AssumeFPS(clip=clipOdd,fpsnum=25, fpsden=1) # new fps: 25
clip = core.std.Interleave(clips = [clipEven, clipOdd])
clip = core.std.AssumeFPS(clip=clip,fpsnum=50, fpsden=1)# new fps: 50

Und fake HDR frames kann man mit merge zusammenfügen zb 1 zu 1 oder 75% etc http://www.vapoursynth.com/doc/functions...#std.Merge



*Edit: Oh so funktionierts. clipEven = core.std.SetFrameProp(clip,prop="_Transfer",intval=1) war das problem im gegensatz zu den anderen steht hier nicht clip=clip, so hab ich übersehen es clipEven zu zuordnen
#
# split clips with SelectEvery and Assume FPS
clipOdd = core.std.SelectEvery(clip=clip, cycle=2, offsets=[1])
clipOdd = core.std.AssumeFPS(clip=clipOdd,fpsnum=25, fpsden=1) # new fps: 25
#
#
# split clips with SelectEvery and Assume FPS
clipEven = core.std.SelectEvery(clip=clip, cycle=2, offsets=[0])
clipEven = core.std.AssumeFPS(clip=clipEven,fpsnum=25, fpsden=1)# new fps: 25
#
# Do stuff with Even frames
#
#
# Do stuff with Odd frames
#
# Interleave clips back to one
clipEven = core.std.AssumeFPS(clip=clipEven,fpsnum=25, fpsden=1)# new fps: 25
clipOdd = core.std.AssumeFPS(clip=clipOdd,fpsnum=25, fpsden=1) # new fps: 25
clip = core.std.Interleave(clips = [clipEven, clipOdd])
clip = core.std.AssumeFPS(clip=clip,fpsnum=50, fpsden=1)# new fps: 50
#
# Do stuff with all frames
#
# End-1 Extract Even/Odd Frames
clip = core.std.SelectEvery(clip=clip, cycle=2, offsets=[0])
#
# End-2 Merge Dark and Bright or HDR and LDR Frames
clip = core.std.Merge(clipHigh, clipLow, 0.5)

(was mir grade einfällt: Im prinzip ist das wie mit photoshop und layern zu arbeiten = großes potential oder ?)
http://www.vapoursynth.com/doc/plugins/morpho.html
http://www.vapoursynth.com/doc/functions...merge.html
Reply
#6
Schau ich mir später genauer an, aber die ganzen AssumeFPS sollten bis auf den letzten 'clip = core.std.AssumeFPS(clip=clip,fpsnum=50, fpsden=1)# new fps: 50' unnötig sein.

Auch ist mir der Sinn von 'End 1' unklar,..
# End-1 Extract Even/Odd Frames
clip = core.std.SelectEvery(clip=clip, cycle=2, offsets=[0])
#
# End-2 Merge Dark and Bright or HDR and LDR Frames
clip = core.std.Merge(clipHigh, clipLow, 0.5)
da die ausgewählten Even/Odd Frames direkt wieder verworfen werden,..

Cu Selur
Reply
#7
(12.03.2021, 06:49)Selur Wrote: Schau ich mir später genauer an, aber die ganzen AssumeFPS sollten bis auf den letzten 'clip = core.std.AssumeFPS(clip=clip,fpsnum=50, fpsden=1)# new fps: 50' unnötig sein.

Auch ist mir der Sinn von 'End 1' unklar,..
da die ausgewählten Even/Odd Frames direkt wieder verworfen werden,..

Cu Selur

Richtig ja , das sind eher überbleibsel von meinen Tests. std.Interleav muss die selbe fps, auflösung bit tiefe etc haben. Die kürzeste Version sähe so aus: 

clipOdd = core.std.SelectEvery(clip=clip, cycle=2, offsets=[1])
clipEven = core.std.SelectEvery(clip=clip, cycle=2, offsets=[0])
# Do stuff with Even frames
# Do stuff with Odd frames
clip = core.std.Interleave(clips = [clipEven, clipOdd])
# Do stuff with all frames
clip = core.std.SelectEvery(clip=clip, cycle=2, offsets=[0])


Das zweite ende ist ein alternatives ende für progressives material also:
clipHigh = core.std.SelectEvery(clip=clip, cycle=2, offsets=[1])
clipLow = core.std.SelectEvery(clip=clip, cycle=2, offsets=[0])
# Do stuff with High frames
# Do stuff with Low frames
clip = core.std.Interleave(clips = [clipHigh, clipLow])
# Do stuff with all frames
clip = core.std.Merge(clipHigh, clipLow, 0.5)

Ich teste noch aber die meisten temporalen filter arbeiten wunderbar mit dieser methode zusammen. z.b FluxSmooth und alles was DCT benutzt funtioniert wirklich gut. Ich bekomme heute noch besuch und weiß daher nicht wie weit ich heute damit komme, aber ich werde versuchen beispiel scripte und presets schonmal zusammen zu stellen.
Reply
#8
Okay, sehe ich das richtig was Du in Hybrid bräuchtest wäre:
1. die Möglichkeit nur auf Odd/Even frames anzuwenden (das SelectEvery wäre der allgemeinere Fall, in dem nur bestimte Frames filtern will)
2. die Möglichkeit Filter öfters anzuwenden, da Du ja die Frames in mindestens zwei unterschiedliche Gruppen einteilen willst und diese dann unterschiedlich filtern willst.

zu 2.: Das geht in der aktuellen dev Version über die neu eingeführte FilterQueue.
zu 1.: Das geht noch nicht. Weiß wie ich es implementieren könnte ist aber ein Heiden Aufwand, da der komplette Vapoursynth-Tab dafür überarbeitet werden müsste. Bin aktuell schon nicht so ganz glückliche wie ich das 'Apply only to' in die GUI integriert habe und an jeden Filter noch ein 'Apply only on: Cyle [1-n] with Offsets: [....]' zu packen würde das Ganze nur noch unschöner machen.

-> Denke nicht das es in absehbarer Zeit kommen wird, da mir aktuell keine Idee kommt wie man das in die GUI integrieren könnte ohne dass es alles unübersichtlicher macht und nur in sehr speziellen Fällen irgendwie Sinn macht.

Cu Selur
Reply
#9
Hab mal ein MockUp des "Vapoursynth->Color->Basic"-Bereichs gemacht, an dem man sieht wie es z.B. aussehen würde.
   
Sieht nicht mal soo schlimm aus, aber man kann schon recht wie seht das die allgemeine Sichtbarkeit der Filter vermindern würde.
-> Falls sich mehrere Leute finden die denken das ist ne sinnige Erweiterung würde ich das vielleicht sogar implementieren.

Cu Selur
Reply
#10
clipOdd = core.std.SelectEvery(clip=clip, cycle=5, offsets=[0 3 4])Mir ist gerade ein Problem aufgefallen, da man ja wenn den allgemeinen Fall mit SelectEvery angeben würde bei dem man:
1. Cycle und 2. offsets angeben würde.
z.B.
clipA = core.std.SelectEvery(clip=clip, cycle=5, offsets=[0 3 4])
clipB = core.std.SelectEvery(clip=clip, cycle=5, offsets=[1 2])
Wie würde man die den mergen? Einfaches interleave geht da nicht.
Ein core.std.Interleave([clipA, clipB]) würde 0,1,3,2,4 zurück liefern,...

Cu Selur

Ps.: Vielleicht kann man das ganze mit https://github.com/Irrational-Encoding-W...emapFrames machen,...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)