14.2. Wie mit telecine und interlacing in NTSC-DVDs umgehen

14.2.1. Einführung

Was ist telecine?  Wenn du nicht viel von dem verstehst, was in diesem Dokument beschrieben wird, lies den Wikipedia-Artikel über Telecine. Dies ist eine verständliche und einigermaßen umfassende Beschreibung dessen, was telecine ist.

Eine Anmerkung zu Zahlen.  Viele Dokumente, einschließlich des oben verlinkten Handbuchs, beziehen sich auf den Wert Felder pro Sekunde von NTSC-Video als 59.94 und den korrespondierenden Frames pro Sekunde als 29.97 (für telecined und interlaced) und 23.976 (für progressiv). Zur Vereinfachung runden manche dieser Dokumente sogar auf 60, 30 und 24 auf.

Streng genommen sind alle diese Zahlen Näherungswerte. Das schwarz/weiße NTSC-Video war exakt 60 Felder pro Sekunde, später wurde jedoch 60000/1001 gewählt, um die Farbdaten anzupassen, solange man gleichzeitig zu Schwarz/weiß-Fernsehen kompatibel blieb. Digitales NTSC-Video (so wie auf einer DVD) hat ebenfalls 60000/1001 Felder pro Sekunde. Hieraus wird interlaced und telecined Video als 30000/1001 Frames pro Sekunde enthaltend abgeleitet; progressive Video hat 24000/1001 Frames pro Sekunde.

Ältere Versionen der MEncoder-Dokumentation und viele archivierten Posts in Mailing-Listen beziehen sich auf 59.94, 29.97 und 23.976. Alle MEncoder-Dokumentationen wurden insofern aktualisiert, dass sie fraktionale Werte verwenden, und du solltest dies auch tun.

-ofps 23.976 ist inkorrekt. -ofps 24000/1001 sollte statt dessen benutzt werden.

Wie telecine angewandt wird.  Jedes Video, das zur Anzeige auf einem NTSC-Fernseh-Set vorgesehen ist, muss 60000/1001 Felder pro Sekunde haben. Für TV-Filme und Shows hergestellt sind sie häufig direkt mit 60000/1001 Feldern pro Sekunde aufgenommen, die Mehrheit der Kinofilme jedoch mit 24 oder 24000/1001 Frames pro Sekunde. Wenn cinematische Movie-DVDs gemastert werden, wird das Video danach fürs Fernsehen mittels eines telecine genannten Prozesses konvertiert.

Auf einer DVD wird das Video eigentlich nie als 60000/1001 Felder pro Sekunde abgelegt. Für ein Video, das ursprünglich 60000/1001 war, wird jedes Feldpaar zu einem Frame kombiniert, was dann 30000/1001 Frames pro Sekunde ergibt. Hardware-DVD-Player lesen dann ein im Videostream eingebettetes Kennzeichen aus, um zu bestimmen, ob die gerade oder ungerade nummerierten Zeilen das erste Feld formen sollen.

Üblicherweise bleibt ein Inhalt mit 24000/1001 Frames pro Sekunde so wie er ist, wenn er für eine DVD encodiert wird, und der DVD-Player muss das Telecining on-the-fly bewerkstelligen. Manchmal jedoch wird das Video telecined bevor es auf der DVD gespeichert wird; selbst wenn es ursprünglich 24000/1001 Frames pro Sekunde war, wird es 60000/1001 Felder pro Sekunde. Wenn es auf der DVD gespeichert wird, werden Feldpaare zu 30000/1001 Frames pro Sekunde kombiniert.

Wenn man das aus 60000/1001 Feldern pro Sekunde geformten Einzelframes erzeugte Video betrachtet, ist telecined oder anderenfalls Interlacing klar sichtbar woimmer Bewegung auftritt, da ein Feld (sagen wir, die geradzahlig nummerierten Zeilen) einen Moment zur Zeit 1/(60000/1001) Sekunden später als das andere repräsentiert. Spielt man ein interlaced Video auf einem Computer ab, sehen beide hässlich aus, weil der Monitor eine höhere Auflösung besitzt und weil das Video Frame für Frame anstatt Feld für Feld angezeigt wird.

