Brother Johns Projekte: Gordian Knot

Akapumas Gordian-Knot-Personalisierer

Gordian Knot ist veraltet. Deshalb pflege ich diese Anleitung nicht mehr und es kann vorkommen, dass an der einen oder anderen Stelle das Vorgehen nicht mehr exakt so funktioniert. Besonders betrifft das die Encoder-Kommandozeilen.

Akapumas Gordian-Knot-Personalisierer, was für ein Name! Viel zu lang, um nicht sofort eine Abkürzung zu kreieren, was akapuma praktischerweise gleich höchstselbst getan hat: agkp. Was genau es mit diesem Ding auf sich hat, dazu jetzt.

Was ist das?

Agkp ist eine von akapuma entwickelte externe Erweiterung von Gordian Knot mit drei Hauptfunktionen:

Wir werden uns nur mit der Unterstützung für x264 CLI und MKVMerge beschäftigen, denn das sind zweifellos die beiden wichtigsten Funktionen. Gordian Knot selbst verwendet ja nur den x264 VfW-Encoder, der hässlich verbogene Streams erzeugt. Und VirtualDubMods Matroskafähigkeiten sind für heutige Verhältnisse rudimentär.

Agkp ist also dann interessant, wenn wir x264 und den Matroska-Container verwenden wollen. In diesem Fall rate ich sogar ganz ausdrücklich von reinem Gordian Knot ab, eben wegen der vergewaltigten Videostreams des VfW-Encoders.

Installation

Die aktuelle Version von agkp erhalten wir im ersten Posting des Entwicklungsthreads im Gleitz-Forum. Die Installation erfolgt in den VirtualDubMod-Ordner. Dafür muss vorher natürlich VirtualDubMod installiert sein. Wir entpacken das komplette agkp-Archiv in den VDubMod-Ordner. Dort treffen wir folgende Einstellung für alle drei Dateien agkpv.exe, agkpa.exe und agkpAR.exe: Mit einem Rechtsklick auf die Datei und den Menüpunkt Eigenschaften gelangen wir in den Eigenschaftendialog.

Im Register Programm stellen wir sicher, dass Nach Beenden schließen angehakt ist, was unter Windows XP schon von Haus aus so sein sollte.

Die Datei agkp.ini enthält die Pfade zu den benötigten externen Programmen. Die Datei können wir mit jedem Texteditor bearbeiten und dort eintragen, wo agkp mkvmerge.exe und x264.exe finden kann. Diese beiden Pfade sind wichtig und müssen immer angepasst werden. Der Player für Preview ist nur für agkps eigene Vorschaufunktion wichtig und MP4Box ist nur dann nötig, wenn wir trotz agkp den x264-VfW-Encoder verwenden. Dann ist MP4Box dafür zuständig, den verbogenen VfW-Stream in natives MPEG-4 zurückzuverwandeln, so dass das Video ordentlich in Matroska gemuxt werden kann.

Damit können wir Gordian Knot starten und ins Register Program Paths wechseln.

Unter Where is VirtualDubMod.exe located stellen wir mit dem Locate-Button die agkpV.exe ein. Gordian Knot denkt also, dass es ganz normal VDubMod aufruft. Tatsächlich tritt aber agkp in Aktion. Entsprechend einfach ist es, trotz installiertem agkp ein klassisches GK-Encoding durchzuführen. Dazu ändern wir die VDubMod-Einstellung wieder zurück auf die VirtualDubMod.exe.

Als letzter Punkt müssen wir darauf achten, dass der x264 VfW-Encoder installiert ist. Auch wenn wir ihn nicht benutzen, braucht ihn Gordian Knot, um das Skript für VDubMod korrekt erstellen zu können, das agkp dann auswertet. Welche Version des VfW-Encoders, ist egal. Er dient ausschließlich dazu, dass Gordian Knot nicht ins Schleudern gerät. Die x264.exe (der CLI-Encoder) sollte natürlich aktuell sein.

x264-Encoding mit agkp

