(to the English Version...)

Ein Weg zur Erstellung von SVCDs
mit einem Startmenu

Version 2.0

Manfred Schmidt-Voigt, Hamburg 2002

Es gibt sicherlich viele Wege die nach Rom führen und auch ebenso viele Wege, die zu einer mehr oder weniger perfekten Super Video CD (SVCD) führen. Viele Leute habe schon diverse Programme und Scripte entwickelt, um dies immer beliebtere Format nutzbar zu machen. Es gibt auch eine ganze Anzahl von kommerziellen Programmen (Nero, ...) oder auch Freeware/OpenSource (VCDImagerEasy, ...), die versuchen dieses Problem über ein ausgefeiltes GUI vor dem Anwender zu verbergen.

Um jedoch die vielen aufgenommene Filme aus dem hervorragenden VDR (Klaus Schmidinger u.a.) halbwegs automatisch und ohne viele Eingriffe von außen auf CD zu brennen bedarf es einer ganzen Anzahl von Einzelschritten, die schon gut durch Programme oder Scripten (Perl, Shell, ...) abgedeckt sind. Wenn man dann allerdings noch zusätzliche Wünsche hat oder nicht immer im Sinne des jeweiligen Programmierers von den Kodeschnipzeln Gebrauch machen will gibt es immer wieder Brüche im Ablauf, welche dann durch eigenes Programmieren und Scripting ausgewetzt werden müssen.

Vor diesem Problem stand ich, und wie man anhand der immer wieder gestellten Fragen in der VDR Maillist sehen kann, andere wohl auch. Um nun nicht immer nur von anderen zu profitieren und nichts selbst beizutragen, habe ich mich mal dieses Problems angenommen und einen kompletten Weg für mich entwickelt, den ich hier vorstellen möchte und anhand der von mir geschriebenen Scripten gerne mit anderen teile.

Systemlandschaft:

Mein VDR besteht aus:

ASUS A7VI-VM 800MHz Duron und 128MB Ram
10GByte für Linux (z.Z. Suse 8.0) (/)
30GByte für SVCD-Images (/mpeg)
120GByte XFS (/video)
1xDVB-S V1.3 (Galaxy)

Mein Brenner ist in meiner W2k/Linux(Debian Woody)-Workstation (750MHz Athlon), wo noch mehr GBytes vorhanden sind.

Netzwerk ist 100Mbit

Anforderungen an die Automatisierung

Grundsätzlich sollte es also möglich sein die Umwandlung vom VDR Format ins SVCD Format und das anschließende Zusammenstellen und Brennen der Videos auf CD zwischen diesen beiden Systemen aufzuteilen. Hierbei ist zu beachten, daß die zeit- und rechenaufwändigen Schritte an dem System gemacht werden sollten, welches nicht dauernd von den anderen Familienmitgliedern für allerlei Interaktives mit häufigerem Reboot und soweiter benutzt wird. Der langwierigste Schritt ist immer die Umrechnung vom VDR Format ins SVCD Format mit anschließendem Erstellen der SVCD-Images. Dies lasse ich also auf dem VDR System im Hintergrund abarbeiten. Das anschließende Brennen mache ich dann auf dem W2k/Linux System unter Linux(sofern mich meine Leute lassen). Hier ist auch der Brenner angeschlossen.

Meine Wünsche an eine SVCD

Vielen Leuten auf der VDR Mailinglist reicht es, die VDR Files nur von dem Werbemüll zu bereinigen um dann alles mit der höchstmöglichen Packungsdichte auf die SVCD oder ein anderes Format (DVD od. Divx) zu bringen. Dabei wird dann die CD vollgeschrieben und die nächste angefangen ohne auf Scenenwechsel oder Dialoge zu achten. Das mag gut sein, wenn man hinterher die Files wieder zurückkopiert und wieder als Ganzes anschaut. Die ersten Schnittversionen von Klaus ließen dann auch immer nur feste Filegrößen zu. Ich habe Ihn damals gefragt ob man nicht auch die Schnittgrenzen als Filegrenzen nehmen könnte und er hat dann diese Möglichkeit eingebaut (SplitEditedFiles = 1).

Meine SVCDs sollen also an logischen (Szene) Grenzen enden. Außerdem möchte ich meine SVCDs möglichst auch in einem Standart DVD Player laufen lassen. Also wird die SVCD auch gewechselt (übrigens ein guter Zeitpunkt um neues Bier zu holen). Und da ich nun schon nicht mehr der junge Springer bin würde ich schon mal den ersten Halbsatz vergessen, wenn der Schnitt nicht an einer sinnvollen Stelle gemacht wird.

Also, der Wunsch besteht hier nach einer möglichst Standardkonformen SVCD. Aber man kann ja nicht alles haben. Da ich tosvcd (von Werner Schweer) benutze zum Umwandeln von VDR Format ins SVCD Format mit allen dahinter geschalteten tools (MJPEG, ...) muß ich, wie auch Werner, auf einen standardgemäßen Ton verzichten. Die 48kHz frißt mein DVD Player aber klaglos und ich hoffe, daß auch spätere Geräte dies noch können (aber vieleicht kopieren wir später sowieso alles auf eine TESA Rolle oder auf einen BioSpeicher, sprich Misthaufen).