Anmerkungen

  • Dieser Abschnitt gilt nur für NTSC-DVDs und nicht für PAL.

  • Die MEncoder-Beispielzeilen überall im Dokument sind nicht zum eigentlichen Gebrauch vorgesehen. Sie sind schlicht das bloße Minimum, das zum Encodieren der betreffenden Videokategorie benötigt wird. Wie mache ich gute DVD-Rips oder wie feintune ich libavcodec auf maximale Qualität gehören nicht zum Umfang dieses Dokuments.

  • Es gibt ein paar Fußnoten speziell für dieses Handbuch, die so ähnlich verlinkt sind: [1]

14.2.2. Wie kann man sagen, welchen Typ Video man hat

14.2.2.1. Progressiv

Progressive Video wurde ursprünglich mit 24000/1001 fps gefilmt und ohne Änderung auf der DVD abgespeichert.

Wenn du eine progressive DVD in MPlayer abspielst, wird MPlayer folgende Zeile ausgeben, sobald das Abspielen des Films beginnt:

 demux_mpg: 24000/1001 fps progressive NTSC content detected, switching framerate.

Von diesem Punkt an vorwärts sollte demux_mpg nie erzählen, es finde "30000/1001 fps NTSC content."

Wenn du progressives Video ankuckst, solltest du nie irgendein Interlacing sehen. Sei trotzdem vorsichtig, weil manchmal ein winziges bisschen telecine dort hineingemischt wurde, wo du es nicht erwartest. Ich bin TV-Serien-DVDs begegnet, die eine Sekunde telecine bei jedem Szenenwechsel haben oder an extrem zufälligen Stellen. Ich hatte mir einmal eine DVD angesehen, die eine progressive erste Hälfte besaß, und die zweite Hälfte war telecined. Willst duwirklich gründlich sein, kannst du den kompletten Film scannen:

mplayer dvd://1 -nosound -vo null -benchmark

Das Verwenden von -benchmark veranlasst MPlayer, den Film so schnell er es nur kann abzuspielen; dies dauert je nach Hardware trotzdem noch eine Weile. Jedesmal wenn demux_mpg einen Frameratenwechsel meldet, wird dir die Zeile unmittelbar darüber die Zeit zeigen, bei welcher der Wechsel auftrat.

Manchmal wird progressive Video auf DVDs "soft telecine" zugeordnet, weil es dazu vorgesehen ist, vom DVD-Player telecined zu werden.

14.2.2.2. Telecined

Telecined Video war ursprünglich mit 24000/1001 aufgenommen, wurde aber telecined, bevor es auf die DVD geschrieben wurde.

MPlayer meldet keine (nie) Frameratenwechsel, wenn er telecined Video abspielt.

Beim Betrachten eines telecined Videos wirst du Interlacing-Artefakte sehen, die zu "blinken" scheinen: sie erscheinen wiederholt und verschwinden wieder. Du kannst dir das so genauer hinschauen

  1. mplayer dvd://1
  2. Suche einen Teil mit Bewegung.

  3. Benutze die Taste ., um jeweils einen Frame vorwärts zu rücken.

  4. Schau auf das Muster der interlaced und progressive aussehenden Frames. Ist das Muster, das du siehst PPPII,PPPII,PPPII,... dann ist das Video telecined. Siehst du andere Muster, dann wurde das Video womöglich mittels einiger Nicht-Standard-Methoden telecined; MEncoder kann ein Nicht-Standard-telecine nicht verlustfrei nach progressive konvertieren. Siehst du überhaupt keine Muster, ist es höchstwahrscheinlich interlaced.

Manchmal wird telecined Video auf DVDs "hard telecine" zugeordnet. Da hard telecine bereits 60000/1001 Felder pro Sekunde hat, spielt der DVD-Player das Video ohne irgendeine Manipulation ab.