Gordian Knot können wir fast wie gewohnt benutzen. Als Container stellen wir MKV ein und als Videocodec x264. Anschließend konfigurieren wir wie gewohnt das komplette Encoding, ohne jedoch auf die Codec-Konfiguration zu achten. Agkp hat seine eigenen x264-Profile und berücksichtigt die VfW-Konfiguration nicht.

Ist alles fertig eingestellt und das Encoding gestartet, erscheint das Auswahlfenster von agkp, das sogar die Maus unterstützt. :)

Die Einträge am Anfang betreffen die Filterkonfiguration, mit der wir uns hier nicht beschäftigen. Interessant sind die letzten drei Zeilen.

Damit haben wir die Agkp-Konfiguration beendet und können das Encoding mit einem Klick auf den OK-Button unten in der Mitte starten. Im Fenster der agkpV.exe lässt sich der Fortschritt verfolgen.

Das Encoding läuft nun genauso automatisch ab wie von Gordian Knot gewohnt.

Konfiguration: Die agkpx264.bat

Die Konfiguration von x264 erfolgt über die Datei agkpx264.bat im VirtualDubMod-Ordner. Das ist eine Batchdatei, wie sie mancher vielleicht noch aus guten alten DOS-Zeiten kennt. Da es sich um eine reine Textdatei handelt, können wir sie mit jedem Texteditor bearbeiten. Und genau das tun wir jetzt. Alle folgenden Zeilennummern gelten für die unveränderte agkpx264.bat, die agkp Version 37 mitbringt.

Bevor wir uns auf die Einzelheiten stürzen, hier ein paar grundlegende Dinge, die man über Batchdateien wissen sollte.

Kommentare
Alle Zeilen, die mit REM beginnen, sind Kommentare und werden komplett ignoriert.
Abschnitte
Eine Batch-Datei können wir mit Labels in Abschnitte einteilen. Ein Label steht allein auf einer Zeile und beginnt mit einem Doppelpunkt gefolgt vom Namen des Abschnitts. Als erstes begegnet uns in Zeile 28 :compcheck, das die Konfiguration für den Kompressionstest beinhaltet. Ein Abschnitt beginnt mit seinem Label und endet mit dem nächsten Label oder dem Ende der Datei.
Echo
Der Befehl echo <Text> zeigt <Text> am Bildschirm an. Er führt keine Befehle aus. Ein echo format c: würde also den Text »format c:« anzeigen, aber nicht die Festplatte formatieren.

Die erste interessante Zeile ist Zeile 9.

set subme=7

An dieser Stelle setzen wir den Parameter --subme der x264-Konfiguration zentral für die ganze Datei. Mögliche Werte sind ganze Zahlen zwischen 1 und 7.

Encoder-Abschnitte

Weiter unten sind alle Abschnitte interessant, die mit xname beginnen. Jeder dieser Abschnitte steht für eine x264-Konfiguration, die wir auswählen können. Die folgenden Zeilen enthalten die Standardkonfiguration für ein 2-Pass-Encoding.

