Posts by Selur

    Auch wenn Du die Werte von Original DAA verwendest?

    Im Vapoursynth (zu faul für Avisynth) mit:

    Code
    clip = core.std.Crop(clip, left=240, right=240, top=0, bottom=0) # cropping to 1440x1080
    # contrast sharpening using CAS
    clip = core.cas.CAS(clip, sharpness=0.700)
    # adjusting resolution before resizing
    clip = core.fmtc.resample(clip, w=1440, h=540, kernel="point", interlaced=False, interlacedd=False) # before YUV420P8 after YUV420P16
    # resizing using NNEDI3CL
    # current: 1440x540 target: 1440x1080
    clip = edi_rpow2.nnedi3cl_rpow2(clip, rfactor=2, nsize=3, nns=4) # 2880x1080
    # resizing 2880x1080 to 1440x1080
    clip = core.fmtc.resample(clip, w=1440, h=1080, kernel="spline64", interlaced=False, interlacedd=False) # before YUV420P16 after YUV420P16

    => https://slow.pics/c/k70TB9oy

    In AviSynth wäre:

    Code
    LWLibavVideoSource(...) # oder was auch immer für ein SourceFilter
    PointResize(1920,540) # PointResize ist hier bewusst gewählt
    nnedi3_rpow2(rfactor=2,nsize=6,cshift="spline36resize",fwidth=1920,fheight=1080) # spline36resize könne man auch durch was anderes ersetzen
    CAS(sharpness=0.70) # 0.7 scheint mir okay


    das was mir vorschwebt.

    Cu Selur

    Quote

    Habe mich lange mit den Chat-KIs unterhalten und kam zu diesem Ergebnis:


    ¯\_(ツ)_/¯

    Das PureVerticalDAA was Du da hast ist ein modifiziertes DAA zu sein, was mehrere Pässe macht. DAA_core ist ein leicht modifiziertes:

    Code
    function daa(clip c) {
      nn = c.nnedi2(field=-2)
      dbl = mt_average(selecteven(nn),selectodd(nn),U=3,V=3)
      dblD = mt_makediff(c,dbl,U=3,V=3)
      shrpD = mt_makediff(dbl,dbl.removegrain((width(c)>1100) ? 20 : 11),U=3,V=3) # das Original verwendet 11 bei SD und 20 bei HD
      DD = shrpD.repair(dblD,13)
      return dbl.mt_adddiff(DD,U=3,V=3)
    }


    was dann einfach passes-Mal angewerndet wird,.....

    Was Du also machst ist 3x DAA anwenden,... sehe da nichts besonderes.
    ¯\_(ツ)_/¯

    Quote

    Habt ihr da Anmerkungen? Kann man die Funktionen noch verbessern, oder was weglassen?


    Ohne Quellmaterial würde ich empfehlen vielleicht mal andere AA filter noch anzutesten.
    (https://web.archive.org/web/2025120604…xternal_filters z.B. Santiag)

    Cu Selur

    Ja, uncompressed ist verlustfrei, aber halt ohne flags, da diese nicht zu den eigentliche Videodaten gehören. :)

    Quote

    interleave zu progressive ist aber sc73+sse oder?


    Filternzum Capturen: Ja, da man da Filtern müsste und meist ist ein späteres Filtern zu bevorzugen. (um mehr Kontrolle über das Filtering und die Qualität des Outputs zu haben)

    Normalerweise sollte man in ein komprimiertes lossless Format capturen.

    Quote

    soll später am TV wiedergegeben werden.


    Du hast die Wahl:
    a. Capture direkt in ein Format was Dein TV oder MediaPlayer versteht, hier fällt lossless und uncompressed i.d.R. raus.
    oder
    b. Capure in ein intermediate format, idealerweise lossless. (dies wäre dann auch zum Archivieren tauglich) Filtere und reencode das aufgenommene Material in ein Format, was dem Dein TV oder MediaPlayer versteht.

    Es gibt i.d.R. zwei Orte für Videotags:

    a. im Videostream selber, was bei RAW Video wegfällt
    b. im Container, soweit dieser sie unterstützt, avi unterstützt nicht, was du willst
    => Entweder anderen Container (z.B. MKV) oder anderes verlustfreies Videoformat (z.B. ffv1) verwenden, oder selber wissen was wo einzustellen ist bei der Weiterverarbeitung.

    An sich schon, aber man müsste quasi die gleichen Werte dort eingeben wie in der Datei, sprich lohnt nicht wirklich.
    Falls das noch mehr Benutzer brauchen kann ich da was für schreiben, aber aktuell erscheint es mir ziemlich exotisch. :)

    Nebenbei: Hybrid erstellt standardmäßig, bereits ein qp-file, wenn die Quelle Kapitelmarken hat und keines manuell gesetzt ist.
    (x264->Misc->Automatically->Create qp file for chapters)


    Cu Selur

    zu 1.:
    x264 hat zones und ein qpfile.


    => Zones setzen keine Frame Typen, dazu würde man ein qpfile nutzen.
    Unter "x264->Quantization->Custom qp file" kann man ein eigenes qp file verwenden.

    zu 2.:
    In Vapoursynth (Avisynth geht vergleichbar), könnte man sowas wie:
    1.

    Code
    black = core.std.BlankClip(clip)
    clip = core.std.Splice([
        clip[:10], # 0-9 normal
        black[10-20], # 1000-19 schwarz
        clip[20:59], # 20-49 normal
        black[50:100], # 50-99 schwarz
        clip[100:] # 100-ENDE normal
    ])


    simple und schnell, aber sowohl schwarze als auch normale Intervalle müssen angegeben werden

    oder
    2.


    etwas langsamer, aber nur schwarze Intervalle müssen angegeben. Jedoch mit expliziten Start-&EndFrame.

    in einer Custom Section verwenden.

    Custom Letterboxing könnte man analog machen, erscheint mir aber alles zu exotisch, als dass ich dafür extra UI-Elemente in Hybrid anlegen würde.

    Cu Selur

    Quote

    mir ist aufgefallen, das kein MPEG2 für DVD-Video dabei ist.
    wobei, seit ich HD-Videos für hardwareplayer codiere, ich keine DVD mehr erstellt habe... ;)

    Ja, mpeg-2 als Output wird nicht unterstützt.
    Da ich kaum Ahnung habe, was ein guter freier MPEG-2 encoder ist, wie man ihn ordentlich einstellt und den ContainerOverhead von Audio&Video berechnen würde in unterschiedlichen Containern.

    Quote

    der codecs wie der VVC codec, sind zwar vorhanden, aber nicht in der auswahl gelistet,
    hat das ein grund?


    Hatte mal angefangen dafür Code zu schreiben, ihn aber bis dato nicht aktiviert.

    Großteil liegt an:

    • den Vapoursynth Filtern (3,23GB) , insb.

      • RIFE mit 1,45GB.
      • DFTTest2 mit ca. 366MB
      • BilateralGPU ca. 93MB
      • TimeCube&Co ca. 465MB (da viele .cube files enthalten sind)
    • Encoder&Co ca. 1GB (da nicht gepackt; 200MB allein für NVEncC)
    • Avisynth 64bit ca. 324MB

    [Blocked Image: https://i.ibb.co/pr0XW1m6/grafik.png]

    Hybrid selber ist ca. 30MB groß und dazu kommen ca. 50MB an dlls.
    Und falls man dann die Add-ons noch installiert, wird es halt noch größer. :)
    Der Großteil geht halt vor allem für die GPU basierten Filter und ihre Abhängigkeiten drauf.

    => Problem ist halt zu entscheiden: Was sind 'die gänigsten tools' ?

    Cu Selur

    Ps.: Mein Hybrid-Ordner mit den AddOns und ein paar anderen Sachen (u.a. mehr modelle für vsgan&vsmlrt) ist entpackt ca. 80GB groß. :P

    2025.11.08.1:
    *changed*

    • Vapoursynth: allow multiple in-/outputs in custom sections
    • Vapoursynth: adjusted to Anime4k v3
    • Vapoursynth: SCUNet FP16 support
    • Vapoursynth: luma scaling handling
    • Vapoursynth: FilterQueue + Deinterlace
    • Vapoursynth: filter support simplification
    • Vapoursynth: vsMLRTFilter/vsVSGANFilter: configure undo-resizer (torch/mlrt)
    • Vapoursynth: vsDPID: support RGBS
    • FFmpeg: speedChange set '-r' before and after input
    • Vapoursynth: adjust to HAVC update (torch)
    • Vapoursynth: support dynamic shapes (mlrt)
    • Vapoursynth: ResampleHQ HDR option
    • Vapoursynth: torch BasicVSR++ filter scene_aware
    • tons of code refactored


    *fixed*

    • Vapoursynth: FilterQueue + Interpolate or TDecimate filter
    • Vapoursynth: vs-mlrt. VSMLRT-Filter call
    • NVEnC: maxFALL not properly read from input
    • Monitoring: handling of monitored inputs
    • Vapoursynth: mclean tcanny dependency
    • Vapoursynth vsSantiagAA limit range 0-128
    • Vapoursynth: vsCCD typo temporal_radius
    • Audio: limitAudioAll lang/type controls
    • Vapoursynth: converting to RGB force pc scale
    • Vapoursynth: SSMD on HDR content

    -> downloads: http://www.selur.de/downloads

    Cu Selur

    Ps.: Dropped Ubuntu package release, created an AppImage which hopefully works.

    Also, ich habe eine Quelle
    Color space: YUV420P8, Bit depth: 8, Auflösung: 720x480, Framerate: 29.97fps, Scanorder: bottom field first, YUV Luminance scale: limited, Matrix: 470bg, format: mpeg-2
    Wenn ich die diese Quelle mit TDeint bob deinterlace

    Code
    clip = core.tdm.TDeintMod(clip=clip, order=0, mode=1) # new fps: 59.94
    # Making sure content is preceived as frame based
    clip = core.std.SetFrameProps(clip=clip, _FieldBased=vs.FIELD_PROGRESSIVE) # progressive


    habe ich einen clip mit
    Color space: YUV420P8, Bit depth: 8, Auflösung: 720x480, Framerate: 59.94fps, Scanorder: progressive, YUV Luminance scale: limited, Matrix: 470bg
    bei dem jedes Field (720x480) zu einem Frame (720x480) interpoliert wurde.

    Aufgabenstellung:
    Wie kann ich dies nun wieder rückgängig machen, also in "Auflösung: 720x480, Framerate: 29.97fps, Scanorder: bottom field first" umwandeln, und möglichst wieder meine original Fields zurückzubekommen? (Ich weiß, dass TDeint die Originalfields auch ändert, aber das vernachlässige ich bewusst und gehe davon aus, es würde dies nicht tun.)

    Meine aktuelle Lösung:


    bzw.


    (das einzige, was sich ändert, ist die order bei TDeint und der _FieldBased-Wert bei letzten SetFrameProps)
    scheint zu klappen.

    => Frage: Gibt es eine einfachere Methode Bob Deinterlacing 'rückgängig' zu machen? (in Vapoursynth, nicht Avisynth)


    Cu Selur