Ein anderer Weg, zu sagen, ob deine Quelle telecined ist oder nicht, ist die Quelle mit den Befehlszeilenoptionen -vf pullup und -v abzuspielen, um nachzusehen, wie pullup zu den Frames passt. Ist die Quelle telecined, solltest du in der Befehlszeile ein 3:2 Muster mit abwechselnd 0+.1.+2 und 0++1 anzeigen. Diese Technik hat den Vorteil, dass du die Quelle nicht zu beobachten brauchst, um sie zu identifizieren, was von Nutzen sein könnte, falls du den Encodiervorgang automatisieren willst oder besagte Prozedur ferngesteuert mittels einer langsamen Verbindung vornehmen willst.

14.2.2.3. Interlaced

Interlaced Video wurde ursprünglich als 60000/1001 Felder pro Sekunde aufgenommen und auf der DVD als 30000/1001 Frames pro Sekunde abgespeichert. Der interlacing-Effekt (oft "combing" genannt) ist ein Ergebnis von Kammpaaren von Feldern in Frames. Jedes Feld wird einzeln als 1/(60000/1001) Sekunden angenommen, und wenn sie simultan angezeigt werden, wird der Unterschied offensichtlich.

Wie bei telecined Video sollte MPlayer niemals einen Frameratewechsel beim Abspielen des interlaced Inhalts melden.

Wenn du ein interlaced Video genau ansiehst, in dem du dich mit der Taste . durch die Frames bewegst, wirst du sehen, dass jeder einzelne Frame interlaced ist.

14.2.2.4. Gemischtes progressive und telecine

Alle "gemischten progressive und telecine" Videos wurden ursprünglich als 24000/1001 Frames pro Sekunde aufgenommen, jedoch werden einige Teile telecined beendet.

Spielt MPlayer diese Kategorie ab, wird er (oft wiederholt) zwischen "30000/1001 fps NTSC" und "24000/1001 fps progressive NTSC" zurück und vor wechseln. Beobachte die untere Hälfte von MPlayers Ausgabe, um diese Meldungen anzusehen.

Du solltest die Sektion "30000/1001 fps NTSC" überprüfen, um sicher zu gehen, dass sie auch wirklich telecine sind und nicht einfach interlaced.

14.2.2.5. Gemischtes progressive und interlaced

In "gemischtem progressive und interlaced" Inhalt wurde progressive und interlaced Video zusammengeklebt.

Diese Kategorie sieht aus wie "gemischtes progressive und telecine", bis du die Sektion 30000/1001 fps untersuchst und feststellst, dass sie das telecine-Muster nicht haben.

14.2.3. Wie jede Kategorie encodieren

Wie ich anfangs angemerkt hatte, sind die MEncoder-Beispielzeilen unten eigentlich nicht zur Anwendung bestimmt; sie demonstrieren nur die Minimalparameter zur korrekten Encodierung jeder Kategorie.

14.2.3.1. Progressive

Progressive Video erfordert kein spezielles Filtern, um es zu encodieren. Der einzige Parameter, den du gewiss anwenden solltest ist -ofps 24000/1001. Andernfalls wird MEncoder versuchen, bei 30000/1001 fps zu encodieren und Frames duplizieren.

mencoder dvd://1 -oac copy -ovc lavc -ofps 24000/1001

Dennoch ist es öfters der Fall, dass ein Video, das progressive aussieht, eigentlich kurze Teile telecine eingemischt hat. Solange du dir nicht sicher bist, ist es am sichersten, das Video als gemischtes progressive und telecine. zu behandeln. Der Performance-Verlust ist gering [3].

14.2.3.2. Telecined

Telecine kann umgekehrt werden, um den originalen 24000/1001-Inhalt zu erhalten, indem man einen Prozess verwendet, der inverse-telecine genannt wird. MPlayer enthält verschiedene Filter, um dies zu erreichen; der beste Filter, pullup wird in der Sektion Gemischtes progressive und telecine beschrieben.

14.2.3.3. Interlaced