52 :xnametwopass
53 ECHO 2-pass
54 rem default
55 echo %2 -p 1 -B %3 -I 300 -i 120 -r 6 --mixed-refs ...
56 %2 -p 1 -B %3 -I 300 -i 120 -r 6 --mixed-refs ...
57 echo %2 -p 2 -B %3 -I 300 -i 120 -r 6 --mixed-refs ...
58 %2 -p 2 -B %3 -I 300 -i 120 -r 6 --mixed-refs ...
59 goto ende
Zeile 52
Der Labelname für eine Codec-Konfiguration muss immer mit :xname beginnen. Was dahinter folgt, ist egal. Es darf lediglich der selbe Name nicht mehrmals in der Batchdatei vorkommen. Erlaubt sind allerdings nicht alle Zeichen. Auf der sicheren Seite sind wir, wenn wir uns auf die normalen Buchstaben des Alphabets von A bis Z beschränken – also keine Umlaute, Zahlen etc.
Zeile 53
Hier steht der Name, wie er als Option im Agkp-Auswahlfenster erscheint. Der Echo-Befehl gibt den Namen außerdem auch beim Encoding am Bildschirm aus.
Zeile 54
Diese Zeile identifiziert die Standardauswahl, die im Agkp-Auswahlfenster automatisch markiert wird. Nur ein einziger xname-Abschnitt darf diese Zeile enthalten.
Zeilen 55, 56
Die beiden Zeilen enthalten die Konfiguration für den 1st Pass. In Zeile 55 wird zuerst mit Echo die Kommandozeile angezeigt. Zeile 56 startet dann das Encoding.
Zeilen 57, 58
Hier steht die Konfiguration für den 2nd Pass, die genauso wie Zeilen 55, 56 funktioniert. Für ein 3-Pass-Encoding würden wir einfach zwei weitere Zeilen für den dritten Durchgang hinzufügen, so wie wir es im vordefinierten xnamethreepass-Abschnitt schon sehen können.
Zeile 59
Das goto ende springt zum Ende der Datei. Ansonsten würden auch alle folgenden Abschnitte ausgeführt, der Film also mehrmals encodiert. Diese Zeile darf in keinem Abschnitt fehlen.

Einfügen eines neuen Abschnitts

Mit dem gerade besprochenen Schema können wir einen neuen Encoder-Abschnitt einfügen, womit uns eine zusätzliche Auswahlmöglichkeit fürs Encoding zur Verfügung steht. Die passende Stelle für die neue Konfiguration ist nach dem letzten xname-Abschnitt.

Vor dem Marker :ende, da wohin der Pfeil zeigt, fügen wir z.B. folgende Zeilen ein.

:xnameencwissen
echo Encwissen
echo %2 -B %3 -r 5 --mixed-refs -t 1 -f 0:0 -b 3 --direct auto --b-pyramid -w --bime -m %subme% -A i4x4,p8x8,p4x4,b8x8 %agkpzones% --no-psnr --progress -p 1 -o NUL %5
%2 -B %3 -r 5 --mixed-refs -t 1 -f 0:0 -b 3 --direct auto --b-pyramid -w --bime -m %subme% -A i4x4,p8x8,p4x4,b8x8 %agkpzones% --no-psnr --progress -p 1 -o NUL %5
echo %2 -B %3 -r 5 --mixed-refs -t 1 -f 0:0 -b 3 --direct auto --b-pyramid -w --bime -m %subme% -A i4x4,p8x8,p4x4,b8x8 %agkpzones% --no-psnr --progress -p 3 -o %4 %5
%2 -B %3 -r 5 --mixed-refs -t 1 -f 0:0 -b 3 --direct auto --b-pyramid -w --bime -m %subme% -A i4x4,p8x8,p4x4,b8x8 %agkpzones% --no-psnr --progress -p 3 -o %4 %5
goto ende

Die x264-Konfiguration können wir natürlich ganz nach Bedarf anpassen. Mehr dazu im x264-Konfig-Kapitel des Encodingwissens. Wichtig sind zunächst die fett markierten Bestandteile.

%2
Platzhalter für den Pfad zur x264.exe, wie wir ihn in der Datei agkp.ini konfiguriert haben.
%3
Diese Variable ersetzt agkp mit der von Gordian Knot errechneten Bitrate.
%4
Steht für die Zieldatei, also das encodierte Video ohne Ton usw.
%5
Steht für die Quelldatei, was dem AviSynth-Skript entspricht.
-m %subme%
Damit die Einstellung, die wir ganz oben in der Zeile set subme getroffen haben, berücksichtigt wird, muss diese Option in der Kommandozeile auftauchen.
%agkpzones%
Agkp erkennt automatisch, ob wir in Gordian Knot separat encodierte Credits gewählt haben. Um diese Einstellung auch beim Encoding zu verwenden, muss %agkpzones% in der Kommandozeile stehen.

Im Auswahlfenster von agkp haben wir nun eine zusätzliche Option namens Encwissen, mit der wir die neue Konfiguration verwenden können.

Xvid-Encoding mit agkp

