by scharfis_brain
Dieser Text widmet sich dem Interlacing (und dessen Behandlung/Beseitigung), welches eigentlich nicht auftreten dürfte, wenn Filme ordentlich auf das PAL-Format gemastert würden.Es wird der grundsätzliche Umgang mit AVISynth und Grundwissen bzgl. Interlacing vorausgesetzt, ich werde darauf garnicht bzw. nur kurz eingehen.
Jeder, der schonmal mit Video am PC gearbeitet hat, wird sicherlich bemerkt haben, dass es bei manchen Videosequenzen zu horizontalen Streifen bei bewegten Inhalten im Video kommt. Dies ist der berüchtigte Interlacing-Effekt. Ich werde diese horizontalen Streifen im weiteren Text nur noch als Kämme oder Interlacing bezeichen.
Nun, wie entstehen diese Kämme?
Dafür müssen wir wissen, wie ein analoges Video übertragen wird. Bei dem in unserem Gebiet üblichen Fernsehstandard PAL haben wir eine vertikale Auflösung von 576 bildrelevanten Zeilen. Das komplette Bild wird dabei 25 mal in der Sekunde übertagen. Da es aber unerträglich auf einem Fernseher flimmern würde, wenn man das Bild nur 25 mal in der Sekunde auf dem Bildschirm komplett neuzeichnen würde, haben sich kluge Leute in den zwanziger Jahren das Zeilensprungverfahren (Interlacing) ausgedacht. Bei diesem Verfahren werden zuerst die geradzahligen Zeilen des Bild übertagen (also die Zeilen 2,4,...572,576, erstes / unteres Halbbild bzw. Even / Bottom Field) und erst danach die ungeradzahligen Zeilen (1,3,5,...,573,575, zweites / oberes Halbbild bzw. Odd / Bottom Field)1. Dadurch verringert man das Flimmern, da man nun eine Bildwiederholfrequenz von 50Hz hat. Dies erkauft man sich aber mit einer Auflösungsreduktion in bewegten Bereichen des Videos. Beim Fernsehen fällt dies bei sich bewegenden diagonalen Kanten auf, sie weisen immer einen Treppcheneffekt auf. Statische Bildelemente hingegen haben volle Detailauflösung. Das Zeilensprungverfahren ist also eine Art Kompression.
1)Da ein analoges Halbbild exakterweise nur 575 (anstatt der digitalisierten 576) Bildzeilen hat, beinhaltet jedes Halbbild auch ‚nur' 287 und eine HALBE Zeile. Das komplette PAL-Bild hat demzufolge 574 komplette Zeilen und je eine halbe Zeile oben (Zeile 1) und unten (Zeile 576). Siehe dieses Bild:
In einer Videokamera werden nicht 25 Vollbilder pro Sekunde aufgenommen, sondern 50 Halbbilder pro Sekunde, d.h. jedes Halbbild enthält einen anderen Bewegungszustand als das vorhergehende. Deswegen sind zwei aufeinanderfolgende Halbbilder auch nicht mehr deckungsgleich. Wenn wir nun solch ein Video am PC bearbeiten, wird uns dieser immer zwei Halbbilder gleichzeitig anzeigen, da aber beide Halbbilder, aufgrund der verschiedenen Zeitindexe, nicht deckungsgleich sind, gibt es die bekannten Kämme. Dazu ein Halbbildschema:
Videofield1 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 Paarung n.mö. ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, ´, Videofield2 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 Zeit -----------------------------interlaced------------------------------------->
Dies wäre das normale Interlacing, welches sich entweder durch deinterlacing beseitigen lässt, oder besser noch ohne deinterlacing als interlaced MPEG zu speichern ist, da es hierbei zu keinem Qualitätsverlust kommt.
Dies ist eine typische Halbbilddarstellung, wie ich sie des öfteren benutzen werde:
Filmframe A B C D E A B C D E F G H Videofield1 A B B D E A B BC D DE F FG GH Paarung | |/ , ´ / oder ` | , | , | , , Videofield2 A B C E F AB B C D E F G H Zeit --p--p--i--i--i--> -i--p--i--p--i--p--i--i-->
Filmframe | kennzeichnet die individuellen Einzelbilder des originalen Films, VOR aller Konvertierung. |
Videofield1&2 | beschreibt die Halbbilder des vorliegenden Videostroms. Entweder
oder |
Paarung | beschreibt die Gleichheit einzelner Halbbilder zueinander: | oder / weist auf 2 Halbbilder pro Vollbild hin (Normalfall) | / oder | \ weist auf drei Halbbilder pro Filmframe hin (passiert bei NTSC-Telecine). , oder ´ weist auf ein verwaistes Halbbild pro Filmframe hin, ist bei "echtem" Interlacing jedoch normal, da es hierbei 50 hfps gibt. |
Zeit | beschreibt den Zeitverlauf. p kennzeichnet ein Progressive Frame (nur möglich, wenn zwei gleiche Halbbilder übereinander stehen) i kennzeichnet ein Interlaced-Frame |
Das exotische Interlacing entsteht nun, wenn jemand einen Film auf das PAL-Format konvertieren möchte. Dieses Verfahren wird Telecine genannt. Ein Film hat immer eine Bildwiederholfrequenz von 24 fps. PAL hingegen hat 50 hfps (half frames per second). Jetzt haben wir mehrere Möglichkeiten, den Film auf das PAL-Format zu konvertieren.
Die meistgenutzte und beste Methode ist der sogenannte PAL-Speedup. Hierbei wird der Film von 24fps auf 25fps beschleunigt. Dann wird er auf PAL konvertiert, indem immer zwei Halbbilder den gleichen Filmframe beinhalten. Diese Beschleunigung hat aber einen kleinen Nebeneffekt: Die Tonhöhe ändert sich um nahezu einen Halbton nach oben. Bei aufwändigeren Wandlungen wird dies durch ein komplexes Verfahren vermieden. AVISynth bringt ab der Version 2.5.5 eine Funktion TimeStretch mit, die den Speedup/Slowdown ohne Tonhöhenänderung vornehmen kann.
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ------------------------------------------------------------------------------------------- Videofield1 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Paarung | | | | | | | | | | | | | | | | | | | | | | | | | | Videofield2 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Zeit ---------------------------progressive------------------------------------->
Diese Sequenz würde am PC kein Interlacing bemerkbar machen, da der PC immer die
Halbbilder 0&1, 2&3, 4&5 gleichzeig darstellt und somit auch nur individuell
die Filmframes A, B und C.
Dieses Video kann problemlos progressive behandelt werden.
Nachahmung in AviSynth:
AVISource("24fpsFilm.avi") AssumeFPS(25,true)
Behebung in AVISynth:
-nicht notwendig!
Manchmal aber passiert es, dass sich diese Halbbildsequenz um 1/50 Sekunde verschiebt. Das dazugehörige Schema sähe so aus:
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y Z --------------------------------------------------------------------------------------------- Videofield1 * A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Paarung / / / / / / / / / / / / / / / / / / / / / / / / / / Videofield2 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Zeit ---------------------------interlaced--------------------------------------->
Wir wir jetzt sehen können, beinhalten die Halbbilder 0&1, 2&3, 4&5 jetzt auch
zwei verschiedene Filmframes (nämlich A&B;, B&C;, C&D;), da der PC, wie oben
beschrieben, die Halbbilder immer nur in diesem Schritten darstellt, hat jedes
Bild des Films Kämme, ohne dass der Film tatsächlich interlaced wäre, weil
immer zwei Film-Frames gleichzeitg dargestellt werden. Am TV fällt das aber in
keinster Weise auf.
Nachahmung in AviSynth:
AVISource("24fpsFilm.avi") AssumeFPS(25,true).DoubleWeave().SelectOdd()
Diese Art der Telecine wird als Phase shifted oder manchmal auch als Perverse Telecine bezeichnet und lässt sich mit Hilfe von AVISynth recht einfach beheben, indem man die Halbbilder neu sortiert:
Behebung in AviSynth:
DoubleWeave().SelectOdd()
Teilweise passiert es auch, dass sich normale Telecine und perverse Telecine abwechseln (wie z.B. die Independence Day - DVD). Dies ließe sich nicht mehr durch DoubleWeave().SelectOdd() beheben, da dann die normale Telecine zur perverse Telecine wird. Hierbei kann also nur noch eine automatische Lösung helfen, und zwar in Form von Telecide aus Donald Grafts Decomb Package:
Telecide(order=1,guide=2,post=0)
Telecide() sucht hierbei im Video nach ähnlichen Halbbildern und fügt diese dann zusammen (sorgt also für eine korrekte Sortierung der Halbbilder), so dass das Video wieder progressive wird.
Hierbei wird der Film nicht auf 25fps beschleunigt, sondern nur jede Sekunde ein Filmbild 2x (Vollbild) respektive 4x (Halbbild) gezeigt:
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y ------------------------------------------------------------------------------------------- Videofield1 A B C D E F G H I J K L M N O P Q R S T U V W X X Y Paarung | | | | | | | | | | | | | | | | | | | | | | | | | | Videofield2 A B C D E F G H I J K L M N O P Q R S T U V W X X Y Zeit ---------------------------progressive-------------------------------------->
rot = Duplikate
Das 24. Filmbild wird immer 4x gezeigt, und zwar in den Halbbildern 46 bis 49.
Dieses Verfahren führt allerdings zu sekündlichen Rucklern.
Nachahmung in AVISynth:
AVISource("24fpsFilm.avi") ChangeFPS(25)
oder
AVISource("24fpsFilm.avi") SelectEvery(24,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,23)
Behebung in AviSynth:
Decimate(25)
Die doppelten Bilder können mit Decimate(x) aus dem Decomb Package entfernt werden. Decimate sucht nach doppelten Vollbildern im Video und entfernt dann alle x Bilder das verdoppelte Bild. Das resultierende Video hat dann eine Framrate von 24fps, also genau die des Films.
Um das Ruckeln, welches bei 2.2.1a entsteht, zu verringern, fügt man nicht sekündlich ein Vollbild ein, sondern 2 mal pro Sekunde ein Halbbild. Das führt aber dazu, dass man alle 12 Filmframes einen phase shift (und einen leichten Ruckler) bekommt:
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y ------------------------------------------------------------------------------------------- Videofield1 A B C D E F G H I J K L L M N O P Q R S T U V W X Y Paarung | | | | | | | | | | | |/ / / / / / / / / / / / / | | Videofield2 A B C D E F G H I J K L M N O P Q R S T U V W X X Y Zeit -----------progressive------------|----------------interlaced-- ------|--p--->
rot = Duplikate
Das Video ist also im Wechsel 13 Frames lang progressive und dann 12 Frames
interlaced.
Nachahmung in AVISynth:
AVISource("24fpsFilm.avi") ChangeFPS(50).SeparateFields().SelectEvery(4,0,3).Weave()
Behebung in AVISynth:
Zuerst muss der phase shift beseitigt werden. Dazu benutzen wir wieder
Telecide(order=1,guide=2,post=0)
Durch Telecide() erhält man ein Video, wie in 2.3.1a., welches dann mittels
Decimate(25)
wieder auf 24fps gebracht wird
Dies ist eine der grausamen Methoden, Film auf PAL zu transferieren. Hierbei werden Halbbilder, die zeitlich nicht genau unter einem Filmframe liegen, aus den zeitlich benachbarten Filmbildern gemischt (blending). Die Sequenz könnte so aussehen (je nach Konverter etwas anders):
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y Z --------------------------------------------------------------------------------------------- Videofield1 A B C D E F G H I J K L LM MN NO OP PQ QR RS ST TU UV VW WX XY Y Z Paarung n.mö. ´ ´ ´ ´ ´ ´ ´ ´ ´ ´ ´ ´ , , , , , , , , , , , , ´ ´ Videofield2 AB BC CD DE EF FG GH HI IJ JK KL LM M N O P Q R S T U V W X XY YZ Zeit -----------------------------interlaced--------------------------------------->
Die fett markierten Halbbilder sind intakte Halbbilder, deren Inhalt dem
eines einzelnen FilmFrames entspricht. Die anderen Halbbilder sind blends, d.h.
ihr Inhalt besteht aus der Mischung zweier benachbarter Filmframes.
Nachahmung in AviSynth:
AVISource("24fpsFilm.avi") ConvertFPS(50).SeparateFields().SelectEvery(4,0,3).Weave()
Behebung in AVISynth:
Am TV fällt eine solche Telecine fast garnicht auf. Am PC hingegen hat man in
fast jedem Frame interlacing. Auch greifen hier keine Standardmethoden, wie
Telecide zur Beseitigung des Interlacings, da die benachbarten Halbbilder
nichtmehr ähnlich sind. Man koennte das Video deinterlacen, um dem Interlacing
beizukommen, aber das würde mehr als die Hälfte der Bilder zu blends machen:
FieldDeinterlace(order=1, blend=false)
Ich habe eine Lösung gefunden, die möglicherweise Abhilfe schaffen kann:
Zuerst muss man das Video mit einem Fullframerate-Deinterlacer, wie z.B. DGBob,
Kernelbob oder TMCkernelBob auf 50 fps deinterlacen. Danach muss man mit Hilfe
von Unblendpattern die intakten Halbbilder auswählen lassen. Dies setzt
allerdings voraus, dass die Blend-Sequenz ein konstantes Muster aufweist.
Es dürfen auch keine Framedrops im Video sein, denn dadurch wird das
Blend-Pattern auch verschoben.
KernelBob(4) UnblendPattern(offset,24,false,false)
Um einen Film auf NTSC (60 hfps) zu bringen, kann man ihn keinem Speedup von 24 auf 30 fps unterziehen, das würde zu sehr auffallen. Anstatt dessen zeigt man die Filmframes im Wechsel 2x und 3x, wie die Sequenz verdeutlicht:
Filmframe A B C D E F G H I J K Videofield1 A B B C D E F F G H I J J K Paarung | |/ / /| | |/ / /| | |/ / Videofield2 A B C D D E F G H H I J K L Zeit --p--p--i--i--p--p--p--i--i--p--p--p--i--i->
Oder eine etwas andere Darstellungsweise:
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Videofields 0 2 5 7 10 12 15 17 20 22 25 27 30 32 35 37 40 42 45 47 50 52 55 57 60 62 1 3 6 8 11 13 16 18 21 23 26 28 31 33 36 38 41 43 46 48 51 53 56 58 61 63 4 9 14 19 24 29 34 39 44 49 54 59 64 Zeit ------------------------------------------------------------------------------>
Dadurch kommt es zu einem Dauerruckeln, welches zwar bemerkbar, aber nicht allzu
störend empfunden wird.
Nachahmung in AviSynth:
AVISource("24fpsFilm.avi") SelectEvery(2,0,0,0,1,1).SeparateFields().SelectEvery(4,1,2).Weave()
Den 3:2 Pulldown kann man mit Hilfe von AVISynth und dem Decomb-Package wie folgt rückgängig machen:
Telecide(order=1,post=0) Decimate(5)
Dieses Verfahren heisst inverse Telecine (IVTC)
Dies ist die einfachste, billigste und schlechteste Methode, eine Normwandlung durchzuführen. Hierbei wird das Video zuerst mit einem Fullframerate-Deinterlacer auf 60 fps gebracht und dann jedes 6. Bild entfernt. Das führt zu einem ganz unerträglichem 10 Hz ruckeln und bei Filmmaterial zu folgender Sequenz:
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Videoframes 0 2 x 7 10 12 15 x 20 22 25 27 30 32 x 37 40 42 45 x 50 52 55 57 60 62 1 3 6 8 x 13 16 18 21 x 26 28 31 33 36 38 x 43 46 48 51 x 56 58 61 63 4 9 14 19 24 x 34 39 44 49 54 x 64 Zeit ------------------------------------------------------------------------------>
x - gelöschte Bilder
Danach werden die Vollbilder wieder auf Halbbildgröße reduziert.
Die Resultierende PAL - Sequenz:
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Videofields 0 2 5 6 9 10 13 15 17 19 21 23 25 27 30 31 34 35 38 40 42 44 46 48 50 52 1 3 7 11 14 16 18 20 22 24 26 28 32 36 39 41 43 45 47 49 51 53 4 8 12 29 33 37 54 Zeit ------------------------------------------------------------------------------>
oder in Halbbildabfolge:
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Videofield1 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 49 51 53 Paarung | |/ , |/ , |/ / / / / / / / /| ` /| ` /| | | | | | | | | Videofield2 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 48 50 52 54 Zeit --p--p--i--p--i--p--i--i--i--i--i--i--i--i--p--i--p--i--p--p--p--p--p--p--p--p--p> (` und , kennzeichnen verwaiste, aber bildrelevante Halbbilder)
Wie man sieht, ergibt das ein hübsches Durcheinander in der Bildabfolge. Sieben
(G-M) und sechs (S-Y) Frames sind immer komplett durch zwei Halbbilder abgeschlossen.
Aber dann kommt eine Folge von fünf Frames, von denen drei (BDF) Frames aus je
drei Halbbildern und zwei (CE) Frames aus nur einem einzigen Halbbild bestehen.
Nachahmung in AviSynth:
AVISource("30fpsTelecinedFilm.avi") DGBob(order=1).Changefps(50).Separatefields().Selectevery(4,0,3).Weave() #oder DGBob(order=1).Selectevery(6,0,1,2,3,4) Separatefields().Selectevery(4,0,3).Weave()
Behebung in AviSynth:
Mit Telecide kann man bei einem solchen Stream leider gar nichts anfangen, da
Telecide die verwaisten Halbbilder einfach "schluckt", d.h. aus dem vorhergehenden
Dreifachhalbbild werden 2 Vollbilder (4 Halbbilder).
Zurzeit kann dem aber man recht gut mit
SmartDecimate(24,50,tel=0.9)
Herr werden...
Allerdings gibt es hin- und wieder mal Ruckler, wenn SmartDecimate() die verwaisten
Halbbilder (B,C,O,Q) nicht korrekt erkennt.
Hierbei wird aus dem, auf Fullframrate deinterlacedtem, Video nicht einfach jedes 6. Bild gelöscht, sondern die Bilder werden über ein gewichtetes Blending (Mischen) von 60fps auf 50fps reduziert:
Blending allgemein:
NTSC-Field 1 2 3 4 5 6 7 8 9 10 11 12 13 | | / \ / \ / \ | | | / \ / \ / \ | | Wichtung in % 100 75 25 60 40 40 60 25 75 100 75 25 60 40 40 60 25 75 100 | \/ |/ \| \ / | \/ |/ \| \ / | PAL - Field 1 2 3 4 5 6 7 8 9 10 11 Zeit -------------------------------------------------------------------------->
Blending bei Telecinded Film:
NTSC-Field A A B B B C C D D D E E F | | / \ / \ / \ | | | / \ / \ / \ | | Wichtung in % 100 75 25 60 40 40 60 25 75 100 75 25 60 40 40 60 25 75 100 | \/ |/ \| \ / | \/ |/ \| \ / | PAL - Field A AB B B CB C D D DE E F Zeit -------------------------------------------------------------------------->
Für eine ganze Sekunde:
(übereinanderliegende Buchstaben kennzeichnen einen Blend)
NTSC : AABBBCCDDDEEFFFGGHHHIIJJJKKLLLMMNNNOOPPPQQRRRSSTTTUUVVVWWXXXYYZZZ PAL : A ABBBC DDDEF FFGGH HIIJJ KKLLM MNNNO PPPQR RRSST TUUVV WWXXY YZZ B C E G H I J L N O Q S T U V X Z
In Halbbildnotation:
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Videofield1 A B BC D DE F FG GH HI IJ J KL L MN N O P Q R S T U V W X Y Z Paarung ` | , | , | , , , /, /, / ` / ` / ` ` ` | ` | ` | Videofield2 AB B C D E F G H I J K L M N NO P PQ R RS ST TU UV V WX X YZ Z
Dies ist nur ein theoretisches Pattern, da bei einer echten Konvertierung zwischen 59.94fps und 50fps gewandelt werden muss. Dadurch verschiebt sich das Pattern alle 1000 NTSC-Frames und es gibt mehr blended-fields als dieses Beispiel zeigt. Nichtsdestotrotz sollte dieses Beispiel zeigen, wie schlimm sich eine solche Normwandlung auf Film auswirkt!
Nachahmung in AviSynth:
AVISource("24fpsFilm.avi") SelectEvery(2,0,0,0,1,1).SeparateFields().SelectEvery(4,1,2).Weave() DGBob(order=1).ConvertFPS(50).SeparateFields.SelectEvery(4,0,3).Weave()
Behebung in AviSynth:
Wenn man versucht, ein solches Video zu deinterlacen, bekommt man 2 Probleme,
je nach Deinterlacer:
Es gibt zwar keine wirkliche Lösung, aber mehrere Lösungsansätze:
AVISource("normwandel.avi") restore24()
AVISource("normwandel.avi") KernelBob(4) Unblend() SmartDecimate(24,100)
AVISource("normwandel.avi") KernelBob(4) UnblendPattern(offset,24,false,false)
Eine "gute" Normwandlung sollte die Film-Parts eines Videos einer inverse Telecine (IVTC, Kap. 2.3.1.) unterziehen. Die IVTC stellt die ursprünglichen 24fps des Files wieder her. Dann wird das gesamte Video auf 62.5 fps beschleunigt und dann der IVTC-te Part OHNE Blending auf 25 fps beschleunigt und nur die Video-Parts werden per Blending auf 50hfps konvertiert. Dies vermeidet die im vorherigen Abschnitt behandeltem Probleme.
Die AVISynth-Funktion converter.avs beherrscht diese Art der Normwandlung. Wahlweise mit oder ohne Speedup. Film-Parts werden jedoch in jeden Falle ohne Blending konvertiert.
Hier landen alle anderen Misshandlungen, denen Film-Streams noch so zum Opfer fallen können.
Vor einiger Zeit hatte BaronVlad ein interlacing-Problem mit einem Film, der auf Sat.1 lief. Nach einigen (Fern-) Analysen, die für mich nur in Verwirrung ausarteten, erhielt ich ein Sample von ihm. Nach eingehender Analyse war ich erschrocken. Ich fand 26, in Worten: sechsundzwanzig, Filmbilder pro Sekunde in 50 Halbbildern pro Sekunde, die restlichen 24 Halbbilder waren blended:
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X Y Z --------------------------------------------------------------------------------------------- Videofield1 A B C D E F G H I J K L MN NO OP PQ QR RS ST TU UV VW WX Y Z Paarung n.mö. ´ ´ ´ ´ ´ ´ ´ ´ ´ ´ ´ ´ , , , , , , , , , , , , ´ ´ Videofield2 AB BC CD DE EF FG GH HI IJ JK KL M N O P Q R S T U V W X YZ ZA Zeit -----------------------------interlaced--------------------------------------->
Dieser Stream veranlasste mich, Unblendpattern() zu schreiben, womit
der Baron diesen Clip erfolgreich wieder Progressive bekam.
Sat.1 beschleunigte diesen (über 2h Netto langen) Film von schon 25fps (PAL-Speedup)
auf 26fps, was alles in allem wohl noch einen weiteren Werbeblock von einigen Minuten Dauer zuließ.
Dies hab ich bei einem Sample von Ashyak vom Sender Pro7 gesehen. Hierbei wurde der Slowdown glücklicherweise ohne Blending durchgeführt, sodass man alle 10 Bilder ein Duplikat hat. Dieses Pattern ist dem aus 2.2.1b ähnlich, nur dass hierbei die Tripel öfter auftreten:
Filmframe A B C D E F G H I J K L M N O P Q R S T U V W X ------------------------------------------------------------------------------------------- Videofield1 A B C D E E F G H I J K L M N O O P Q R S T U V W X Paarung | | | | | / / / / / /| | | | | | / / / / /| | | | | | Videofield2 A B C D E F G H I J J K L M N O P Q R S T T U V W X Zeit -p--p--p--p--p--i--i--i--i--i--p--p--p--p--p--p--i--i--i--i--p--p--p--p--p--p-->
rot = Tripel
Prinzipiell hätte Telecide(post=0).Decimate(10) geholfen. Da der Film aber vermutlicherweise nicht durchgänging mit 22.5 fps lief, hätte man ihn Szenenweise analysieren müssen.
Na? Kopfschmerzen bekommen? Aspirin hilft!
Ich sollte hiermit eigentlich fast alle Film-Misshandlungen abgehandelt haben.
Solltet ihr dennoch etwas finden, was sich nicht mit meinen Erklärungen deckt,
postet euer Problem bei http://forum.gleitz.info !
Mehr zu meinen Funktionen gibt's hier:
kernelbob & unblendpattern | http://forum.doom9.org/showthread.php?s=&threadid;=66093& |
converter.avs | http://forum.doom9.org/showthread.php?s=&threadid;=67161& |
Vielen Dank an alle, die mir Ihre Sampleclips zur Verfügung gestellt haben:
BaronVlad | 26fps Speedup |
Ashyak | 22,5fps Slowdown und Normwandlung ohne blending |
i4004/ivo | telecine ohne PAL-Speedup mit blending |
Manono | div. NTSC-blended-Clips |
Der Karl | StarTrek ist eine Normwandlung! Und wehe Dir, Du streitest noch mal mit mir darüber! ;-) |
Dogleg | |
Encod3r | |
kortduorsch | Anime-Normwandlung |
narler | dynamischer Phase shift |
wim | |
zeronegative | |
zisoft | für die HTML-Umsetzung |
uvm, die mir gerade nicht einfallen.
Das folgende AviSynth-Script erzeugt eine Video-Sequenz, mit der die besprochenen Effekte simuliert werden können:
src=BlankClip(1,256,384,"RGB24",24) rot=$FF0000 gruen=$00FF00 blau=$0000FF gelb=$FFFF00 lila=$FF00FF tuerkis=$00FFFF gr=320 off=48 A=src.SubTitle("A",size=gr,text_color=rot) B=src.SubTitle("B",x=off,size=gr,text_color=gruen) C=src.SubTitle("C",size=gr,text_color=blau) D=src.SubTitle("D",x=off,size=gr,text_color=gelb) E=src.SubTitle("E",size=gr,text_color=lila) F=src.SubTitle("F",x=off,size=gr,text_color=tuerkis) G=src.SubTitle("G",size=gr,text_color=rot) H=src.SubTitle("H",x=off,size=gr,text_color=gruen) I=src.SubTitle("I",size=gr,text_color=blau) J=src.SubTitle("J",x=off,size=gr,text_color=gelb) K=src.SubTitle("K",size=gr,text_color=lila) L=src.SubTitle("L",x=off,size=gr,text_color=tuerkis) M=src.SubTitle("M",size=gr,text_color=rot) N=src.SubTitle("N",x=off,size=gr,text_color=gruen) O=src.SubTitle("O",size=gr,text_color=blau) P=src.SubTitle("P",x=off,size=gr,text_color=gelb) Q=src.SubTitle("Q",size=gr,text_color=lila) R=src.SubTitle("R",x=off,size=gr,text_color=tuerkis) S=src.SubTitle("S",size=gr,text_color=rot) T=src.SubTitle("T",x=off,size=gr,text_color=gruen) U=src.SubTitle("U",size=gr,text_color=blau) V=src.SubTitle("V",x=off,size=gr,text_color=gelb) W=src.SubTitle("W",size=gr,text_color=lila) X=src.SubTitle("X",x=off,size=gr,text_color=tuerkis) Y=src.SubTitle("Y",size=gr,text_color=rot) Z=src.SubTitle("Z",x=off,size=gr,text_color=gruen) res=a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z res=res.crop(0,88,0,-40) res+res+res+res+res