In den meisten praktischen Fällen ist es nicht möglich, ein komplett progressives Video aus interlaced Inhalt zu erhalten. Der einzige Weg, dies ohne den Verlust der Hälfte der vertikalen Auflösung zu erreichen, ist das Verdoppeln der Framerate, und man kann versuchen zu "schätzen", wie die korrespondierenden Zeilen für jedes Feld vervollständigt werden sollten (dies hat Nachteile - siehe Methode 3).

  1. Das Video in interlaced Form encodieren. Normalerweise richtet Interlacing verheerenden Schaden für die Fähigkeit des Encoders an, gut zu komprimieren, libavcodec hat jedoch zwei eigens für das ein wenig bessere Abspeichern von interlaced Video gedachte Parameter: ildct und ilme. Auch wenn die Verwendung von mbd=2 dringend zu empfehlen ist [2], weil es Macroblöcke wie nicht-interlaced an Stellen encodiert, an denen keine Bewegung stattfindet. Beachte, dass -ofps hier NICHT notwendig ist.

    mencoder dvd://1 -oac copy -ovc lavc -lavcopts ildct:ilme:mbd=2

  2. Nutze einen Deinterlacing-Filter vor dem Encodieren. Es stehen verschiedene dieser Filter zur Auswahl, jeder mit seinen eigenen Vor- und Nachteilen. Ziehe mplayer -pphelp und mplayer -vf help zu Rate, um zu sehen, welche verfügbar sind (suche nach "deint"), lies Michael Niedermayers Deinterlacing-Filter-Vergleich und durchsuche die MPlayer-Mailinglisten, um Diskussionen über die zahlreichen Filter zu finden. Nochmals, die Framerate ändert sich nicht, also kein -ofps. Deinterlacing sollte außerdem nach dem Zuschneiden (cropping) [1] und vor dem Skalieren angewandt werden.

    mencoder dvd://1 -oac copy -vf yadif -ovc lavc

  3. Unglücklicherweise arbeitet diese Option im Zusammenhang mit MEncoder fehlerhaft; sie sollte mit MEncoder G2 gut funktionieren, den gibts aber noch nicht. Du könntest Abstürze erleben. Seis drum, der Zweck von -vf tfields ist es, einen vollen Frame aus jedem Feld zu erzeugen, was eine Framerate von 60000/1001 ergibt. Der Vorteil dieses Lösungsansatzes ist, dass nie irgendwelche Daten verloren gehen; dennoch, da jeder Frame aus nur einem Feld kommt, müssen die fehlenden Zeilen irgendwie interpoliert werden. Es gibt keine sehr guten Methoden, die fehlenden Daten zu generieren, und so wird das Resultat ein bisschen aussehen, als hätte man irgendeinen Deinterlacing-Filter verwendet. Die fehlenden Zeilen zu generieren erzeugt auch weitere Probleme, einfach weil sich die Menge an Daten verdoppelt. Somit sind höhere Encodier-Bitraten nötig, um die Qualität beizubehalten und mehr CPU-Power wird für beides, Encodieren und Decodieren, aufgewendet. Das Attribut tfields hat mehrere verschiedene Optionen dafür, wie die fehlenden Zeilen jedes Frames erzeugt werden. Wenn du diese Methode nutzt, dann nimm Bezug auf das Handbuch und wähle, welche Option auch immer am besten für dein Material aussieht. Beachte, dass du wenn tfields verwendet wird, sowohl -fps als auch -ofpsspezifizieren musst, um die doppelte Framerate der originalen Quelle zu erhalten.

    mencoder dvd://1 -oac copy -vf tfields=2 -ovc lavc -fps 60000/1001 -ofps 60000/1001

  4. Wenn du vorhast, dramatisch herunterzuskalieren, kannst du nur eins der beiden Felder extrahieren und encodieren. Sicherlich, du wirst die Hälfte der vertikalen Auflösung verlieren, aber wenn du planst, bis auf 1/2 des Originals herunter zu skalieren, macht der Verlust so gut wie gar nichts aus. Das Resultat wird eine progressive Datei mit 30000/1001 Frames pro Sekunde sein. Die Prozedur ist, -vf field zu verwenden, dann die Ränder abzuschneiden [1] und angemessen zu skalieren. Vergiss nicht, dass du die Skalierung anpassen musst, um das Halbieren der vertikalen Auflösung zu kompensieren.

    mencoder dvd://1 -oac copy -vf field=0 -ovc lavc

14.2.3.4. Gemischtes progressive und telecine