Was ich nun noch gerne haben wollte ist ein vernünftiges Menu, in dem ich die meistens hervorragende Information von www.tvtv.de (epg2timer) zu einem Film unterbringen könnte. Als summary.vdr liegt sie ja als Text vor. Und auch die EPG Infos könnten ja verwendet werden (wenn die Sender das endlich mal gebacken kriegen).

Da ich bei meinen allerersten Brennversuchen einer SVCD und verschiedenen Windows Tools manchmal Probleme mit dem Start und dem Ende einer SVCD hatte, besonders als ich sie noch direkt mit dem SVCD Patch (erste Versionen) abgespielt habe, starte ich jede CD mit einem kurzen Vorspann Movie und beende sie auch mit etwas ähnlichem.

Struktur der CD

Klick für Beispiel XML

Ablauf

Hier folgt nun eine kurze Ablaufbeschreibung der gesamten Schritte. Die Details können dann aus den Kommentaren der beiden angefügten Scripten entnommen werden. Die Kommentare sind in "simple english" gehalten, damit auch unsere Freunde aus dem englischsprachigem Ausland etwas damit anfangen können.

Fett gedruckt sind die Automatischen Schritte mit meinen Scripten

  1. Aufnahme mit VDR
  2. Werbung rausschneiden
  3. Schnitt laufenlassen (Taste 2)
  4. Schnitt auf richtige Länge und Szenenwechsel (ich bekomme ca 40 Min auf eine 80min CD)
  5. nicht nochmal Schnitt laufenlassen. tosvcd liest die Schnittmarken direkt.
  6. Film in die Bearbeitungsliste (toconvert.txt) einfügen (siehe AIO-Patch oder
    http://home.t-online.de/home/hubertus.sandmann )
  7. Aus dem VDR Menu "Befehle" den "Start Convert" Befehl aufrufen. Hiermit wird mein Script svcd.sh aufgerufen
  8. Erstes Directory aus toconvert.txt nehmen und neuen Verzeichnisnamen ohne Sonderzeichen machen
  9. neues Verzeichnis unter /mpeg erstellen
  10. linken der ???.vdr und index.vdr files
  11. Erzeugen eines mark.vdr files mit einem Schnittpärchen für eine CD
  12. Umwandeln mit Hilfe von tosvcd
  13. Erzeugen der still-video files aus dem file summary.vdr (Farben können natürlich nach eigenem Geschmack noch angepasst werden)
  14. SVCD Images erstellen
  15. Volume ID wird aus dem Directorynamen mit 30 Stellen Länge erzeugt so kann noch ein _1 oder so dazu kommen.
  16. Für jedes Movie file wird jetzt ein XML file zu Erzeugung des Images mit vcdxbuild erzeugt
  17. zuerst wird der Header des XML files erzeugt
  18. Für die erste CD im Verzeichnis wird nun für die Still Mpegs im Menu die segment section erzeugt
  19. Als nächstes werden die 3 Movie files intro.mpg, mpegx.mpg, outro.mpg in den Sequenze Part geschrieben
  20. Jetzt folgt der Selection Part, also wird das Menu entsprechend der Anzahl der Still Mpegs erzeugt.
  21. Zum Schluß wird nun die Playlist für die Movie files geschrieben
  22. Jetzt erfolgt das eigentliche Kompilieren des XML Files zu den Imagefiles durch vcdxbuild.
  23. Für alle Schnittpärchen gehe zu (11)
  24. Aufräumen - Löschen aller *.vdr files und aller temporären Dateien
  25. Für all Directories aus toconvert.txt gehe zu (9)
  26. Das reine Brennen wird nun wieder durch ein Script (cdrdaobatch.sh) auf meiner W2K/Linux Workstation unter Debian gesteuert. Dies ist allerdings ein nur halbautomatischer Vorgang da ich keinen CD Wechsler zum Brennen habe sondern immer noch den Discjockey spielen muß. Hier habe ich per Samba das /mpeg Verzeichnis gemounted (Samba - weil ich auch von W2K auf dies Verzeichnis zugreife).

  27. Das script cdrdaobatch.sh juckelt nun wieder durch alle angegebenen Directories und sucht die Imagefiles
  28. Das Brennen dauert dann je nach Geschwindigkeit immer eine Weile, sodaß ich nicht immer daneben sitzen bleibe.
  29. Ist eine CD fertig gibt das Script dann ein Klingelsignal aus und wartet auf ein <enter> für die nächste CD.
  30. Also CD wechseln und <enter> drücken, usw....
Tja, so einfach ist das Ganze nun geworden. Und hoffentlich komme ich auch mal dazu alle aufgenommenen Filme zu sehen. Aber das könnte dann ja vieleicht auch mal ein Script übernehmen....

Konfiguration

Für das Erstellen des toconvert.txt files benutze ich ein kleines Shell Script:

todolist.sh

#!/bin/bash
#set -x TODOLIST=/video/toconvert.txt
[ `echo $1 >> ${TODOLIST}` ] && echo "Fehler mit der TODOLIST ${TODOLIST}!!!"

Dies wird mit dem "-Z" parameter im runvdr script bei Aufruf von VDR mit übergeben. Sollte aus irgendeinem Grund kein Eintrag in die ToDoList vorgenommen werden können (echo Command schlägt fehl) wird eine Fehlermeldung auf der Konsole ausgegeben.

Das Script svcd.sh wird nicht direkt aus der commands.conf aufgerufen sondern aus einem weiteren kleinen script:

tosvcd.sh

#!/bin/bash
#set -x
nice -n 19 /usr/local/bin/svcd.sh

In meiner commands.conf sind dann folgende Einträge für die Umwandlung von Bedeutung:

commands.conf

run conversion     : if [ `ps -ef | grep -e "/svcd.sh"| grep -c -v grep` -eq 0 ];then at now -f /usr/local/bin/tosvcd.sh && echo "conversion gestartet";else echo "Läuft schon";fi
status conversion : [ -f /mpeg/status ] && cat /mpeg/status; [ -f /mpeg/TOSVCD.log ] && cat /mpeg/TOSVCD.log |tr "\r" "\n"|tail -1
view jobs : cat /video/toconvert.txt|cut -c1-38
clear jobs : rm -f /video/toconvert.txt && echo "clean"
list /mpeg : cd /mpeg; du -sk */*.mpg |cut -c1-38

Der Status der Conversion wird über zwei Logfiles festgestellt. Das Statusfile enthällt nur Meldungen über den groben Ablauf, während TOSVCD.log auch alle Details über die Umwandlung enthällt. Hier interessiert mich aber eigentlich nur die Zeit der eigentlichen Blöcke. Darum wird nur der letzte Eintrag angezeigt.

 

NVRAM WAKEUP

Hier noch ein kleiner Tip für Leute, die das NVRAM WAKEUP Programm benutzen:

Während der Umwandlung mit externen Scripten weiß natürlich VDR nichts von dem was so ein Rechner gerade treibt. Daher sollte der automatische shutdown nach der inactivity Zeit vermieden werden. Ich mache das auf diese Weise:

vdrshutdown.sh

#!/bin/bash
#set -x
# $Id: vdrshutdown,v 1.10 2002/03/15 22:25:38 bistr-o-math Exp $
if [ `ps -ef | grep svcd.sh | grep -c -v grep` -eq 0 ]
then
    /sbin/hwclock_wrapper --systohc
    NVRAMCMD=/usr/local/bin/nvram-wakeup
    $NVRAMCMD -ls $1
    case $PIPESTATUS in
         0) # all went ok - new date and time set
            shutdown -h now
            EXITSTATUS=0
            ;;
         1) # all went ok - new date and time set.
            #
            # *** but we need to reboot. ***
            #
            # for some boards this is needed after every change.
            #
            # for some other boards, we only need this after changing the
            # status flag, i.e. from enabled to disabled or the other way.
         
         
            # For plan A (see README file for more details) - uncomment
            # the touch line (don't forget to change your boot script)
            # and comment out the lilo line
            #
            # For plan B - uncomment the lilo line and comment out the touch line
            # (don't forget to install the modified kernel image first)
            #
            # touch /nvramboot
            lilo -R PowerOff
         
         
            shutdown -r now
            EXITSTATUS=0
            ;;
         2) # something went wrong
            # don't do anything - just exit with status 1
            EXITSTATUS=1
            ;;
    esac
else
    echo `date`">>>>>>>>> no shutdown - svcd.sh ist active <<<<<<<<<">>/var/log/messages
    EXITSTATUS=1
fi
# exit with 0 if everything went ok.
# exit with 1 if something went wrong
exit $EXITSTATUS
       

 

Benötigte Software für die Scripte

vdcimager http://www.vcdimager.org/
tosvcd http://muse.seh.de/tosvcd/
netpbm http://sourceforge.net/projects/netpbm/
cdrdao http://cdrdao.sourceforge.net/
Auf die Richtigkeit der hier angegebenen Links oder deren Inhalt habe ich keinen Einfluß und lehne daher jegliche Verantwortung ab

 

Alles andere an Software (z.B. mjpegtools...) muß dann mit der jeweiligen Software mitgeladen werden. Hier hilft bestimmt wieder die Beschreibung von Hubertus Sandmann (http://home.t-online.de/home/hubertus.sandmann) und natürlich das VDR-Portal (http://www.vdrportal.de).

 

Danke an:

alle, die an VDR mitgearbeitet haben (bes. Klaus Schmidinger) und an alle, die Patches und Plugins und viele gute Ideen beigesteuert haben.

Und für die guten Ideen und Beschreibungen von Stefan Uchrin (edv-tip) und Tony (TJW) (Tip von Jürgen Hahn) natürlich auch.


History

Version 1.0 15.09.2002 erste Version
Version 1.1 06.10.2002

bessere Logfiles für svcd.sh
flexibilisierung in vcdbatch.sh
Beschreibung der Konfiguration

Version 1.2 13.10.2002 English translation
Version 2.0 07.09.2003 Integration der Imageerzeugung in svcd.sh