In der folgenden Anleitung soll darauf eingegangen werden, wie auch MPEG2-Dateien mit VirtualDub geladen und verarbeitet werden können, weil dies nicht standardmäßig vom Programm unterstützt wird. Das Öffnen und Bearbeiten von MPEG2-Dateien mit VirtualDub ist für all diejenigen interessant, die z.B. DVB-S, -C oder auch schon -T Empfang haben. Des Weiteren muss auch bei der Verwendung eines MPEG2-Hardware (z.B. WinTV PVR) oder Software-Encoders (z.B. PowerVCR, WinDVR) dieser Weg gegangen werden.
Vorbereitungen
Es werden folgende Programme benötigt:
Wichtig! Die PlugIns für AviSynth v2.0 funktionieren nicht mehr direkt mit der 2.5er Version. Damit diese dennoch verwendbar sind muss vorher die "LoadPluginEx.dll" geladen werden. Diese befindet sich im WarpSharp-Package.
Zuerst muss AviSynth (AVI SYNTHesizer) installiert werden. Dieses Programm
ist ein so genannter Frameserver, d.h. es stellt anderen Programmen, wie z.B.
VirtualDub, die Frames eines beliebigen auf der Festplatte befindlichen Videostreams
zur Verfügung, selbst wenn das Quellformat vom eigentlichen Programm nicht
unterstützt wird. Die Befehlseingabe geschieht bei AviSynth über einen
Text, ein so genanntes Skript, welches mit Hilfe von NotePad oder dem Editor
geschrieben werden kann. Es beinhaltet aber noch viel mehr, denn mit Hilfe von
Plugins, Filtern etc. kann das Videomaterial auch komplett mit AviSynth bearbeitet
werden, so dass VirtualDub(Mod) nur die Kodierung des fertigen Films übernimmt.
Die Vorteile einer kompletten Bearbeitung mit AviSynth liegen in einer schnelleren
Bearbeitung im Vergleich zu VirtualDub. Das ist einerseits auf die bessere Optimierung
der Filter und andererseits auf die Verwendung des YUY2- bzw. YV12-Farbraums
zurückzuführen. VirtualDub hingegen konvertiert das Bildmaterial immer
nach RGB-32 falls Filter zum Einsatz kommen.
Vor allem der direkte Einsatz von YV12 führt zu einem spürbaren Geschwindigkeitsgewinn, weil das Ausgangsmaterial (MPEG2) im Normalfall immer in diesem Format vorliegt und somit ein Wechsel des Farbraums bei der Bearbeitung entfällt. Wobei es hier auch Ausnahmen gibt, die später noch erwähnt werden. Des Weiteren entfällt auch die Konvertierung von YUY2->YV12 bei der Kodierung, denn MPEG4-Codecs (z.B. DivX/XviD) arbeiten ausschließlich mit YV12. Außer auf die Geschwindigkeit wirkt sich die direkte Verwendung des YV12-Farbraums auch positiv auf die Qualität aus, denn die Konvertierung zwischen YUY2 und YV12 bzw. andersherum geschieht nicht verlustlos. Deshalb sollte so wenig wie möglich der Farbraum gewechselt werden.
In dieser Anleitung sollen aber nur die grundlegenden Schritte, die zum öffnen
der Datei mit VirtualDub nötig sind behandelt werden. Wer sich weiter mit
AviSynth beschäftigen will, der findet eine deutsche Anleitung im Programmordner
oder kann auch jederzeit im FlaskMPEG-Forum
nachfragen.
Jetzt noch DGMPEGDec, MPASource und evt. PVAStrumento in beliebige
Verzeichnisse entpacken. Um das spätere Arbeiten zu erleichtern legt man für AviSynth-Plugins, wie z.B. DGDecode.dll und MPASource25.dll, am besten ein eigenes Verzeichnis an und kopiert diese dorthin. Den Pfad für die DLLs allerdings merken, der wird
später noch benötigt ;-)
Anleitung
Der erste Schritt braucht nur von Besitzern einer DVB-Karte durchgeführt zu werden. Die hier aufgezeichneten Daten liegen im PVA-Format vor, weil es kein MPEG2 Standardformat ist muss es deshalb mit PVAStrumento erst zu einem gemacht werden.
Dazu einfach PVAStrumento starten, die entsprechende Datei auswählen und mit "make ps" den Vorgang starten.
Danach erscheint das folgendes Fenster:
Hier wird nur der Name für die auszugebende Datei ausgewählt,
alle anderen Optionen sind im Moment nicht relevant. Jetzt "start"
drücken und schon beginnt die Umwandlung. |
|||
Hier fängt die eigentliche Arbeit für alle anderen
an. Zuerst wird mit DGIndex die jeweilige MPEG2-Datei geöffnet, dass
geschieht mit "File"
-> "Open" oder F2.
An den Standard-Einstellungen des Programms sind nur kleinere Änderungen nötig. Falls die Datei nicht schon im vorherigen Schritt in eine separate Bild- und Tonspur zerlegt worde, kann das hier nachgeholt werden. Denn das ist für die weitere Verarbeitung wichtig. Unter "Audio"->"Output Method"->"Demux Tracks" und unter "Track
Number" die Option "Track
1" aktivieren. Was die iDCT-Algorithmen angeht, so ist "Simple MMX" der beste Kompromiss aus Qualität und Geschwindigkeit. |
|||
Jetzt muss für AviSynth, mit dem Editor oder NotePad, ein entsprechendes Skript geschrieben werden, wie es unten dargestellt ist.
Sämtliche Pfadangaben müssen natürlich an das eigene System
angepasst werden. ;-)
mpasource übernimmt das Einlesen der Audiodatei. Diese Befehlszeile wird wiederum einer Variablen, nämlich audio, zugeordnet. Die Option normalize bringt dabei den Ton automatisch auf die maximale Lautstärke, wenn das nicht geschehen soll einfach normalize=false eintragen. Bei mehreren MPA-Dateien gilt das selbe Schema wie oben, also:
DelayAudio beseitigt die Verschiebung
zwischen der Video- und Audiospur, damit diese wieder synchron zueinander
sind. Hier wird die oben erwähnte Zeitangabe der MPA-Datei benötigt.
In diesem Beispiel sind es 182ms, d.h. 0.182s, um die der Ton verzögert
wird. Jetzt kann das Skript ersteinmal gespeichert werden. Dabei ist darauf zu achten, dass als Dateityp "Alle Dateien" ausgewählt und als Dateierweiterung "avs" eingegeben wird, also z.B. "der_weltraum.avs". Diese Datei lässt sich jetzt mit VirtualDub öffnen und dort weiterverarbeiten. Achtung! Da beim ersten öffnen die gesamte Audio-Datei gescannt wird, dauert es mit normalize=false ~20 Sekunden und mit normalize=true ~100 Sekunden bei einer Stunde Film. Die aktuelle Version von mpasource legt im Verzeichnis des Audiostreams eine Indexdatei mit der Endung *.d2a an, sodass beim nächsten öffnen der Datei kein erneutes scannen notwendig ist. Falls es sich um einen werbefreien Film etc. handelt ist das Skript im
Prinzip schon fertig, denn das korrekte Setzen des Anfangs- bzw. Endpunkts
des Films lässt sich auch mit VirtualDub erledigen. Dort können
auch beliebige Filter eingesetzt werden. |
|||
Erweiterte Funktionalität Wie Anfangs bereits erwähnt bietet eine komplette Bearbeitung in AviSynth deutliche Geschwindigkeitsvorteile. Deshalb werden an dieser Stelle noch zwei, drei häufig gebrauchte Grundfunktionen erklärt. Handelt es sich um einen Film z.B. im 16:9 Format empfiehlt es sich die Ränder wegzuschneiden, das wird mit der Funktion crop erledigt. Es gilt dabei folgender Syntax: crop(links, oben, Ausgabebreite, Ausgabehöhe) oder crop(links, oben, -rechts, -unten). Es gibt allerdings noch ein paar Besonderheiten, die am besten an einem Beispiel zu sehen sind (Quellmaterial 720x576 Pixel):
Das gleiche gilt natürlich für die Bildbreite. Am besten die Ränder mit VirtualDub vorher "ausmessen", das geht am einfachsten. Da bei MPEG2-Aufnahmen, egal aus welcher Quelle sie stammen, eine Änderung
der Bildgröße unumgänglich ist, um diese korrekt auf dem
PC darzustellen, wird ein Resize-Filter benötigt. Das liegt daran,
dass der PAR (Pixel Aspect Ratio) ein anderer ist (PC 1:1, DVB z.B. 128:117).
BilinearResize sollte man nur dann benutzen, wenn man das Videomaterial
sehr stark komprimiert bzw. das Quellmaterial stark verrauscht ist. Genaueres
zur Konfiguration der Filter findet sich in der AviSynth-Anleitung. Im folgenden müssen jedoch zwei Fälle unterschieden werden:
Noch eine Anmerkung zu den folgenden Beispielen. Im Normalfall wird das Bild nur einmal beschnitten und zwar vor dem Resizing. Das erfordert jedoch eine etwas aufwändigere Berechnung, damit der PAR zum Schluss noch korrekt ist. Ein Tool das die Berechnungen alle automatisch macht gibt's von incredible im Doom9-Forum. zu 1.) Wie schon in der Anleitung zur analogen Aufnahme erwähnt besteht hier das Problem darin, dass je nach verbauten Chipsatz und Treiber der PAR nicht korrekt sein muss. Karten mit Philips-Chipsatz (SAA7134) erzeugen z.B. bei einer Auflösung von 704x576 einen korrekten PAR. Diese sollte auch unbedingt verwendet werden, um etwaige Korrekturen zu vermeiden und dient deshalb als Grundlage für die weiteren Berechnungen. An dieser Stelle nochmal der Hinweis: Wer genau nachprüfen will, ob seine Karte den richtigen PAR verwendet, sollte im Capture Guide von doom9.org unter Punkt 10 die entsprechende Anleitung durchlesen.
zu 2.) Bei einer DVB-Aufnahme hat man zum Glück keine Probleme den richtigen PAR bei der Aufzeichnung zu erhalten. Man muss nur beim abschließenden Resizing aufpassen. Die nachfolgenden Beispiele gelten für eine Aufnahmeauflösung von 720x576 Pixeln.
Im Gegensatz zum croppen kann man mit der Funktion AddBorders schwarze Ränder hinzufügen und so die Bildgröße auf ein vielfaches von 16 bringen. Hier gilt folgender Syntax: AddBorders(links, oben, rechts, unten). Dabei wird an den entsprechenden Bildseiten ein schwarzer Rand hinzugefügt.
Im Normalfall sollte man allerdings besser croppen, da an den "harten" Übergängen zwischen Bild und Balken, je nach Stärke der Kompression, unschöne Artefakte im Bild auftreten können. Enthält das Material mehrere Werbeszenen, so können diese wesentlich bequemer mit AviSynth herausgeschnitten werden. Deshalb die AVS-Datei mit VirtualDub öffnen und die entsprechenden Anfangs- bzw. Endbilder des jeweiligen Abschnitts notieren. Zum schneiden wird der Befehl trim verwendet. Der Syntax lautet: trim(Anfangsbild, Endbild). Wie schon erwähnt werden auch hier die verschieden Teilstücke durch "+" aneinandergehängt. Somit erhält VirtualDub den komplett geschnittenen Film.
Zum Schluss noch zwei komplette Beispielskripte:
Skript 2 mit mehreren Quelldateien und unterschiedlichen Delaywerten der einzelnen Audiostreams.
Wichtig! Sollen in VirtualDubMod keine Filter benutzt werden, sondern lediglich die Kompression erfolgen, so ist unbedingt unter "Video" die Option "Fast recompress" auszuwählen. Denn nur so wird der Datenstrom direkt im YUY2- oder YV12-Format zum Videokompressor weitergeleitet. Wird hingegen "Full processing mode" aktiviert ist fast der ganze Geschwindigkeitsvorteil von AviSynth dahin, weil VirtualDub erst eine Konvertierung nach RGB-32 vornimmt, was wiederum Zeit kostet. Zum Schluß noch ein paar Bemerkungen. Die hier beschriebenen Funktionen von AviSynth sind nur ein kleiner Einblick in die Vielfalt der Anwendungsmöglichkeiten. Jeder der sich näher damit befassen möchte sollte auf jeden Fall die Original-Anleitung lesen. Weitere Infos und Plugins gibt's natürlich in Hülle und Fülle im Internet, hier ein paar Links:
So, das war's erstmal. Fragen oder Verbesserungsvorschläge einfach mailen bzw. im Forum bei Flaskmpeg.info posten. Letzte Änderung: 30.12.2005 |
|||