Um progressive und telecine Video komplett in progressive Video umzuwandeln, müssen die telecined Teile inverse-telecined werden. Die drei Wege, dies zu erreichen, werden unten beschrieben. Beachte, dass du inverse-telecine immer vor der Reskalierung durchführen solltest; es sei denn, du weißt wirklich, was du tust; mache inverse-telecine auch vor dem Entfernen der Ränder [1]. -ofps 24000/1001 wird hier benötigt, weil das Output-Video 24000/1001 Frames pro Sekunde werden soll.

  • -vf pullup wurde entworfen, um auf telecined Material inverse-telecine anzuwenden, während die progressiven Daten unangetastet bleiben. Damit dies richtig funktioniert, muss pullup vom softskip-Filter gefolgt werden, sonst wird MEncoder abstürzen. pullup ist trotz allem die sauberste und akkurateste Methode, die zum Encodieren von beidem telecine und "gemischtem progressive und telecine" zur Verfügung steht.

    mencoder dvd://1 -oac copy -vf pullup,softskip -ovc lavc -ofps 24000/1001

  • Eine ältere Methode ist, anstatt inverse-telecine auf die telecined Teile anzuwenden, telecine auf nicht-telecined Teile und dann inverse-telecine auf das ganze Video anzuwenden. Hört sich verwirrend an? softpulldown ist ein Filter, der ein Video durchgeht und die komplette Datei telecined macht. Lassen wir auf softpulldown entweder detc oder ivtc folgen, wird das Endergebnis vollkommen progressiv. -ofps 24000/1001 wird benötigt.

    mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001

  • Ich habe -vf filmdint selbst verwendet, aber lies hier, was D Richard Felker III zu erzählen hat:

    Es ist OK, aber IMO versucht er zu oft eher ein deinterlace als ein inverse telecine durchzuführen (ganz wie Settop-DVD-Player & progressive TVs), was ein hässliches Flimmern erzeugt und andere Artefakte. Wenn du vorhast, es anzuwenden, musst du zumindest einige Zeit darauf verwenden, die Optionen zu tunen und zuerst den Output zu beobachten, damit du auch sicher sein kannst, dass du nichts vermasselst.

14.2.3.5. Gemischtes progressive und interlaced

Es gibt zwei Optionen für den Umgang mit dieser Kategorie, jede von beiden stellt einen Kompromiss dar. Du solltest basierend auf Dauer/Stelle jedes Typs entscheiden.

  • Behandle es wie progressive. Die interlaced Teile werden interlaced aussehen und einige der interlaced Felder müssen weggelassen werden, was ein wenig zu Sprüngen führt. Du kannst einen Nachbearbeitungsfilter verwenden, wenn du willst, aber dies wird die progressive-Anteile geringfügig verringern.

    Diese Option sollte definitiv nicht verwendet werden, wenn du eventuell Video auf einem interlaced Gerät anzeigen willst (mit einer TV-Karte zum Beispiel). Wenn du interlaced Frames in einem Video mit 24000/1001 Frames pro Sekunde hast, werden diese zusammen mit den progressive Frames telecined. Die Hälfte der interlaced "Frames" werden für die Dauer von drei Feldern (3/(60000/1001) Sekunden) angezeigt, was einen flimmernden "Zeitrücksprung"-Effekt zur Folge hat, der ziemlich schlecht aussieht. Solltest du dies dennoch versuchen, musst du einen Deinterlacing-Filter wie lb oder l5 anwenden.

    Es wäre auch keine gute Idee für eine progressive Anzeige. Es wird Paare aufeinander folgender interlaced Felder auslassen, was eine Unstetigkeit zur Folge hat, die eher sichtbar ist als mit der zweiten Methode, die einige progressive Frames zweimal anzeigt. Ein interlaced Video mit 30000/1001 Frames pro Sekunde ist bereits ein bisschen abgehackt, weil es wirklich mit 60000/1001 Felder pro Sekunde angezeigt werden sollte, sodass sich die doppelten Frames nicht zu sehr abzeichnen.

    Egal welchen Weg du wählst, es ist das beste, deinen Inhalt zu berücksichtigen und wie du ihn anzeigen willst. Ist dein Video zu 90% progressive und du hast nie vor, es auf einem TV-Bildschirm anzuzeigen, solltest du einen progressive-Ansatz wählen. Ist es nur halb-progressive, willst du es eventuell so encodieren, als sei alles interlaced.

  • Behandle es wie interlaced. Einige Frames des progressive-Anteils müssen dupliziert werden, was zu Sprüngen führt. Nochmal, Deinterlacing-Filter können die progressive-Anteile leicht verringern.

