Zitatbtw. wenn man sich, wenn man interlaced resizen will, einen TMCbob aus 2x tomsmocomp bastelt, wird das ergebnis NOCH besser!
Hör doch bitte mit den wagen andeutungen auf, und machs an nem Beispiel transparent
Zitatbtw. wenn man sich, wenn man interlaced resizen will, einen TMCbob aus 2x tomsmocomp bastelt, wird das ergebnis NOCH besser!
Hör doch bitte mit den wagen andeutungen auf, und machs an nem Beispiel transparent
okay, gut:
hier das script:
loadplugin("c:\x\tomsmocomp.dll")
function tmcbob(clip i)
{ a=i.tomsmocomp(-1,5,0)
b=i.doubleweave().selectodd().tomsmocomp(-1,5,0)
interleave(a,b).assumeframebased()
}
function interlacedscale(clip a, int w, int h, int "order")
{ ord = getparity(a) ? 1 : 0
order = default(order,ord)
tmcbob(a)
lanczos4resize(w,h)
separatefields()
(order == 0) ? selectevery(4,0,3) : selectevery(4,1,2)
weave()
}
avisource("doom9.avi").assumetff()
a=separatefields().lanczos4resize(480,180).weave().subtitle("old")
b=interlacedscale(480,360).subtitle("new")
stackhorizontal(a,b)
Alles anzeigen
anstatt des lanczos4resize(...) kann man natuerlich auch einen X-beliebigen denoiser verwenden!
Danke
Muß ich gleich mal Testen und mit kernelbob() vergleichen.
Hm, habe mal folgendes verglichen:
Import("C:\kernelbob.avs")
Import("C:\interlacedscale.avs")
LoadPlugin("C:\DGDecode.dll")
LoadPlugin("C:\kerneldeint140.dll")
LoadPlugin("C:\TomsMoComp.dll")
MPEG2source("C:\interlaced_NTSC_source.d2v",iPP=true).AssumeTFF().Crop(20,8,684,464)
A=interlacedscale(624,464)
B=kernelbob().Lanczos4Resize(624,464).SeparateFields().SelectEvery(4,1,2).Weave()
Subtract(A,B)
Das Differenzbild in VirtualDubMod ist selbst bei 800x600er Desktopauflösung und output color depth: Fastest (16-bit) komplett grau. Da kräuselt nicht mal was
[Warum das Forum dort oben SeparateFields() so zerpflückt, ist mir ein Rätsel]
hm.. ich habe deutliche unteschiede...
Ja, hast recht. Mein Ergebnis lag an der gewählten Skalierung.
Bei einem Test wie diesem, in einem so geringen Maße und auch nur horizontal zu skalieren, ist nicht sonderlich geschickt
Hab auch mal ein bißchen mit den Funktionen von restore24 rumgespielt:
tmcbob.avs:
function tmcbob(clip a)
{ global ord = getparity(a) ? 1 : 0
f=a.tomsmocomp(-1,5,0)
e=a.doubleweave().selectodd().tomsmocomp(-1,5,0)
interleave(f,e).assumeframebased
}
function tmcreint(clip a)
{ (ord == 0) ? a.separatefields().selectevery(4,0,3).weave() : a.separatefields().selectevery(4,1,2).weave()
}
Alles anzeigen
Damit kann man nach tmcbob() seine Skalierer, Entrauscher und was weiß ich noch anwenden und dann gemütlich mit tmcreint() wieder reinterlacen, ohne sich um das Gefummel mit dem SelectEvery() kümmern zu müssen.
Für faule Leute wie mich ganz praktisch
...und du bist sicher, das tmcbob() besser als kernelbob() ist? Die Unterschiede zwischen beiden, kann ich in meinem Testclip nur im Differenzbild sehen - hast Du vielleicht irgendein Vergleichsbild, bei welchem einem der Qualitätsgewinn direkt ins Auge springt?
nimm mal statt subtract einfach interleave, dann siehst Du den unterschied ganz deutlich. tmcbob macht sauberere kanten, waehrend kernelbob bessere statische bereiche macht.
such' Dir also was aus.
ahso, den tmcreint() solltest Du ueber einen Parameter steuerbar gestalten, ob er mit 4,0,3 (BFF) oder mit 4,1,2 (TFF) reinterlaced, denn wenn man bei TFF video mit BFF reinterlaced, ist die bildquali SOFORT im Eimer, denn man selektiert genau die Falschen Zeilen, wenn nicht resized (denoiser only) wird.
nichtsdestotrotz kann man natuerlich (insofern reiszed wird) frei zw. 4,0,3 und 4,1,2 waehlen, wenn man eh vorhat die Fieldorder zu drehen, ohne 1/50 sec audioabweicheung zu bekommen....
(diese 1/50 sec ist aber eh unmerklich)
EDIT: huch hab ich erst jetzt gesehen: du schaltest ja global zw. den orders hin und her.
loeblich, loeblich. ganzschoen clever, weare ich nicht drauf gekommen...
Ok, bei interlaced Material kommt's ja, wenn ich das richtig verstanden habe, eher auf die Bewegungsschärfe an, so das die statischen Bereiche nicht so wichtig sind….ergo: glaube ich Dir einfach, das tmcbob() besser ist
Ich muß dich gleich mal weiter "ausquetschen". Angenommen meine Quelle hat BFF und ich will zu TFF wechseln ->
Import("C:\tmcbob.avs")
LoadPlugin("C:\DGDecode.dll")
LoadPlugin("C:\TomsMoComp.dll")
MPEG2source("C:\interlaced_BFF_NTSC_source.d2v",iPP=true)
AssumeBFF()
Crop(24,8,676,464)
tmcbob()
Convolution3D(preset="movieLQ")
LanczosResize(384,288)
wie komme ich von hier jetzt am saubersten von BFF->TFF?
aehm, wieso eigentlich 384x288 ?
da hastDu dann doch schon jegliches Detail kaputtgemacht
also einfach
assumetff().weave()
hinten an Dein script dranpappen, und schon hast Du TFF interlaced video.
allerdings mit zwei spatial IDENTISCHEN Fields.
d.h. das video hat einen ganz leichen verticalen jitter am TV.
besser waere:
MPEG2source("C:\interlaced_BFF_NTSC_source.d2v",iPP=true)
AssumeBFF()
Crop(24,8,676,464)
tmcbob()
Convolution3D(preset="movieLQ")
lanczosresize(768,576)
separatefields().selectevery(4,1,2).weave()
Zitataehm, wieso eigentlich 384x288 ?
da hastDu dann doch schon jegliches Detail kaputtgemacht
Das ist nur ein Beispiel - Du kannst hier eigentlich zwei x beliebige durch 16 teilbare Zahlen einsetzen, wobei y natürlich > 240 Pixels sein sollte, weil ich mir bei der NTSC Quelle das interlaced resizing dann sparen könnte
Zitatlanczosresize(768,576)
Das gehört aber nicht zur reinterlacing Prozedur, oder?
Zitatseparatefields().selectevery(4,1,2).weave()
Achso, jetzt verstehe ich Deinen Beitrag von heute, 17:04 Uhr: "nichtsdestotrotz kann man natuerlich (insofern reiszed wird) frei zw. 4,0,3 und 4,1,2 waehlen, wenn man eh vorhat die Fieldorder zu drehen, ohne 1/50 sec audioabweicheung zu bekommen...." - bedeutet also, wenn ich nach tmcbob() noch resize, ist es völlig egal, ob ich unten mit a) ...selectevery(4,1,2)... oder b)...selectevery(4,0,3)... reinterlace - das Ergebnis wäre dann immer sauber a=tff bzw. b=bff, völlig unabhängig von der Fieldorder der Quelle?
Und wenn dem so ist, wie würde ich denn dann vorgehen, wenn ich nur denoisen will? Gibt es für so nen Fieldorderwechsel keine gute Methode die man immer verwenden kann?
also:
- wenn Du NUR denoisen willst, dann muss das selectevery haargenau zur quellefieldorder passen. sonst ist die BIldquali im eimer
- wenn aber ein resizer hinzukommt, ist es wahlfrei, ob Du 4,1,2 oder 4,0,3 nimmst.
- die immer funktionierende methode zum drehen der fieldorder ist: doubleweave().selectodd() sie bringt zwar einen 1/50 sec audioversatz ein, der stoert aber nicht weiter.
auch ist es egal, ob dw().selodd() vor oder nach der prozedur aufgerufen wird.
Hallo Forum,
hallo scharfis brain
habe jetzt also wieder einige Zeit getestet, trotz herrlichem Wetter.
Szene also deinterlaced mit TomsMoComp und dann dem Deshaker in VDub als prog. Video untergejublet. Hat funktioniert.
Jetzt zum reinterlacen.
Wenn ich jetzt Deinen Vorschlag
Zitat# dies ist das reinterlacing:
separatefields().selectevery(4,0,3).weave() #fuer TTF 4,1,2 nutzen
zum Reinterlacen ins Skript schreibe, erhalte ich nur die Hälfte der Avi zurück.
Schreibe ich
Zitatseparatefields().weave()
dann erhalte ich die komplette Szene.
Ist das so ok ?
Gruß
Herbie
Zitat von scharfis_brainalso:
- wenn Du NUR denoisen willst, dann muss das selectevery haargenau zur quellefieldorder passen. sonst ist die BIldquali im eimer
- wenn aber ein resizer hinzukommt, ist es wahlfrei, ob Du 4,1,2 oder 4,0,3 nimmst.
- die immer funktionierende methode zum drehen der fieldorder ist: doubleweave().selectodd() sie bringt zwar einen 1/50 sec audioversatz ein, der stoert aber nicht weiter.
auch ist es egal, ob dw().selodd() vor oder nach der prozedur aufgerufen wird.
Okay, hab mal folgendes getestet (da ich über keinen BFF Clip verfüge, habe ich versucht von TFF auf BFF zu wechseln)
A)
MPEG2source("C:\DGIndex.d2v",iPP=true)AssumeTFF()tmcbob()Crop(20,8,684,464)BicubicResize(624,464,0,0.5)separatefields()selectevery(4,1,2)weave()DoubleWeave()SelectOdd()
Funktioniert
B)
MPEG2source("C:\DGIndex.d2v",iPP=true)AssumeTFF()tmcbob()Crop(20,8,684,464)BicubicResize(624,464,0,0.5)separatefields()selectevery(4,0,3)weave()
Funktioniert, ist aber unscharf
C)
MPEG2source("C:\DGIndex.d2v",iPP=true)AssumeTFF()tmcbob()Crop(20,8,684,464)BicubicResize(624,464,0,0.5)separatefields()selectevery(4,1,2)DoubleWeave()SelectOdd()
Identisch zu A
D)
MPEG2source("C:\DGIndex.d2v",iPP=true).DoubleWeave().SelectOdd()AssumeBFF()tmcbob()Crop(20,8,684,464)BicubicResize(624,464,0,0.5)separatefields()selectevery(4,0,3)weave()
Gibt eigenartige Farbverschiebungen
Also, benutze ich für BFF->TFF analog "separatefields().selectevery(4,0,3).doubleweave().selectodd()".
->
tmcbob.avs
function tmcbob(clip a)
{ global ord = getparity(a) ? 1 : 0
f = a.tomsmocomp(-1,5,0)
e = a.doubleweave().selectodd().tomsmocomp(-1,5,0)
interleave(f,e).assumeframebased
}
function tmcreint(clip b, bool "BFFtoTFF")
{ BFFtoTFF = default(BFFtoTFF,false)
h = b.separatefields().selectevery(4,0,3).doubleweave().selectodd()
g = (ord == 0) ? b.separatefields().selectevery(4,0,3).weave() : b.separatefields().selectevery(4,1,2).weave()
(BFFtoTFF == true) ? h : g
}
Alles anzeigen
Puh…hab ich irgendwas vergessen,oder falsch gemacht?
Auf jeden fall schon mal ein fettes Danke für die ganzen Infos @ scharfis_brain
aehm, sagmal, wenn Du ausschlieszlich in der horizontalen resizen willst (und das machst Du ja). dann brauchst Du weder die fields zu separieren, noch irgendwelche deinterlacereien betreiben.
es reicht absolut aus, einfach den resizer zu benutzen.
(das geht aber wirklich nur, solange Du nicht in der vertikalen resizest)
Nur in diesem speziellen Fall - aber ich habe hier noch ein paar Konzert DVDs rumfliegen, welche ich in den nächsten Tagen zu XviD mit original AC-3 Spur weiterverarbeiten will. Dort werde ich ganz sicher beidseitig umskalieren.
Will mich dann aber nicht wieder völlig neu reindenken und hier deshalb schon im Vorfeld alle für mich relevanten Fälle durchgekaut haben.
Also, stimmt oben alles?
nicht ganz.
wenn Du vertikal nicht resizest, dann ist 4,1,2 vs. 4,0,3 extrem wichtig
sobald aber vertikales resizing ins spiel kommt, ist es wurscht.
Zusammenfassung BFF->TFF:
Jetzt hammers aber, oder :)?
genau
Hallo Forum
hallo scharfis brain
1. Test
wollte vor der Deshakeranwendung in Vdub die Avi mit TomsMoComb deinterlacen um ein besseres Deshaker- Ergebnis zu erhalten.
Daher schrieb ich dieses Skript:
Avisource ("D:\Avi Dateien\Film.avi")
# ConvertToYUY2() #
TomsMoComp()
Anwendung des Deshakers von VdubMod (als Progressive Video)
Avisource ("D:\Avi Dateien\Deshakte Film.avi")
# ConvertToYUY2() #
SeparateFields().Weave()
Ergebnis: gut
Selectevery(4,0,3) mußte ich weglassen, erhielt nur die halbe Avi zurück.
Wäre das so in Ordnung ?
2. Test
Anwendung des DeInterlacers DeComb
Avisource ("D:\Avi Dateien\Film.avi")
# ConvertToYUY2() #
Telecide(order=1,guide=2)
Ergebnis: noch besser (Szene war beruhigt ohne Deshakeranwendung und mußte nicht reinterlaced werden).
Bin zwar mit den Ergebnissen zufrieden, jedoch verstehe ich das alles nicht so recht, besonders der 2. Test hat mich sehr verwundert.
Was meinen die Fachleute dazu ?
Gruß Herbie
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!