Ehrlich gesagt wundert es mich ein bisschen, dass noch niemand auf die dumme Idee gekommen ist, agkp auszutricksen und anstelle von x264 den Xvid-Kommandozeilenencoder zu verwenden. Das funktioniert nämlich prächtig. Einzige Einschränkung: Zonen (und damit Credits-Encoding) können wir nur manuell konfigurieren, nicht in Gordian Knot, da Xvid eine andere Syntax benutzt als x264.

Der Xvid-CLI-Encoder heißt XvidEncraw und wird im Xvid-CLI-Kapitel des Encodingwissens näher besprochen. Der Ort für die Xvid-Konfiguration ist die bekannte Datei agkpx264.bat im VirtualDubMod-Ordner. Dort fügen wir wie oben einen neuen Encoder-Abschnitt hinzu, diesmal allerdings für XvidEncraw. Den fett markierten Pfad zur xvid_encraw.exe müssen wir anpassen, je nachdem, wo wir die Datei abgelegt haben.

:xnamexvid
echo Xvid ;-)
echo "C:\Encoder\xvid_encraw.exe" -i %5 -type 2 -pass1 -progress 50 -bquant_ratio 162 -bquant_offset 0 -bvhq -qtype 1 -qpel -vhqmode 2 -zones 0,w,1,O
"C:\Encoder\xvid_encraw.exe" -i %5 -type 2 -pass1 -progress 50 -bquant_ratio 162 -bquant_offset 0 -bvhq -qtype 1 -qpel -vhqmode 2 -zones 0,w,1,O
echo "C:\Encoder\xvid_encraw.exe" -i %5 -type 2 -mkv %4 -pass2 -bitrate %3 -progress 50 -overhead 0 -bquant_ratio 162 -bquant_offset 0 -bvhq -qtype 1 -qpel -vhqmode 2 -zones 0,w,1,O
"C:\Encoder\xvid_encraw.exe" -i %5 -type 2 -mkv %4 -pass2 -bitrate %3 -progress 50 -overhead 0 -bquant_ratio 162 -bquant_offset 0 -bvhq -qtype 1 -qpel -vhqmode 2 -zones 0,w,1,O
goto ende

Die Konfiguration ist in etwa die, wie sie in der Xvid-Konfiguration erklärt ist. Natürlich können wir sie nach Belieben anpassen.

Mehr Veränderungen sind an der agkpx264.bat nicht nötig. Wir können die Datei speichern und Gordian Knot laden. Dort tun wir so, als hätten wir es mit einem x264-Encoding zu tun. Denn prinzipiell haben wir gerade ein neues x264-Profil für agkp erstellt. Nur, dass dieses Profil eben gar nicht den x264-Encoder verwendet. Das heißt, wir wählen natürlich MKV als Container und wie vorhin x264 als Encoder, ohne allerdings an dessen Konfiguration Zeit zu verschwenden. Xvid kommt erst später ins Spiel. Wie auch für Xvid VfW sollte die Option Calculate Frame-Overhead im Bitrate-Register deaktiviert sein.

Der Kompressionstest wird trotz Trickserei weiterhin mit x264 durchgeführt, liefert also ein nutzloses Ergebnis. Um trotzdem auf den Test nicht verzichten zu müssen, können wir erst wie gewohnt XviD als Codec wählen, den Test durchführen und dann auf x264 mit agkp umschalten.

Haben wir alles fertig konfiguriert und das Encoding gestartet, erscheint das nun schon bekannte Agkp-Auswahlfenster.

Die Zeile x264-Encoder hat einen neuen Eintrag bekommen, hinter dem sich unsere Xvid-Konfiguration verbirgt. Natürlich können wir uns an dieser Stelle noch anders entscheiden und auf eines der x264-Profile umstellen. Für mkvmerge AR gilt das gleiche wie weiter oben im x264-Abschnitt.

Dann fehlt nur noch ein Klick auf OK und ein paar Stunden Geduld. Und dann soll noch einer sagen, Gordian Knot käme mit aktueller Encodingtechnologie nicht zurecht! :-)

