Beiträge von TheGenesis

    Hallo zusammen,

    ja, klingt schwer verlockend über so 'nen Panasonic + Intensity zu cappen, aber ich hab gerade mal überschlagen was das kostet und dann festgestellt, das die Anschaffung über 200 tacken gehen würde.
    Deshalb kurz mal die Frage ... "Was wäre die beste Alternative, wenn ich meine gute alte Phillips SAA Karte (mitsamt dem uralten PC) endlich in Rente schicken wollte?"

    Ob USB2/3 oder PCI-Express wär mir wurscht ... "notfalls" ginge auch noch eine (alte) PCI-Karte.

    Donke im voraus
    Thom

    Auf der BOX hab ich D:\Videos

    Fehler Nr 1 ... es muss (auf der Box) heißen:

    d:/Videos/

    ...ist auch als Videos im Netzwerk freigegeben.FRAGE wo stelle ich das im VLC ein der muss das doch auch wissen oder nicht??:grübeln:

    Freigabe braucht es nicht ... VLC muss Zugriff auf das Verzeichnis haben, das die Box via HTTP anfordert ... dann streamed vlc das direkt zur Box.

    Zum Netzwerk:Muss die Box zwingend direkt über ein Crossover direkt mit dem Rechner verbunden sein??

    Nein, geht auch mit vielen (nicht mit allen!) Routern ... muss man ausprobieren.

    Aber da die Box ihren NIC im halbdouplex fährt, kriegen das 99,9% aller Router/Switches nicht gebacken. Die einzig zuverlässige Methode ist entweder einen uralten 10/100 Mbit Hub zu verwenden oder (meine präferierte Methode) die NIC am PC auf 100MBit zu drahten (s. Screenshots).
    Die hin- und herschalterei von PC-NIC und switch zwischen 10/100 und Gigabit kostet extrem viel Bandbreite ... von der Latenz ganz zu schweigen.
    Wenn du die Gigabit-Verbindung brauchst, nimm meinen Ratschlag aus dem ersten Post und hau dir 'ne 2te Netzwerkkarte mit separatem Subnet rein ... die kannst du dann auch parallel in den Router/Switch stecken.

    Gruß
    Thom

    Ok ... hier ist die Testversion ...

    http://www.mediafire.com/download/45lqj…g/vlc-2.1.X.zip

    und hier der Aufruf:

    dBox2_VLC.cmd

    Code
    start /MIN /HIGH "VLC dBox - default" vlc.exe --file-caching=3000 --network-caching=6000 --http-caching=0 --image-duration=10 --dshow-vdev=" screen-capture-recorder" --dshow-adev="virtual-audio-capturer" --dshow-fps=25 --dshow-caching=0 --live-caching=0 --clock-jitter=0 --verbose=3 --intf=dummy --extraintf=http --sout=#transcode{venc=ffmpeg{hq=simple,vt=5000,pre-me,mpeg4-matrix,trellis,keyint=150,qmin=1,qmax=250},vcodec=mp2v,vb=2500,fps=25.0,width=720,height=576,acodec=mpga,channels=2,ab=256,samplerate=48000}:gather:standard{mux=ts,access=http,dst=:8080/dboxstream} --no-sout-ts-alignment --sout-mux-caching=5000 --sout-keep  --ffmpeg-skiploopfilter=4 --no-sout-ffmpeg-interlace-me --avcodec-threads=2 --sout-transcode-threads=1 --avcodec-fast

    läuft ganz ordentlich, aber alles andere als perfekt.

    Ist nur zum überbrücken ... also bitte keine Rückmeldungen, was alles nicht geht.

    Viel Spaß
    Thom

    Wegen der zahlreichen Anfragen, geb ich mal kurz 'ne Meldung durch:

    Ich lad den "alten Kram" erstmal nicht neu hoch, weil das nur bedingt taugt.

    Die neueren VLC-Versionen sind nicht wirklich dBox "konform" ... z.B. ist der Rate-Limiter nicht wirklich besonders restriktiv, sodaß man unter 4000kbit/s gehen müsste und selbst das kostet relativ viel CPU-Resourcen auf dem Streaming-Host.
    Zudem kommt noch dazu, das die aktuelle 2.08er und 2.1er instabil ist und ab der 2.1er gibts noch 'nen netten Passwortzwang, sodaß man das Box-Image anpassen müsste.

    Jetzt kommt das aber:

    Ich programmiere gerade VLC 2.2. um und verpasse dem Teil einen "adaptiven predictive Rate-Limiter", der das maximum an Qualität aus der gegeben Bitrate rausholt ... ich rechne mit > 5 MBit bei qcomp= 0-6.
    Ein paar kurze Tests sehen fantastisch aus, aber es gibt noch ein paar Hürden zu nehmen.
    Ich denke ich werden in ein paar Wochen (evtl. ende Januar) das komplette Paket online stellen.

    Wenn ich den VLC soweit habe gibts noch einige Extras wie z.B. YouTube über die Box gucken.

    Gruß
    Thom

    Ok ... neuer Ansatz ... ich fütter jetzt alle 3 Frames über die gesamte QP Bandbreite.

    Auch habe ich die Frage umformuliert ... sie lautet jetzt:

    B/C = f(A,B)

    Wobei:

    A = QP
    B = SIZE
    C = SIZE_Lambda1

    sind.

    Dann habe ich B gefiltert um das statistische Rauschen nach QP 51 zu egalisieren.
    Auch hab ich B und C jetzt normalisiert ... das macht die Sache wesentlich schneller ... hoffentlich nicht unpräziser.
    Und damit er nicht versucht den ganzen kram auf 42 zu konsolidieren hab ich Subtraktion und Addition verboten und dafür konstanten erlaubt.

    Nach bereits 5 Minuten zeichnet sicht eine präzise Lösung ab ... mal abwarten was ihm noch so alles dazu einfällt :D

    Achso ... die Reihenfolge in dem man die Werteliste füttert wirkt sich (zumindest in meinem Fall) ziemlich heftig auf die Entscheidungsfindung aus, da er bei der Lösungsfindung scheinbar gerne geometische Formen im Soloution-Fit-Plot produzieren will.

    ... das hier ist Interessant:

    Frame_Large_Lower_Floor.jpg

    Das ist der Ausschnitt im "unteren Bereich" von Frame-Large (im hohen QP Bereich) ... sah im ersten Moment aus wie irgendein "Rauschen" ... scheint aber was elektrisches zu sein, weil Eureqa das mit einem atan2() genau getroffen hat.

    Factor soll das Verhältnis zur Framesize bei Lambda=1 sein.

    Dann kann ich innerhalb des Frames lustig jeden anderen Lamdba nach meiner "Wunschgröße" wählen.

    Und ich kann die "maximale" Größe der niedrigsten Komprimierungsstufe mit dem nächsten Frame vergleichen um eine Tendenz zur komplexität zu bekommen und somit vorraussagen zu können, ob die nächsten Frames eher simpler oder komplexer werden.

    Ich verpasse VLC u.a. einen ordentlichen Rate-Limiter und mit meinem ersten (linearen) Ansatz ist das zu ungenau.

    Wieso hättest du die Winkelfunktionen weggelassen ... das müsste doch gerade damit eine simple Formel ergeben ... die Base-QP's sehen doch alle aus, als würden sie auf einer symmetrischen "Welle" liegen ... oder bin ich jetzt blind?

    Ich finde diese Formel deutlich zu komplex...

    Uahh ... die bisher genaueste Formel ist viel komlexer:

    Code
    C = B*erf(exp(asinh(logistic(A))))*gauss(exp(tanh(A)) + gauss(atanh(logistic(gauss(exp(logistic(A)) + erf(tanh(sqrt(exp(asinh(logistic(A)))))))))))

    Vermutlich wird es eine einfachere Formel geben, die vielleicht etwas größere Abweichung zu den Messdaten hat...

    Größere Abweichungen kann ich bei so kleinen Faktoren nicht gebrauchen ... die Produkte gehen dann direkt in die tausende.

    Mhmm ... auch wenn ich nicht ganz verstehe was Eureqa da treibt, kann ich jedoch leider erkennen, das er dabei ist den GP zu egalisieren und deshalb hab ich das Ding jetzt erstmal angehalten ... nützt mir nicht allzuviel, wenn das nachher nur mit diesem einen Frame funktioniert.

    Hab jetzt spaßeshalber mal alle 3 Frames gefüttert ... sieht nicht sehr vielversprechend aus ... er versucht seit 30 Minuten immernoch einen Median durch die 3 Kurven zu ziehen ... grrr ... hat doch grenzen so eine "Künstliche Intelligenz".

    Nachtrag ... die Korrelation zwischen den Frames ist wurscht ... wenn der Faktor pro Frame jeweils korrekt ermittelt wird, kann ich auf die Größe von Lamda=1 hochrechnen und diese durch die Größe beim folgenden Frames teilen ... schwupps ... = complexity factor.

    Hochrechnen vom aktuellen auf das nächste muß ich nicht, weil ich in meinem Algo lediglich den trend zum vorangehenden Frame brauche.

    Hab gerade mal die folgende Formel auf mein Excelsheet angewandt:

    Code
    0,5% absolute error ... cost 53
    
    
    C=atan2(log(A )/A  + A ^2/(B  + A *log(B  + B ^2) - A ) + log(B *A ^3 + B ^2/A ), A )
    
    
    ... für Excel:
    
    
    ARCTAN2(log(E2)/E2 + E2^2/(D2 + E2*log(D2 + D2^2) - E2) + log(D2*E2^3 + D2^2/E2); E2)

    Aber der MS haufen spuckt alle möglichen Zahlen über 1 aus die nix mit dem Faktor zutun haben.
    Im Evalutionsplot in Eureqa funktioniert das übrigens recht gut ... wo ist der Fehler?

    Achso ... nochwas ... wie schwierig ist das, so eine Formel wie da oben so um zu formen, das ich daraus die Gleichungen für A= und B= ableiten kann oder sollte ich da lieber Eureqa mit der entsprechenden/umgestellten Fragestellung bemühen?

    Ja, das hatte ich letzte Nacht schon angeworfen ... die Berechnung läuft noch und nähert sich wohl dem ende.

    Huaahh ... vorläufiges "Endergebnis":

    Code
    C = atan2(log(B*A^3 + B^2/A) + max((A^2 - B)/(A + B + A*asinh(B^2/sqrt(A))), atan2(sqrt(A), asinh(acosh(B)*max(B^2, B*A^3)))), A)

    A=QP, B=Size, C=Factor

    Wie soll ich das denn dem armen alten Excel von 2003 beibringen?

    Das ist übrigens auch nur der erste Schritt ... später brauche ich dann auch noch die Korrelation zwischen FrameX und FrameY (complexity).

    Genau hinschauen wird wohl eher eine "praktikable" Formel bringen, denn so wie ich das sehe, sind das 2 kurven, nämlich:

    entweder:

    a) parabel von lambda 1 bis 177
    b) hyperbel von lambda 295 bis ende

    oder:

    a) parabel von lambda 1 bis 59
    b) hyperbel von lambda 177 bis ende

    und dann natürlich noch die kurven zwischen den Intervallen.

    Aber ich weiss nicht, wie man die kurven an die werte ausrichtet, geschweige denn innerhalb der Formeln parameterisiert ... man müsste dann nämlich für die große hyperbel in abhängigkeit der complexity unterschiedliche Steigungen/Gefälle vor und hinter dem 0-Punkt einsetzen.

    QP als Quality/118 -0,5 (Macht das Sinn? negative QP-Werte ??)

    Ups ... da is schon der erste Fehler in der Formel ... hatte das schnell aus dem Source vom encoder kopiert und da das "optisch" dem Medium-Frame am nächsten kam, hab ichs gelassen.

    Was Du jetzt willst ist eine Formel, welche dir zu einem gegebenen QP-Wert und dem Complecity Modifier den factor (Spalte G) berechnet. (wobei CM = 1 ist)

    Ja ... und umgekehrt :)

    Dein aktueller Ansatz dafür ist:

    factor = 2^(-QPWert/(2+ComplexityModifier)) * 2 + ComplexityModifier = 2 ^ (1 - QP/()2+CM) + CM

    Fasst ... es heißt dort:

    factor = 2^(-QPWert/(2+ComplexityModifier)) * ComplexityModifier

    Mal so etwas wie: Eureqa (http://www.nutonian.com/products/eureqa/quick-start/) ausprobiert?

    Noch nicht ... grins ... wusste garnicht das es sowas gibt ... ich probiers mal aus ... aber dann weiss ich trotzdem nicht, wie man sowas "austüftelt".

    So ... hab die Exceltabelle erstmal um die 0,5 bereinigt ... man sollte nicht solange an sowas fummeln, wenn man müde ist :)

    hier ist der Update:

    QP bFrames.zip

    Mhmm ... sind das mehrere Kurven und kann man das überhaupt mit einer Formel darstellen?

    Hallo zusammen,

    ich schreibe gerade VLC um und habe dabei schmerzhaft erfahren müssen, das die lustigen Graphen von damals im Matheunterricht später doch noch für irgendwas gut gewesen sein müssen :(

    Leider ist das bereits alles aus meinem Schädel, weil man "sowas ja nie wieder braucht".

    Konkret bin ich auf der Suche nach einer Formel um bei einem komprimierten Frame mit gegebenem Lambda+Größe, eine Größe aus einem beliebigem Lambda zu berechnen.

    Dazu hab ich zunächst ein paar Durchläufe mit einer Testsequenz gemacht und mir sämtliche Größen ausgeben lassen.

    Das ganze hab ich dann unter Access mit ein paar Repräsentativen Frames in eine Exceltabelle gepumpt um mir einen hübschen Responsegraph zu erstellen.

    Dann hab ich angefangen eine Funktion zu basteln, die mir die Beispielwerte berechnet.

    Das hat ganz gut geklappt, ist aber nicht genau, weil ich im Unterricht beim Thema "Kurvendiskussion" wohl gepennt habe ... oder es ist einfach zu lange her :rolleyes_:

    So wie ich das sehe, muss die Funktion so angepasst werden, das vor dem Nulldurchgang die Degression höher und nach dem Durchgang niedriger sein muss.

    Das erklärt dann zwar nicht die Punkte bei GP <0 aber dann hätt ich erstmal 'ne Basis zum weitermachen.

    Hier ist die Exceltabelle:

    ... neue Version weiter unten ...

    Die gesuchte Funktion ist in der Spalte [G] und um die Sache zu testen könnt ihr rechts den "Complexity Modifier" auf die jeweiligen Verhältnisse von Small/Medium/Large einstellen.
    Bei "Large" kann man schön sehen, wie sich die Fehler potenzieren.

    Wenn in der Spalte "error" überall 0% stehen würde, wäre ich überglücklich ... sehr nahe dran würde mir aber schon genügen.

    Die Idee zu der Formel hab ich übrigens aus dem Beitrag, der oben in der Exceltabelle steht ... aber wie gesagt ... irgendwas fehlt noch.

    Jemand 'ne Idee?

    P.S. Die leeren Zeilen zwischen den Markierungen könnt ihr erstmal ignorieren ... das sprengt jetzt wohl den Rahmen

    Ok ... hier der neue Ansatz:

    ##########
    # Netztwerk #
    #########

    Ihr braucht ein 10Mbit oder 100Mbit HALF-DUPLEX (!!!WICHTIG!!!) Netzwerk.
    Das bedeutet ihr müsst eure Netzwerkkarte auf eurem VLC-Rechner darauf festnageln ... kein Gigabit und kein vollduplex!
    Am einfachsten eine zweite Karte verwenden und ein separates Subnet bilden.

    NIC-dBox2.jpg

    #######
    # dBox #
    ######

    Unter Einstellungen -> Medienwiedergabe -> Movieplayer

    Code
    Streamingserver               : AktiviertStreamingserver IP            : <ip-Adresse-der-100Mbit-halb-douplex-karte-auf-dem-VLC-rechner>Streamingserver Port          : 8080Verzeichnis (VLC)             : c:/meine videos/Verwende Buffer (WabberQueue) : JaAnzahl Buffersegmente         : 24EPG (SectionSD)               : Anhalten

    Bitrates und Transcoding -Settings SIND VÖLLIG EGAL (werden bei dieser Lösung komplett ignoriert/überschrieben)
    Das VLC-Verzeichnis ist das Startverzeichnis für die Videos auf dem VLC-Host.
    WICHTIG: slash "/" anstatt backslash "\" verwenden.

    ######
    # VLC #
    #####

    Holt euch die 2.0.8 und entpackt sie auf euren PC.
    Jetzt müsst ihr eurer dBox Zugriff auf VLC erlauben.
    Dazu die Datei lua\http\.hosts entsprechend anpassen.

    Beispiel:

    Code
    ## Access-list for VLC HTTP interface# $Id$## private addresses192.168.0.0/16

    Gibt den gesamten Adressraum für 192.168.*.* frei.

    Jetzt müsst ihr die von mir gepatchten Requests (status.xml und browse.xml) über die vorhandenen Dateien im Verzeichnis lua\http\requests drübernageln.

    http://www.filedropper.com/vlc-208dbox2-patch

    Zu guter letzt noch der Aufruf um den VLC als Streamingserver zu verwenden.
    Dazu macht ihr euch am besten eine CMD-Datei:

    Code
    rem VLC-dBox.cmdc:cd "C:\Tools\Windows\vlc-2.0.8"cmd /C "start "VLC dBox" /B /MIN /NORMAL vlc.exe --verbose=3 --intf=dummy --extraintf=http --file-caching=4000 --http-caching=4000 --vc1-fps=25 --h264-fps=25 --sout-transcode-deinterlace --sout-transcode-maxheight=576 --sout-ffmpeg-keyint=100 --sout-transcode-aenc=twolame --ffmpeg-hw --ffmpeg-skiploopfilter=4 --no-ffmpeg-hurry-up --no-sout-transcode-hurry-up --sout=#transcode{fps=25,vcodec=mp2v,vb=6000,acodec=mpga,channels=2,ab=256,samplerate=48000,width=720,height=576}:std{access=http,mux=ts,dst=:8080/dboxstream}"

    Tipp 1: Wenn ihr keine ungeschnittenen RAW-Streams (z.B. TS-Aufnahmen) abspielt, könnt ihr den file-chaching auf 1000 runtersetzen, das beschleunigt das synchronisieren.
    Tipp 2: Wenn eure Netzwerk-Infrastruktur das aushält, könnt ihr die vb auf bis zu 7680 hochsetzen, das verbessert die Quali bei aufwendigen Szenen und schont CPU-Resourcen.
    Tipp 3: Ist eure CPU fett genug, könnt ihr ggf. auch den ffmpeg-skiploopfilter rausnehmen, das verbessert die Quali nochmal.

    #############
    # Anmerkungen #
    ###########

    1. Ich hab diesen Patch auf file:/// gedrahtet und deshalb funktioniert es NUR mit Dateien, also kein VCD, DVD, Internet-Stream

    2. Bookmark (dBox Taste BLAU) und vorwärzspulen (Taste 3,6,9) geht

    3. Direkter Sprung (Taste 5) und zurückspuhlen (Taste 1,4,7) geht nicht

    4. Pause (Taste GELB) geht nur ein paar Sekunden (VLC timed dann irgendwann aus und beendet das streaming)

    5. Wird es Aufgrund zu langsamen transcoden oder Streamingfehlern asynchron, müsst ihr manuell synchronisieren:

    Code
    dBox Taste GELB drücken ... nochmal GELB drücken


    wenn das nicht hilft:

    Code
    dBox Taste GRÜN drücken


    wenn das nicht hilft:

    Code
    dBox Taste GELB drücken ... nochmal GELB drücken und SOFORT danach GRÜN drücken


    wenn das nicht hilft ... schnelleren Rechner besorgen :)

    Wer lust hat, kann gerne mal ergründen, warum man nicht zurückspulen kann.
    Es ist kein Problem mit der dBox/Movieplayer und auch kein generelles Problem von VLC.
    So wie es aussieht findet VLC beim zurückspulen den gewünschten Timestamp nicht und der Movieplayer stoppt dann irgendwann weil es ihm zulange dauert.
    Ohne HTTP-Streaming funktioniert das jedoch einwandfrei ... ich denke da ist was "broken" und könnte in den nächsten Releases von VLC irgendwann gefixt sein.

    Viel Spaß
    Thom

    Update:

    Zurückspulen geht nur bei manchen Formaten nicht ... sieht so aus, als würde das bei Video's mit AC3 und MPA funktionieren, mit MP3 oder AAC jedoch nicht. Oder mein Server ist zu lahm.
    Außerdem hab ich gerade festgestellt, das die 2.0.8 im gegensatz zur 1.1.10 zwar schön stabil ist und wesentlich mehr Formate sauber abspielt dafür aber mehr CPU braucht.
    Beispielsweise sprengt ein x264 mit 10-bit transcoding momentan die CPU in meinem Server.
    Dann hab ich gerade noch die 2.1.0 ausprobiert, aber bei der ist scheinbar das HTTP-Interface im Eimer.

    Jau! ... hat funktioniert und lief mit 2.36fps durch. Ohne ThreadRequest() waren es nur 1.6 und single-threaded nur schlappe 1.3.

    So siehts jetzt aus:

    Code
    SetMemoryMax(512)SetMTMode(3,3)LoadPlugin("c:\Program Files\AviSynth\plugins.manual\ThreadRequest.dll")LoadVirtualDubPlugin("C:\Tools\Windows\VirtualDUB\PLUGINS\NeatVideo.vdf", "NeatVideo", 5)LoadPlugin("C:\Tools\Windows\DGDecNV\DGDecodeNV.dll")LoadPlugin("c:\Program Files\AviSynth\plugins.manual\dither-1.23.0\dither.dll")LoadPlugin("c:\Program Files\AviSynth\plugins.manual\masktools-v2.0a48\mt_masktools-26.dll")LoadPlugin("c:\Program Files\AviSynth\plugins.manual\RemoveGrain-1.0\RemoveGrainSSE3.dll")Import("c:\Program Files\AviSynth\plugins.manual\dither-1.23.0\mt_xxpand_multi.avsi")Import("c:\Program Files\AviSynth\plugins.manual\dither-1.23.0\dither.avsi")LoadPlugin("C:\Program Files\AviSynth\plugins.manual\depanestimate.dll")LoadPlugin("C:\Program Files\AviSynth\plugins.manual\depan.dll")LoadPlugin("c:\Program Files\AviSynth\plugins.manual\RemoveGrain-1.0\repair.dll")LoadPlugin("c:\Program Files\AviSynth\plugins.manual\degrainmedian.dll")LoadPlugin("C:\Program Files\AviSynth\plugins.manual\mvtools-2.6.0.5\mvtools2.dll")LoadPlugin("c:\Program Files\AviSynth\plugins.manual\despot.dll")LoadPlugin("c:\Program Files\AviSynth\plugins.manual\flash3kyuu_deband.dll")DGSource("Logans Run.dgi")AssumeFPS(25)SetMTMode(2)Crop(0,140,-0,-140)ConvertToRGB(matrix="Rec709",interlaced=false)# Denoise and SharpenNeatVideo("D:\Storage\Work\Logans Run.dnp", "D:\Storage\Work\Logans Run.nfp", "1.500000", "5", "1", "0")ThreadRequest()# Dither to yv12 (Mode=0 -> round only, no noise)Dither_convert_rgb_to_yuv(matrix="709", mode=0)ThreadRequest()###################### Horizontal DeJitter#temp = last.TemporalSoften(7,255,255,25,2)Interleave(temp.Repair(last.TemporalSoften(1,255,255,25,2)),last)DePan(last,data=DePanEstimate(last.crop(0,32,-1344,-32),trust=0,dxmax=4,dymax=0),offset=-1)SelectEvery(2,0)Crop(4,0,0,0).AddBorders(2,0,2,0) #####################Synchronize() # prevents DeGrainMedian() and DeSpot() from crashingThreadRequest()###################### DeSpot#i = lastprefilt=i.DeGrainMedian() # prefiltered for better motion analysis# analyse and compensate motion forward and backward (to current frame)ml = 100     # mask scalethscd1 = 400 # scene changesuper=i.MSuper() # super clipsuperprefilt=prefilt.MSuper() # super filtered clipvf = superprefilt.MAnalyse(isb=false) # forward vectors cf = i.MFlow(super, vf, thscd1 = thscd1) # previous compensated forwardsadf = i.MMask(vf, ml=ml,kind=1,gamma=1, thscd1 = thscd1) # forward SAD maskmsadf=sadf.MT_Binarize(20, upper=true) # binary inverted forward SAD maskvb = superprefilt.MAnalyse(isb=true)  # backward vectors cb = i.MFlow(super, vb, thscd1 = thscd1) # next compensated backward sadb = i.MMask(vb, ml=ml, gamma=1, kind=1, thscd1 = thscd1) # backward SAD maskmsadb = sadb.MT_Binarize(20, upper=true) # binary inverted backward SAD maskmsad = MT_Logic(msadf,msadb,"or") # combined inverted SAD maskmsad = msad.MT_Expand() # expanded inverted SAD maskmsadi = Interleave(msad, msad, msad) # interleaved 3-frame inverted SAD mask# This mask is high (255) where at least one motion estimation is good, # so these areas will be protectedInterleave(cf,i,cb) # interleave forward compensated, source, and backward compensatedSetMTMode(4)DeSpot(seg=1, sign=0, pwidth=20, pheight=20, p1=15, p2=8, mthres=20, color=true, show=0, motpn=true, extmask=msadi)SetMTMode(2)SelectEvery(3,1) # get filtered source#Return(StackVertical(i, last))#####################ThreadRequest()# DeBandf3kdb()

    Ergebnis ist ein 3.5Gb großes MP4 und sieht hölle gut aus!

    So ... einen Fehler hab ich gefunden ... meine Masktools waren noch nicht auf dem neuesten Stand.
    Ist jetzt wesentlich stabiler mit SetMtMode() aber ThreadRequest() bringt nochmal so richtig speed ... und machts leider auch wieder instabil.
    Hab gerade 'nen guten Ansatz gefunden ... Testlauf ist im Gange ... in 17 Stunden weiss ich mehr :)

    Ok, habe mir f3kdb() mal angeschaut. Kommt mir das nur so vor oder produziert das weit mehr Grain als GradFun3() ?

    Hab gerade ein paar lustige Erkenntnisse gesammelt.

    f3kdb() macht mit Default-Einstellungen nur 'nen ordentlichen job, wenn man vorher so richtig klötzchenmäßig ge-dither't hat.
    Dither() mit mode 0 (relativ harte Klötzchen) -> prima Ergebnis mit f3kdb()
    Dither() mit mode 2 (schön weich) -> und viele Bandings bleiben übrig

    Auch sollte man den f3kdb() ganz ans Ende des Scripts stellen und die Filter davor sollen sich mit den Klötzchen vom Dither() rumschlagen.
    Das bringt bei meinem "Logans Run" im 709er Farbraum die besten Ergebnisse.

    Selur
    Das nachträgliche entrauschen mit FFT3DGPU() produziert bei "natürlichem" Material in der tat wieder Banding-Artefakte.
    Das scheint bei den Cartoons aber egal zu sein ... vielleicht weil nach dem massiven filtern keine allzu feinen gradienten mehr übrig sind ... das funktioniert übrigens auch mit Computergeneriertem Material (z.B. in meinen "Let's Play"-Youtube-Dingern) sehr gut.
    Cartoons sind scheinbar unkaputtbar :)