Auto-Deblock

Auto-Deblock ist eine Methode, welche von joletb und vinylfreak89 geschrieben wurde und von mir den letzten Feinschliff bekommen hat bzw. angepasst wurde.
Der Effekt kann von Sender zu Sender unterschiedlich sein.
Jedoch sollte das aktuelle Skript eine gute Basis für alle Sender liefern.
Sender wie z.B. TV Tokyo haben deutlich mehr Probleme im Chroma-Bereich als Luma-Bereich. Dazu aber später mehr.

 

Wie funktioniert das ganze?

Per Masking wird bei jedem Frame geschaut, ob Blocking auftritt. Tritt es auf, wird der Reihe nach geschaut, wie stark es vorliegt und wie es jeweils behandelt wird (sehr schwach, schwach, mittel, stark, sehr stark). Klingt simpel, ist es auch.

 

Funktioniert das ganze nur für MPEG2?

Getestet wurde es bisher nur mit paar MPEG2-Sources. Abgeändert könnte es auch mit z.B. AT-X oder Crunchyroll (h264) funktionieren. In dieser Form aber unwahrscheinlich.

 

Hier noch ein Beispiel von mir
(Rechtsklick-> „Bild in einem neuen Tab öffnen“):

Diese Diashow benötigt JavaScript.

 

Wie sieht denn das Skript aus?

#AutoDeblock v1.3
##############################################################################################################################################################################
or=last.mt_edge("prewitt",0,24,0,24) #Den Wert "24" bei kleinerem Blocking ändern z.B. bei BSJ
or_d=mt_edge("prewitt",0,24,0,24).removegrain(4).removegrain(4) #Den Wert "24" bei kleinerem Blocking ändern z.B. bei BSJ
##############################################################################################################################################################################
#Optional: u=true,v=true (Viel Chroma-Ghosting) | subpixel=3 (Höhere Qualität, längere Encodezeit) | refinemotion=true (Höhere Qualität, längere Encodezeit)
unfiltered      = last
vweakdeblock    = Deblock_QED().dfttest(sigma=1 ,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=50,thsadc=25,refinemotion=true)
weakdeblock     = Deblock_QED().dfttest(sigma=5 ,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=100,thsadc=50,refinemotion=true)
mediumdeblock   = Deblock_QED().dfttest(sigma=9 ,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=150,thsadc=75,refinemotion=true)
strongdeblock   = Deblock_QED().dfttest(sigma=13,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=200,thsadc=100,refinemotion=true)
vstrongdeblock  = Deblock_QED().dfttest(sigma=17,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=200,thsadc=100,refinemotion=true)
##############################################################################################################################################################################
autodeblock5 = ConditionalFilter(vweakdeblock   , unfiltered ,  "(LumaDifference(or,or_d) > 2) && (YDifferenceToNext > 3)", "==", "True")
autodeblock4 = ConditionalFilter(weakdeblock    , autodeblock5, "(LumaDifference(or,or_d) > 3) && (YDifferenceToNext > 3)", "==", "True")
autodeblock3 = ConditionalFilter(mediumdeblock  , autodeblock4, "(LumaDifference(or,or_d) > 5) && (YDifferenceToNext > 3)", "==", "True")
autodeblock2 = ConditionalFilter(strongdeblock  , autodeblock3, "(LumaDifference(or,or_d) > 7) && (YDifferenceToNext > 3)", "==", "True")
autodeblock1 = ConditionalFilter(vstrongdeblock , autodeblock2, "(LumaDifference(or,or_d) > 9) && (YDifferenceToNext > 3)", "==", "True")
##############################################################################################################################################################################
autodeblock1 #Den Wert "1" erhöhen, wenn die Source weniger Blocking hat z.B. bei BS11
#AutoDeblock v1.3 (Short-Version)
##############################################################################################################################################################################
or=last.mt_edge("prewitt",0,24,0,24)
or_d=mt_edge("prewitt",0,24,0,24).removegrain(4).removegrain(4)
##############################################################################################################################################################################
unfiltered      = last
weakdeblock   = Deblock_QED().dfttest(sigma=6 ,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=100,thsadc=75)
mediumdeblock   = Deblock_QED().dfttest(sigma=12,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=200,thsadc=100)
strongdeblock  = Deblock_QED().dfttest(sigma=18,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=200,thsadc=100)
##############################################################################################################################################################################
autodeblock3 = ConditionalFilter(weakdeblock  , unfiltered, "(LumaDifference(or,or_d) > 3) && (YDifferenceToNext > 3)", "==", "True")
autodeblock2 = ConditionalFilter(mediumdeblock  , autodeblock3, "(LumaDifference(or,or_d) > 5) && (YDifferenceToNext > 3)", "==", "True")
autodeblock1 = ConditionalFilter(strongdeblock , autodeblock2, "(LumaDifference(or,or_d) > 8) && (YDifferenceToNext > 3)", "==", "True")
##############################################################################################################################################################################
autodeblock1