Anamorphes Encoding mit agkp

Anamorphe Encodings erfordern schon mit Gordian Knot an sich ein paar Tricks. Und auch agkp bietet ausschließlich die Möglichkeit, das AR-Flag im Matroska-Container zu setzen. Da sowohl x264.exe als auch XvidEncraw das Setzen des MPEG-4-AR-Flags unterstützen, können wir die fehlende Funktion über die agkpx264.bat nachrüsten.

Dafür öffnen wir die agkpx264.bat und definieren nach der subme-Zeile (Zeile 9 in der unveränderten Datei) eine neue Variable.

set /p pixelar=[PAR eingeben]

Beim Encodingstart werden wir nun aufgefordert, das richtige PAR anzugeben (dürfte unter den alten Windows-9x-Versionen nicht funktionieren). Dieses können wir anschließend über %pixelar% ansprechen und an den Encoder weitergeben, damit es ins MPEG-4-AR-Flag geschrieben wird. Wir verwenden beim Eintippen immer die Form x:y, also würde z.B. 16:11 eine 16:9-PAL-DVD bezeichnen. Welches für den jeweiligen Film der richtige Wert ist, können wir der inzwischen sicher schon wohlbekannten PAR-Tabelle entnehmen. Für ein klassisches nicht-anamorphes Encoding setzen wir die Variable auf 1:1.

Nun müssen wir die Encoder-Abschnitte anpassen. Für x264 fügen wir jeder Kommandozeile die Option --sar %pixelar% (doppelter Bindestrich!) hinzu, z.B.:

:xnameencwissen
echo Encwissen
echo %2 -B %3 --sar %pixelar% -r 5 --mixed-refs ...
%2 -B %3 --sar %pixelar% -r 5 --mixed-refs ...
echo %2 -B %3 --sar %pixelar% -r 5 --mixed-refs ...
%2 -B %3 --sar %pixelar% -r 5 --mixed-refs ...
goto ende

Für XvidEncraw heißt die Option -par %pixelar% (einfacher Bindestrich!):

:xnamexvid
echo Xvid ;-)
echo "C:\Encoder\xvid_encraw.exe" -i %5 -type 2 -pass1 -par %pixelar% -progress 50 ...
"C:\Encoder\xvid_encraw.exe" -i %5 -type 2 -pass1 -par %pixelar% -progress 50 ...
echo "C:\Encoder\xvid_encraw.exe"  -i %5 -type 2 -mkv %4 -pass2 -par %pixelar% -bitrate %3 ...
"C:\Encoder\xvid_encraw.exe"  -i %5 -type 2 -mkv %4 -pass2 -par %pixelar% -bitrate %3 ...
goto ende

Schließlich löschen wir ganz am Ende der Datei die PAR-Variable, indem wir diese neue Zeile einfügen:

set pixelar=

Damit sind wir bereit zum Encoding. Gordian Knot konfigurieren wir wie gewohnt. Im agkp-Auswahlfenster setzen wir zusätzlich das Seitenverhältnis im Matroska-Container. Dazu klicken wir in der Zeile mkvmerge AR auf Eingabe, setzen den passenden Wert ein (mit dem Punkt als Dezimaltrenner, nicht dem Komma) und bestätigen mit einem Druck auf die Enter-Taste.

mkvmerge AR: [2.370_ ] [4/3] [1.33]

Achtung! Matroska arbeitet nicht mit dem PAR, sondern mit dem DAR! Der richtige Wert ist der gleiche, den wir in MKVMerge GUI unter Aspect Ratio eintragen müssten. Details dazu stehen im Matroska-Muxing-Kapitel des Encodingwissens.

Zum Schluss startet ein Klick auf OK das Encoding. Das Ergebnis ist trotz des VfW-zentrierten Gordian Knot eine anständig gemuxte Matroska-Datei mit beiden AR-Flags und einem nativen MPEG-4-Videostream. An der Stelle haben wir uns dann wieder einmal einen Kaffee verdient. :)