14.2.4. Fußnoten

  1. Über das Zuschneiden (cropping):  Videodaten auf DVDs werden in einem YUV 4:2:0 genannten Format abgelegt. In einem YUV-Video, werden Helligkeit und Chrominanz separat gespeichert. Da das menschliche Auge ein bisschen weniger empfindlich auf Farbe reagiert als auf Helligkeit, ist in einem YUV 4:2:0 Bild nur ein Chrominanz-Pixel für alle vier Helligkeits-Pixel vorhanden. In einem progressive Bild, besitzt jedes Quadrat von vier luma-Pixeln (zwei auf jeder Seite) ein gemeinsames chroma-Pixel. Du musst progressive YUV 4:2:0 zu geradzahligen Auflösungen zurechtschneiden und geradzahlige Offsets verwenden. Zum Beispiel ist crop=716:380:2:26 OK, crop=716:380:3:26 aber nicht.

    Wenn du es mit interlaced YUV 4:2:0 zu tun hast, ist die Situation ein wenig komplizierter. Anstatt dass immer vier luma-Pixel im Frame sich ein chroma-Pixel teilen, teilen sich immer vier luma-Pixel in jedem Feld ein chroma-Pixel. Wenn Felder zur Formung eines Frames interlaced werden, ist jede Scanzeile ein Pixel hoch. Jetzt liegen anstatt je vier luma-Pixel in einem Quadrat immer zwei Pixel nebeneinander und die anderen zwei Pixel liegen zwei Scanzeilen weiter unten nebeneinander. Die zwei luma-Pixel in der dazwischen liegenden Scanzeile sind vom anderen Feld und teilen sich somit ein anderes chroma-Pixel mit zwei luma-Pixeln zwei Scanzeile entfernt. All diese Konfusion macht es notwendig, vertikale Ausschneide-Abmessungen und Offsets zu haben, die ein Vielfaches von vier sind. Horizontal kann geradzahlig bleiben.

    Für telecined Video empfehle ich, das Zuschneiden nach dem inverse telecining stattfinden zu lassen. Ist das Video einmal progressive, musst du nur noch mit geraden Zahlen zuschneiden. Wenn du wirklich die leichte Beschleunigung haben willst, die zuerst zuzuschneiden möglicherweise bietet, musst du vertikal mit einem Vielfachen von vier zuschneiden, oder der inverse-telecine Filter wird keine korrekten Daten haben.

    Für interlaced (nicht telecined) Video musst du immer mit einem Vielfachen von vier zuschneiden, es sei denn, du verwendest -vf field vor dem Schneiden.

  2. Über Encodier-Parameter und Qualität:  Nur weil ich hier mbd=2 vorschlage, heißt das nicht, dass es woanders benutzt werden soll. Zusammen mit trell ist mbd=2 eine der Optionen von libavcodec, welche die Qualität am deutlichsten heben, und du solltest stets das letzte der beiden anwenden, außer das Abfallen der Encodiergeschwindigkeit ist abschreckend hoch (z.B. Encodierung in Echtzeit). Es gibt eine Menge anderer Optionen für libavcodec, die die Encodierqualität verbessern (und die Encodiergeschwindigkeit verringern), dies liegt aber jenseits des Rahmens dieses Dokuments.

  3. Über die Performance von pullup:  Pullup kann sicher (zusammen mit softskip) auf progressive Video angewandt werden und ist für gewöhnlich eine gute Idee, es sei denn, die Quelle wurde definitiv als vollkommen progressive verifiziert. Der Performaceverlust ist in den meisten Fällen gering. Bei einer Minimalencodierung macht pullup MEncoder 50% langsamer. Das Hinzufügen von Soundverarbeitung und erweiterten lavcopts überschattet diesen Unterschied und drückt den Performanceabfall, der mit dem Verwenden von pullup verbunden war, runter auf 2%.