Kann ich irgendwie erkennen, wann das Deblock wirkt und wann nicht?

Diese Zeilen austauschen:

unfiltered      = last.AddBorders(24,24,24,24, color_mediumblue) #Blau = Kein Blocking entdeckt
vweakdeblock    = Deblock_QED().dfttest(sigma=1 ,y=true,u=true,v=true,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=3,prefilter=2,thsad=50,thsadc=25,refinemotion=true).AddBorders(24,24,24,24, color_greenyellow) #Hellgrün = Sehr leichtes Blocking entdeckt
weakdeblock     = Deblock_QED().dfttest(sigma=5 ,y=true,u=true,v=true,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=3,prefilter=2,thsad=100,thsadc=50,refinemotion=true).AddBorders(24,24,24,24, color_green) #Grün = Leichtes Blocking entdeckt
mediumdeblock   = Deblock_QED().dfttest(sigma=9 ,y=true,u=true,v=true,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=3,prefilter=2,thsad=150,thsadc=75,refinemotion=true).AddBorders(24,24,24,24, color_yellow) #Gelb = Mittelmäßiges Blocking entdeckt
strongdeblock   = Deblock_QED().dfttest(sigma=13,y=true,u=true,v=true,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=3,prefilter=2,thsad=200,thsadc=100,refinemotion=true).AddBorders(24,24,24,24, color_darkorange) #Orange = Starkes Blocking entdeckt
vstrongdeblock  = Deblock_QED().dfttest(sigma=17,y=true,u=true,v=true,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=3,prefilter=2,thsad=200,thsadc=100,refinemotion=true).AddBorders(24,24,24,24, color_crimson) #Rot = Sehr starkes Blocking entdeckt
unfiltered      = last.AddBorders(24,24,24,24, color_mediumblue)
weakdeblock   = Deblock_QED().dfttest(sigma=8 ,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=100,thsadc=75).AddBorders(24,24,24,24, color_green)
mediumdeblock   = Deblock_QED().dfttest(sigma=12,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=200,thsadc=100).AddBorders(24,24,24,24, color_yellow)
strongdeblock  = Deblock_QED().dfttest(sigma=18,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=200,thsadc=100).AddBorders(24,24,24,24, color_red)
unfiltered      = last.AddBorders(24,24,24,24, color_black)
block   = Deblock_QED().dfttest(sigma=10 ,y=true,u=false,v=false,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=1,prefilter=2,thsad=100,thsadc=100).AddBorders(24,24,24,24, color_white)

Und wenn eben mehr Chroma-Probleme sind?

Diese Zeilen austauschen:

unfiltered      = last
vweakdeblock    = Deblock_QED().dfttest(sigma=1 ,y=true,u=true,v=true,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=3,prefilter=2,thsad=25,thsadc=50,refinemotion=true)
weakdeblock     = Deblock_QED().dfttest(sigma=5 ,y=true,u=true,v=true,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=3,prefilter=2,thsad=50,thsadc=100,refinemotion=true)
mediumdeblock   = Deblock_QED().dfttest(sigma=9 ,y=true,u=true,v=true,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=3,prefilter=2,thsad=100,thsadc=150,refinemotion=true)
strongdeblock   = Deblock_QED().dfttest(sigma=13,y=true,u=true,v=true,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=3,prefilter=2,thsad=100,thsadc=200,refinemotion=true)
vstrongdeblock  = Deblock_QED().dfttest(sigma=17,y=true,u=true,v=true,tbsize=1).smdegrain(blksize=16,tr=2,pel=1,subpixel=3,prefilter=2,thsad=100,thsadc=400,refinemotion=true)
Advertisements