MPEG nach CDXL konvertieren (Version 2.0)

Viele Wege führen bekanntlich nach Rom. Man kann einen schnellen weg, aber nicht ganz so schönen Weg nehmen oder man wählt einen etwas längeren oder beschwerlicheren Weg, der dafür aber schöner ist.
Und genau das gleiche gilt für die Umwandlung von MPEG-Filmen in das CDXL-Format.
Meinen ersten Weg von MPEG nach CDXL habe ich bereits in der NoCover beschrieben. Mittlerweile ist es mir jedoch gelungen, in kürzerer Zeit ein besseres Ergebnis zu erzielen. Deshalb hier nun mein Bericht.
Benötigte Software
Folgende Software kommt zum Einsatz:
1.) MPEG2decoderPRO (MPEG-Film in einzelne Frames zerlegen)
2.) GfxCon (Umwandeln der JPEG bzw. PPM Frames in IFF Bilder)
3.) PPaint 6.4 (Frames in Animation / AnimBrush zusammenführen)
4.) MainActor V1.55 (CDXL-taugliche Frames erstellen)
5.) Mpeg2Animv1.4e (Audio-File erstellen)
6.) xltollkitgui (CDXL-Film erstellen)

Ausserdem folgente Utilities:
foreach
case
forrest
1.) MPEG-Film in einzelne Frames zerlegen:
Dies geht völlig problemlos mit dem MPEG2-Decoder. Dieses Programm hat den Vorteil, dass die Frames nicht nur im "PPM"-Format sondern alternativ auch im"JPEG"-Format gespeichert werden können. Somit kann ich ca. 10 mal mehr Frames speichern, bevor meine Festplatte voll ist - bzw. ist wesentlich weniger Platz notwendig, um alle Frames zu sichern.
Wichtig: Bei der Vergabe des Filenames darf auf keinen Fall der Punkt vergessen werden!!! Im Guide des MPEG2-Decoders steht unter "Usage":
SAVE -- a file(s) to save the frames to, for example: "kissing%04d".....
Der Anhang %04d steht für die Nummer des Frames. In diesem Beispiel würden also die Bilder
kissing1
kissing2
kissing3
...usw entstehen. Dies führt jedoch später zu Problemen bei PPaint. Also muss es so eingegeben werden "kissing.%04d". Dann lauten die Filenamen der Bilder
kissing.1
kissing.2
kissing.3
...usw.
1.1.) Halbierung der Frame-Rate
Grundsätzlich hängt die maximale Frame-Rate u.a. von der Geschwindigkeit der Festplatte / des CD-Rom-Laufwerks ab. Ich nehme an, dass alle mir bisher untergekommenen MPEG`s mit 25 Fps (Frames per second) laufen. Meine Hardware schafft jedoch nur 12,5 Fps im CDXL-Format. Die Qualität halte ich durchaus für akzeptabel.
Da also nur jeder zweite Frame benötigt wird, lösche ich sofort wieder jeden zweiten Frame.
delete #?1.jpg
delete #?3.jpg
delete #?5.jpg
delete #?7.jpg
delete #?9.jpg
Es scheint kein Programm zu geben, dass bereits beim Entpacken des MPEG-Filmes nur jeden zweiten Frame abspeichert, also immer einen Frame überspringt.
2.) Umwandeln der JPEG bzw. PPM Frames in IFF Bilder
Für diesen Zweck hat sich das Programm GfxCon als das mit Abstand am besten geeignete Programm herausgestellt.
Begründung: Es kann 24bit-Bilder in 256 Farben-Bilder umwandeln wobei die ersten 16 Farben unbenutzt bleiben.
Natürlich kann es noch viel mehr, aber diese Einstellung halte ich für optimal für CDXL-Filme mit Hintergrund Bild. Somit bekommt nämlich jeder Frame seine optimal berechneten 240 Farben. Dies bedeutet natürlich wesentlich weniger Kompromisse als bei der Verwendung einer Standart-Palette für alle Frames.
Da ich bereits vorher jeden nicht benötigten Frame gelöscht habe spare ich mir natürlich die Umrechnung nicht benötigter Frames - wie es z.B im Script "Mpeg2anim" von Lorence Lombardo durchgeführt wird.
Gleichzeitig mit der Farbreduzierung findet eine Grössen-Anpassung statt.
Beispiel-Kommandozeile:

gfxcon kissing.1.jpg FORMAT ILBM CLUT OFFSET 16 BOXFIT 180 180
2.1) Automatik
Durch ein kleines Skript kann der MPEG-Film in seine Frames zerlegt, die Frame-Rate halbiert und die Einzelbilder nach IFF konvertiert werden - und zwar vollautomatisch. Das Skript sieht dann so aus:
cd hd1:Grafik/MPEG-Tools/MPEG2decPRO
MPEG2decoderPRO RAM:Film.MPEG SAVE=HD1:Daten/T/Film/Frame.%04d SAVEFORMAT=jpg
cd hd1:Daten/T/Film
delete #?1.jpg
delete #?3.jpg
delete #?5.jpg
delete #?7.jpg
delete #?9.jpg
STACK 20000
foreach #?.jpg gfxcon2 & FORMAT ILBM DITHER CLUT OFFSET 16 BOXFIT 180 180
hd0:Utilities/Case/case -rsiff
delete #?.jpg
Endcli
Das Utility "foreach" sorgt dafür, das jedes im aktuellen Verzeichnis gefundene .JPG-File von "gfxcon" umgewandelt wird.
Das Utility "case" entfernt den Suffix .iff, der von "gfxcon" jedem umgewandelten Bild angehängt wird.
3.) Frames in Animation / AnimBrush zusammenführen
Dies ist aus mehreren Gründen notwendig. Zum einen erwartet das xltoolkit fortlaufende Frame-Nummern und zum anderen müssen die ersten 16 Farben die Werte des späteren Hintergrundbildes erhalten.
Mit PPaint6.4 wird u.a. das ARexx-Script "FramesToAnim.pprx" mitgeliefert. Dies ist jedoch so nicht einsetzbar, da hier durchnummerierte Frames erwartet werden. Also:
Frame.0
Frame.1
Frame.2
Wird Frame.3 nicht gefunden, endet das Script.
Frame0
Frame1
Frame2
usw. geht gar nicht (siehe oben)
Nun habe ich ja jeden zweiten Frame gelöscht. Dies bedeutet, dass nach Frame.0 der nächste Frame.1 vom orginal ARexx-Script erwartet, jedoch nicht gefunden wird. Deshalb nahm ich folgende Änderung vor:
In der 13. Zeile von unten steht:
fnum = fnum + 1
dies änderte ich in
fnum = fnum + 2
Nun funktioniert die vorhandene Struktur:
Frame.0
Frame.2
Frame.4
Wenn die Animation fertiggestellt ist, schneide ich den entsprechenden (animierten) Pinsel aus. Hierbei bietet sich sogar die Möglichkeit kleine korrekturen vorzunehmen. Zum Beispiel können evtl. vorhandene 16:9 Format Balken am oberen und unteren Rand ausgespart werden (wenn gewünscht, können sie im Hintergrundbild simuliert werden). Oder falls manchmal die Erste Zeile erst ab der Mitte beginnt, die erste Hälfte also schwarz ist, kann diese einfach komplett weggeschnitten werden.
3.1) Hintergrundbild-Palette einbinden
Ich halte es für ausreichend, ein 16-Farben Bild als Hintergrund zu verwenden. Die verteilung der Farbpalette ist (zum Glück) sehr einfach. In PPaint muss nur das Bild geladen werden. Dann den Anim-Pinsel laden. Im Menu "Pinsel" findet man unter dem Punkt "Farbe" den Unterpunt "Bildpalette kopieren". PPaint übernimmt nun die 16 Farben des Bildes in jeden Frame des Anim-Pinsels. Natürlich werden dabei nur die (unbenutzten) ersten 16 Farben des Pinsels geändert. Die verwendeten 240 hinteren Farben bleiben erhalten. Nach dem Speichern des Anim-Pinsels endet der Einsatz von PPaint.
4.) CDXL-taugliche Frames erstellen
Mit dem Programm MainActor kann der AnimBrush in seine einzelnen Frames zerlegt werden. Diese werden natürlich fortlaufend durchnummeriert, was für das Erstellen des CDXL-Filmes unbedingt notwendig ist.
5.) Audio-File erstellen
Mit dem Programm Mpeg2Animv1.4e kann der Ton eines Mpeg-Filmes als mp3-Datei gespeichert werden. Das Erstellen der Frames und die weitere Umwandlung breche ich ab, da dieses Programm leider keine 256-Farben Umrechnung anbietet.
Das gewonnene mp3-File wandele ich mit dem Programm "Forrest" in eine IFF-Sound-Datei um - fertig.
6.) CDXL-Film erstellen
Nun kommt das xltoolkitgui zum Einsatz. Das Erstellen eines Filmes ist damit sehr leicht. Aufpassen muss man lediglich bei der Berechnung der Audio bytes pro Bild. Dies funktioniert leider gar nicht. Eingegeben werden muss hier der aufgerundete Wert aus Länge der Ton-Datei dividiert durch die Anzahl der Frames.
7.) Abschluss-'Arbeiten'
Da ich am Ende einfach auf ein Icon klicken möchte, und der Film beginnt erstelle ich ein kleines Script, das zum Beispiel so aussieht:
cdgsxl CannonFodder.CDXL XLSPEED 184 MULTIPAL BLIT BACK CannonFodder.back X 0 Y 62 LOOP -1 DOSXL LMBAB
EndCLI >NIL:
Mir ist leider völlig unklar, warum der Wert XLSPEED im Script nur halb so gross sein darf, wie im xltoolkit angezeigt wird. Aber es ist halt so.
Cedeixeling für Fortgeschrittene:
Wie bereits erwähnt kann ein Hintergrundbild verwendet werden. In der Regel sieht das dann wohl so aus:
Durch die Konvertierung mit Hilfe von PPaint hat man jedoch die Möglichkeit kleine, oder grössere Veränderungen am Film selbst vorzunehmen. Eine Variante ist zum Beispiel, das Hintergrundbild in den Film einzubeziehen. Dadurch wird der Fullscreen-Effekt noch verstärkt.
Wie das geht dürfte eigentlich klar sein - man muss es einfach nur tun :-)
- Hintergrundbild erstellen
- entsprechenden Pinsel ausschneiden
- in jeden Frame des Filmes setzen
Bleibt mir nur noch, Euch viel Spass beim Konvertieren und viel Erfolg bei der Suche nach "Material" im WWW zu wünschen.
Thomas Nawroth