Dvb wiki script/Programmieranleitung: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(Beginn der Programmbeschreibung)
(weiter im Text)
Zeile 1: Zeile 1:
 
   
 
   
 
{{Dvbscript navigationsbox}}
 
{{Dvbscript navigationsbox}}
In diesem Artikel wird näher darauf eingegangen, wie das Script aufgebaut ist und warum es so funktioniert, wie es funktioniert.
 
 
Dazu habe ich gerade einen Ausdruck der Version 0.5.5 gemacht. Und ich hab' dabei festgestellt, daß es ganz schön umfangreich geworden
 
ist, das was ich da programmiert habe. Es ist also an Zeit, zu Papier (bzw. auf den Bildschirm) zu bringen, was im Script im Einzelnen vor sich geht.
 
 
Es gibr zwei Gründe für diese Programmieranleitung.
 
Zum einen soll der interessierte Nutzer in die Lage versetzt werden, das Script für sich selber zu erweitern bzw. zu ändern. Und
 
zum anderen möchte ich selbst nachschauen können, warum ich Schritt x so programmiert habe und nicht anders.
 
  
 +
In diesem Artikel wird näher darauf eingegangen, wie das Script aufgebaut ist und warum es so funktioniert, wie es funktioniert.<br>
 +
Dazu habe ich gerade einen Ausdruck der Version 0.5.5 gemacht. Und ich hab' dabei festgestellt und dabei festgestellt, daß es ganz schön umfangreich geworden
 +
ist, das was ich da programmiert habe. Es ist also an Zeit, zu Papier (bzw. auf den Bildschirm) zu bringen, was im Script im Einzelnen vor sich geht.<br>
 +
Dafür gibt es zwei Gründe. Zm einen soll der interessierte Nutzer in die Lage versetzt werden, das Script für sich selber zu erweitern bzw. zu ändern. Und
 +
zum anderen möchte ich selbst nachschauen können, warum ich Schritt x so programmiert habe und nicht anders.<br>
 
Greifen wir es also an und schauen uns zusammen den Aufbau des Scriptes an:
 
Greifen wir es also an und schauen uns zusammen den Aufbau des Scriptes an:
  
Zeile 18: Zeile 15:
 
==Evt. vom Benutzer anzupassen==
 
==Evt. vom Benutzer anzupassen==
  
Folgende Variablen können, wenn es sein muß, an die eigenen Gegebenheiten anpepasst werden
+
Folgende Variable können, wenn es sein muß, an die eigenen Gegebenheiten anpepasst werden
  
 
===Basisverzeichnis===
 
===Basisverzeichnis===
  
Die Variable '''$basisverzeichnis''' enthält den Pfad zum sogenannten Basiverzeichnis. In diesem Verzeichnis werden vom Script weitere Arbeitsverzeichnisse angelegt.<br>
+
Die Variable $basisverzeichnis enthält den Pfad zum sogenannten Basiverzeichnis. In diesem Verzeichnis werden vom Script weitere Arbeitsverzeichnisse angelegt.<br>
 
Default ist: ~/filme<br>
 
Default ist: ~/filme<br>
 
Um eine wilde Jongliererei mit Rechten zu umgehen, muß das Basisverzeichis im Heimatverzeichnis des Benutzers liegen. Existiert der Default-Pfad bereits
 
Um eine wilde Jongliererei mit Rechten zu umgehen, muß das Basisverzeichis im Heimatverzeichnis des Benutzers liegen. Existiert der Default-Pfad bereits
und/oder wird von anderen Anwendungen benutzt, muß in die Variable ein anderer Pfadname eingetragen werden. Aber, wie gesagt, im Heimatverzeichnis bleiben!
+
und wird von anderen Anwendungen benutzt, muß in die Variable ein anderer Pfadname eingetragen werden. Aber, wie gesagt, im Heimatverzeichnis bleiben!
  
 
===DVD-Groesse===
 
===DVD-Groesse===
  
Die Variable '''$maxgroesse''' enthält die Anzahl der Bytes, die auf eine DVD passen. Ist ein Film größer, wird er requantisiert.<br>
+
Die Variable $maxgroesse enthält die Anzahl der Bytes, die auf eine DVD passen. Ist ein Film größer, wird requantisiert.<br>
Default ist: 4600000000. Viel mehr passt auf eine DVD5 nicht drauf.
+
Default ist: 4600000000. Viel mehr passt auf eine DVD5 nicht drauf.<br>
 
 
 
Diese Variable sollte nicht angetastet werden, es sei denn, jemand hätte Lust, Funktionen für eine Double-Layer DVD zu programmieren.
 
Diese Variable sollte nicht angetastet werden, es sei denn, jemand hätte Lust, Funktionen für eine Double-Layer DVD zu programmieren.
  
 
===Brenngeschwindigkeit===
 
===Brenngeschwindigkeit===
  
In die Variable '''$brenngeschwindigkeit''' kann eingetragen werden, mit welcher maximalen Geschwindigkeit die DVD gebrannt werden soll.
+
In die Variable $brenngeschwindigkeit kann eingetragen werden, mit welcher maximalen Geschwindigkeit die DVD gebrannt werden soll. Ich verwende 16fach
 
+
DVD's und habe deshalb als Default 8 angegeben. Mit halber Geschwindigkeit dauert es zwar etwas länger, aber ich habe auch noch nie Ausschuss produziert.
Ich verwende 16fach DVD's und habe deshalb als default 8 angegeben. Mit halber Geschwindigkeit dauert es zwar etwas länger, aber ich habe auch noch nie Ausschuss produziert.
 
  
 
===Pfade, in denen nach den Helferprogrammen gesucht wird===
 
===Pfade, in denen nach den Helferprogrammen gesucht wird===
  
In die Variable '''$suchpfade''' sind 4 Pfade als default eingetragen. In diesen Pfaden sieht das Script nach, ob die notwendigen Helferprogramme installiert
+
In die Variable $suchpfade sind 4 Pfade als Default eingetragen. In diesen Pfaden sieht das Script nach, ob die notwendigen Helferprogramme installiert
 
sind.
 
sind.
  
 
==Fehlermeldungen abschalten==
 
==Fehlermeldungen abschalten==
  
Mit '''exec 2>/dev/null''' wird die Fehlerausgebe ins Nirwana geschickt.
+
Mit exec 2>/dev/null wird die Fehlerausgebe ins Nirwana geschickt. Dadurch werden nur Meldungen, die auch explizit gewollt sind, auf dem Bildschirm
 
+
ausgegeben.<br>
Dadurch werden nur Meldungen, die auch explizit gewollt sind, auf dem Bildschirm ausgegeben. Für die Inbetriebnahme und eine eventuell damit verbundene Fehlersuche empfehle ich, diesen Befehl auszukommentieren.
+
Für die Inbetriebnahme und eine eventuell damit verbundene Fehlersuche empfehle ich, diesen Befehl auszukommentieren.
  
 
==Installationsroutine==
 
==Installationsroutine==
Zeile 59: Zeile 54:
 
===Anlegen der notwendigen Verzeichnisse===
 
===Anlegen der notwendigen Verzeichnisse===
  
Das Basisverzeichnis wird angelegt (Variable '''$basisverzeichnis'''). Und im Basiverzeichnis werden folgende Arbeitsordner installiert:
+
Das Basisverzeichnis wird angelegt. Und im Basiverzeichnis werden folgende Arbeitsordner angelegt:
*'''dvd_aufnahme''': Hier wird zuerst nach den zu bearbeitenden Filmen gesucht.
+
*dvd_aufnahme: Hier wird zuerst nach den zu bearbeitenden Filmen gesucht.
*'''dvd_tmp''': Hier legen die Helferprogramme Zwischenergebnisse ab ab und suchen nach den Ergebnissen anderen Helferprogramme
+
*dvd_tmp: Hier legen die Helferprogramme Zwischenergebnisse ab ab und suchen nach den Ergebnissen anderen Helferprogramme
*'''dvd_struktur''': In diesem Ordner wird die fertige DVD-Struktur zwischengespeichert.
+
*dvd_struktur: In diesem Ordner wird die fertige DVD-Struktur zwischengespeichert.
*'''dvd-sicherung''': Hierhin werden fertige Arbeitsergebnisse gesichert, wenn das vom User so gewünscht wird.
+
*dvd-sicherung: Hierhin werden fertige Arbeitsergebnisse gesichert, wenn das vom User so gewünscht wird.
*'''default''': Hier stehen die Pfadnamen der Helferprogramme und die Initialisierungsdateien für ProjectX.
+
*default: Hier stehen die Pfadnamen der Helferprogramme und die Initialisierungsdateien für ProjectX.
*'''screenshot''': Mit mplayer erstellte Screenshots der Filme/Clips, die ich dann zum Bedrucken der DVD verwende.
+
*screenshot: Mit mplayer erstellte Screenshots der Filme / Clips, die ich dann zum Bedrucken der DVD verwende.
  
 
===Programmerkennung===
 
===Programmerkennung===
 +
 +
In dieser Routine wird nachgesehen, ob die notwendigen Helferprogramme installiert sind. Und das funktioniert so:
 +
 +
*'''for...''': Diese Schleife wird neunmal durchlaufen, so oft also, wie Helferprogramme vorhanden sind ($name[0] bis $name[8]). Alles folgende spielt sich in der Schleife ab.
 +
*'''pfad[i]='cat....''': Der zum jeweiligen Programm gehörige Pfad wird, so er im Default-Verzeichnis vorhanden ist, von dort in die indizierte Variable $name(i) geschrieben.
 +
*'''if...''': Wenn das jeweilige Programm nicht existiert,dann
 +
*'''then''': wird mit dem Befehl "find"  das Dateisystem (in den Suchpfaden) nach dem Programm durchsucht. Anschließend wird mit "wc -w" die Anzahl der gefundenen Programme ermittelt (Es können ja mehrere Versionen des gleichen Programmes installiert sein oder das gleiche Programm in unterschiedlichen Pfaden).
 +
*'''case 0''': Anzahl 0, das Programm wurde nicht gefunden. Es folgt ein Hinweis darauf. Danach wird das Script beendet und das Programm muß nachinstalliert werden.
 +
*'''case 1''': Anzahl 1, das Programm existiert genau einmal. Der dazugehörige Pfad wird als Default in das Default-Verzeichnis geschrieben.
 +
*'''case *''': Das Programm existiert mehr als einmal. Es wird nachgefragt (kdialog --combobox), welcher der Pfade als Default verwendet werden soll. Dieser
 +
Pfad wird dann ins Default-Verzeichnis geschrieben.
 +
 +
Nachdem diese Routine neunmal erfolgreich durchlaufen ist, kann mit der eigentlichen Videobearbeitung begonnen werden.
 +
 +
==Variablenzuweisungen==
 +
Diese Zuweisungen haben den Sinn, das Script besser lesbar zu machen. Im Script selbst wird dann ausschließlich mit diesen Variablen gearbeitet bzw. mit
 +
in Variablen gespeicherten Pfaden. Durch diese Strategie kann das Script einfach an neue Gegebenheiten anpepasst werden. Es muß nicht lange im Code gesucht werden,
 +
an welchen Stellen was geändert werden muß. Es braucht nur der Inhalt der entsprechenden Variablen ausgetauscht werden.
 +
 +
==Konfiguration PJX==
 +
 +
Hier werden die Initialisierungsdateien festgelegt, in denen Einstellungen stehen, mit denen ProjectX startet:
 +
 +
===X.ini für Filmbearbeitung===
 +
 +
Die X.ini.film enthält folgende Einstellungen:
 +
 +
*'''Application.Agreement=1''': Ja zur Lizenz
 +
*'''Application.Language=de''': PJX startet auf deutsch<br>
 +
 +
*'''WindowPosition.Main.Heigh/Width''': Größe des PJX-Fensters
 +
*'''WindowPosition.Main.X/Y''': Position des Fensters (hier rechts oben)<br>
 +
 +
*'''optionPanel.NormalLog=0''': Es wird keine Log-Datei geschrieben (die würde bloß stören)
 +
*'''OptionPanel.CloseOnEnd=1''': Nachdem PJX fertig ist, beendet es sich selber
 +
 +
===X.ini für Videoclips===
 +
 +
Die X.ini.clip enthält zusäthlich:
 +
 +
*'''AudioPanel.decodeMPGAudio=1''': Die mpeg-audio-Dateien werden zu .wav decodiert (Für's spätere Normalisieren des Tons notwendig)
 +
 +
Diese beiden X.ini's werden als Default im Default-Verzeichnis abgelegt, von wo sie bei Bedarf geladen werden.
 +
 +
Werden im PJX-Fenster irgendwelche Einstellungen verändert, so werden diese Änderungen nicht in die jeweilige X,ini übernommen. Das wurde absichtlich
 +
so programmiert, damit man immer einen definierten Ausgangszustand hat.<br>
 +
Wird hier eine Speicherung gewünscht, kann dies durch einen zusätzlichen Eintrag in die X.ini's erfolgen. Dann steht man allerdings vor dem Problem, oft
 +
nicht zu wissen, mit welchen Einstellungen PJX denn nun tatsächlich startet. Da es mir immer wieder so ging, kann ich nur raten, die Speicherung ausgeschalten
 +
zu lassen.
 +
 +
==Funktionen==
 +
 +
Diese Funktionen werden vom Hauptprogrmm nach Bedarf aufgerufen und bilden das eigentliche Gerüst des Scriptes. Wird von einer Funktion erwartet, daß sie einen
 +
Wert an das Hauptprogramm übergeben soll, dann wird das durch den Befehl "echo Variable" am Ende der Funktion realisiert.
 +
 +
===del_ordner ()===
 +
 +
Die Inhalte der Arbeitsordner $tmp_pfad und $dvd-struktur_pfad werden gelöscht
 +
 +
===fehler ()===
 +
 +
Wurde keine Datei film.mpg gefunden, so wurde auch nichts multiplext. In diesem Fall muß irgendwo ein Fehler passiert sein. Es erfolgt ein Hinweis auf
 +
diese Tatsache. Anschließend wird das Script beendet.
 +
 +
===aktionenauswahl ()===
 +
 +
Mit Hilfe des Befehls "kdialog --radiolist" wird eine Liste generiert, aus der man durch (virtuellen) Knopfdruck auswählen kann, welche der angebotenen
 +
Aktionen ausgeführt werden sollen. Die zu der Aktion gehörige Nummer wird in der Variablen $was_tun abgelegt. Diese Variable wird dann mit "echo $was_tun" der
 +
Nachwelt zur Verfügung gestellt. Diese Nachwelt, nämlich das Hauptprogramm, fragt die Variable ab und führt dann die für diese Aufgabe notwendigen Funktionen
 +
aus.
 +
 +
===filmauswahl ()===
 +
 +
Der Befehl "kdialog --getopenfilename" öffnet ein KDE-Fenster, in dem aus einer Liste eine Datei zur weiteren Verarbeitung ausgewählt werden kann. Diese
 +
Datei wird in die Variable $quelldatei geschrieben. Als Liste werden die im $aufname_pfad enthaltenen Dateien hergenommen.
 +
 +
Die folgende "if"-Abfrage beendet das Script, wenn im Dialog die Taste Abbrechen gedrückt wurde.
 +
 +
===verzeichnisauswahl()===
 +
 +
Hier gilt das bei der Funktion "filmauswahl ()" gesagte. Der Unterschied besteht darin, daß nicht eine Liste von Dateien, sondern eine Liste von Ordnern zur
 +
Auswahl gestellt wird. Diese Ordner befinden sich im Verzeichnis $sicherungs_pfad.
 +
 +
===pjx_demux_gui ()===
 +
 +
Das Programm ProjectX wird aufgerufen mit folgenden Einstellungen:
 +
 +
*'''-demux''': Der mpeg-Stream wird demultiplext
 +
*'''-gui''': PJX startet mit graphischer oberfläche (notwendig nur, wenn mit PJX geschnitten werden soll)
 +
*'''-ini ${default_pfad]/X.ini.film''': mit dieser Initialisierungsdatei wird PJX gestartet.
 +
*'''-out $tmp_pfad''': Hierhin wird das Bearbeitungsergebnis geschrieben
 +
*'''-name film''': Die Ausgabedatei erhält den Basisnamen "film"
 +
*'''$quelldatei''':Dieser Stream wird verarbeitet
 +
*'''1>/dev/null''': Alles, was ich an Ausgeben auf dem Bildschirm nicht sehen will, wird ins Leere geschickt.
 +
 +
===pjx_ts_gui ()===
 +
 +
Es gilt das oben Gesagte mit folgenden Änderungen:
 +
 +
*'''-tots''': Der Film wird nicht demultiplext, sondern als TS-File gewandelt
 +
*'''-split 4300''': Bei 4300 Mbyte wird die Aufnahme gesplittet (mehr passt nicht auf eine DVD drauf)
 +
 +
===pjx_clip ()===
 +
 +
*'''-ini''': Als Initialisierungsdatei wird X.ini.clip verwendet, in der festgelegt wird, daß das mpg-audio zu einer wav-Datei decodiert wird.
 +
 +
===mpeg1_input ()===
 +
 +
Ein mpeg1-Video wird mit Hilfe von "ffmpeg" demultiplext. Dabei wird der Ton zu .wav decodiert. Die Optionen des Befehls im einzelnen:
 +
 +
*'''-i ${quelldatei}''': Dieses mpeg1-Viedeo wird verarbeitet
 +
*'''
 +
 +
'''will be continued'''
 +
 +
 +
  
  

Version vom 15. Juni 2008, 14:57 Uhr


Vom DVB zur DVD, ein Wikibuch: Übersicht - Der Weg - Die Helferprogramme - Das Script - Installation - Bedienungsanleitung - Programmieranleitung



In diesem Artikel wird näher darauf eingegangen, wie das Script aufgebaut ist und warum es so funktioniert, wie es funktioniert.
Dazu habe ich gerade einen Ausdruck der Version 0.5.5 gemacht. Und ich hab' dabei festgestellt und dabei festgestellt, daß es ganz schön umfangreich geworden ist, das was ich da programmiert habe. Es ist also an Zeit, zu Papier (bzw. auf den Bildschirm) zu bringen, was im Script im Einzelnen vor sich geht.
Dafür gibt es zwei Gründe. Zm einen soll der interessierte Nutzer in die Lage versetzt werden, das Script für sich selber zu erweitern bzw. zu ändern. Und zum anderen möchte ich selbst nachschauen können, warum ich Schritt x so programmiert habe und nicht anders.
Greifen wir es also an und schauen uns zusammen den Aufbau des Scriptes an:

Beschreibung

Wie der Name schon sagt, steht hier eine grobe Beschreibung

Evt. vom Benutzer anzupassen

Folgende Variable können, wenn es sein muß, an die eigenen Gegebenheiten anpepasst werden

Basisverzeichnis

Die Variable $basisverzeichnis enthält den Pfad zum sogenannten Basiverzeichnis. In diesem Verzeichnis werden vom Script weitere Arbeitsverzeichnisse angelegt.
Default ist: ~/filme
Um eine wilde Jongliererei mit Rechten zu umgehen, muß das Basisverzeichis im Heimatverzeichnis des Benutzers liegen. Existiert der Default-Pfad bereits und wird von anderen Anwendungen benutzt, muß in die Variable ein anderer Pfadname eingetragen werden. Aber, wie gesagt, im Heimatverzeichnis bleiben!

DVD-Groesse

Die Variable $maxgroesse enthält die Anzahl der Bytes, die auf eine DVD passen. Ist ein Film größer, wird requantisiert.
Default ist: 4600000000. Viel mehr passt auf eine DVD5 nicht drauf.
Diese Variable sollte nicht angetastet werden, es sei denn, jemand hätte Lust, Funktionen für eine Double-Layer DVD zu programmieren.

Brenngeschwindigkeit

In die Variable $brenngeschwindigkeit kann eingetragen werden, mit welcher maximalen Geschwindigkeit die DVD gebrannt werden soll. Ich verwende 16fach DVD's und habe deshalb als Default 8 angegeben. Mit halber Geschwindigkeit dauert es zwar etwas länger, aber ich habe auch noch nie Ausschuss produziert.

Pfade, in denen nach den Helferprogrammen gesucht wird

In die Variable $suchpfade sind 4 Pfade als Default eingetragen. In diesen Pfaden sieht das Script nach, ob die notwendigen Helferprogramme installiert sind.

Fehlermeldungen abschalten

Mit exec 2>/dev/null wird die Fehlerausgebe ins Nirwana geschickt. Dadurch werden nur Meldungen, die auch explizit gewollt sind, auf dem Bildschirm ausgegeben.
Für die Inbetriebnahme und eine eventuell damit verbundene Fehlersuche empfehle ich, diesen Befehl auszukommentieren.

Installationsroutine

Programmnamen

Dies sind die Namen der Helferprogramme, die in einer indizierten Variablen abgelegt werden.

Anlegen der notwendigen Verzeichnisse

Das Basisverzeichnis wird angelegt. Und im Basiverzeichnis werden folgende Arbeitsordner angelegt:

  • dvd_aufnahme: Hier wird zuerst nach den zu bearbeitenden Filmen gesucht.
  • dvd_tmp: Hier legen die Helferprogramme Zwischenergebnisse ab ab und suchen nach den Ergebnissen anderen Helferprogramme
  • dvd_struktur: In diesem Ordner wird die fertige DVD-Struktur zwischengespeichert.
  • dvd-sicherung: Hierhin werden fertige Arbeitsergebnisse gesichert, wenn das vom User so gewünscht wird.
  • default: Hier stehen die Pfadnamen der Helferprogramme und die Initialisierungsdateien für ProjectX.
  • screenshot: Mit mplayer erstellte Screenshots der Filme / Clips, die ich dann zum Bedrucken der DVD verwende.

Programmerkennung

In dieser Routine wird nachgesehen, ob die notwendigen Helferprogramme installiert sind. Und das funktioniert so:

  • for...: Diese Schleife wird neunmal durchlaufen, so oft also, wie Helferprogramme vorhanden sind ($name[0] bis $name[8]). Alles folgende spielt sich in der Schleife ab.
  • pfad[i]='cat....: Der zum jeweiligen Programm gehörige Pfad wird, so er im Default-Verzeichnis vorhanden ist, von dort in die indizierte Variable $name(i) geschrieben.
  • if...: Wenn das jeweilige Programm nicht existiert,dann
  • then: wird mit dem Befehl "find" das Dateisystem (in den Suchpfaden) nach dem Programm durchsucht. Anschließend wird mit "wc -w" die Anzahl der gefundenen Programme ermittelt (Es können ja mehrere Versionen des gleichen Programmes installiert sein oder das gleiche Programm in unterschiedlichen Pfaden).
  • case 0: Anzahl 0, das Programm wurde nicht gefunden. Es folgt ein Hinweis darauf. Danach wird das Script beendet und das Programm muß nachinstalliert werden.
  • case 1: Anzahl 1, das Programm existiert genau einmal. Der dazugehörige Pfad wird als Default in das Default-Verzeichnis geschrieben.
  • case *: Das Programm existiert mehr als einmal. Es wird nachgefragt (kdialog --combobox), welcher der Pfade als Default verwendet werden soll. Dieser

Pfad wird dann ins Default-Verzeichnis geschrieben.

Nachdem diese Routine neunmal erfolgreich durchlaufen ist, kann mit der eigentlichen Videobearbeitung begonnen werden.

Variablenzuweisungen

Diese Zuweisungen haben den Sinn, das Script besser lesbar zu machen. Im Script selbst wird dann ausschließlich mit diesen Variablen gearbeitet bzw. mit in Variablen gespeicherten Pfaden. Durch diese Strategie kann das Script einfach an neue Gegebenheiten anpepasst werden. Es muß nicht lange im Code gesucht werden, an welchen Stellen was geändert werden muß. Es braucht nur der Inhalt der entsprechenden Variablen ausgetauscht werden.

Konfiguration PJX

Hier werden die Initialisierungsdateien festgelegt, in denen Einstellungen stehen, mit denen ProjectX startet:

X.ini für Filmbearbeitung

Die X.ini.film enthält folgende Einstellungen:

  • Application.Agreement=1: Ja zur Lizenz
  • Application.Language=de: PJX startet auf deutsch
  • WindowPosition.Main.Heigh/Width: Größe des PJX-Fensters
  • WindowPosition.Main.X/Y: Position des Fensters (hier rechts oben)
  • optionPanel.NormalLog=0: Es wird keine Log-Datei geschrieben (die würde bloß stören)
  • OptionPanel.CloseOnEnd=1: Nachdem PJX fertig ist, beendet es sich selber

X.ini für Videoclips

Die X.ini.clip enthält zusäthlich:

  • AudioPanel.decodeMPGAudio=1: Die mpeg-audio-Dateien werden zu .wav decodiert (Für's spätere Normalisieren des Tons notwendig)

Diese beiden X.ini's werden als Default im Default-Verzeichnis abgelegt, von wo sie bei Bedarf geladen werden.

Werden im PJX-Fenster irgendwelche Einstellungen verändert, so werden diese Änderungen nicht in die jeweilige X,ini übernommen. Das wurde absichtlich so programmiert, damit man immer einen definierten Ausgangszustand hat.
Wird hier eine Speicherung gewünscht, kann dies durch einen zusätzlichen Eintrag in die X.ini's erfolgen. Dann steht man allerdings vor dem Problem, oft nicht zu wissen, mit welchen Einstellungen PJX denn nun tatsächlich startet. Da es mir immer wieder so ging, kann ich nur raten, die Speicherung ausgeschalten zu lassen.

Funktionen

Diese Funktionen werden vom Hauptprogrmm nach Bedarf aufgerufen und bilden das eigentliche Gerüst des Scriptes. Wird von einer Funktion erwartet, daß sie einen Wert an das Hauptprogramm übergeben soll, dann wird das durch den Befehl "echo Variable" am Ende der Funktion realisiert.

del_ordner ()

Die Inhalte der Arbeitsordner $tmp_pfad und $dvd-struktur_pfad werden gelöscht

fehler ()

Wurde keine Datei film.mpg gefunden, so wurde auch nichts multiplext. In diesem Fall muß irgendwo ein Fehler passiert sein. Es erfolgt ein Hinweis auf diese Tatsache. Anschließend wird das Script beendet.

aktionenauswahl ()

Mit Hilfe des Befehls "kdialog --radiolist" wird eine Liste generiert, aus der man durch (virtuellen) Knopfdruck auswählen kann, welche der angebotenen Aktionen ausgeführt werden sollen. Die zu der Aktion gehörige Nummer wird in der Variablen $was_tun abgelegt. Diese Variable wird dann mit "echo $was_tun" der Nachwelt zur Verfügung gestellt. Diese Nachwelt, nämlich das Hauptprogramm, fragt die Variable ab und führt dann die für diese Aufgabe notwendigen Funktionen aus.

filmauswahl ()

Der Befehl "kdialog --getopenfilename" öffnet ein KDE-Fenster, in dem aus einer Liste eine Datei zur weiteren Verarbeitung ausgewählt werden kann. Diese Datei wird in die Variable $quelldatei geschrieben. Als Liste werden die im $aufname_pfad enthaltenen Dateien hergenommen.

Die folgende "if"-Abfrage beendet das Script, wenn im Dialog die Taste Abbrechen gedrückt wurde.

verzeichnisauswahl()

Hier gilt das bei der Funktion "filmauswahl ()" gesagte. Der Unterschied besteht darin, daß nicht eine Liste von Dateien, sondern eine Liste von Ordnern zur Auswahl gestellt wird. Diese Ordner befinden sich im Verzeichnis $sicherungs_pfad.

pjx_demux_gui ()

Das Programm ProjectX wird aufgerufen mit folgenden Einstellungen:

  • -demux: Der mpeg-Stream wird demultiplext
  • -gui: PJX startet mit graphischer oberfläche (notwendig nur, wenn mit PJX geschnitten werden soll)
  • -ini ${default_pfad]/X.ini.film: mit dieser Initialisierungsdatei wird PJX gestartet.
  • -out $tmp_pfad: Hierhin wird das Bearbeitungsergebnis geschrieben
  • -name film: Die Ausgabedatei erhält den Basisnamen "film"
  • $quelldatei:Dieser Stream wird verarbeitet
  • 1>/dev/null: Alles, was ich an Ausgeben auf dem Bildschirm nicht sehen will, wird ins Leere geschickt.

pjx_ts_gui ()

Es gilt das oben Gesagte mit folgenden Änderungen:

  • -tots: Der Film wird nicht demultiplext, sondern als TS-File gewandelt
  • -split 4300: Bei 4300 Mbyte wird die Aufnahme gesplittet (mehr passt nicht auf eine DVD drauf)

pjx_clip ()

  • -ini: Als Initialisierungsdatei wird X.ini.clip verwendet, in der festgelegt wird, daß das mpg-audio zu einer wav-Datei decodiert wird.

mpeg1_input ()

Ein mpeg1-Video wird mit Hilfe von "ffmpeg" demultiplext. Dabei wird der Ton zu .wav decodiert. Die Optionen des Befehls im einzelnen:

  • -i ${quelldatei}: Dieses mpeg1-Viedeo wird verarbeitet

will be continued





Vom DVB zur DVD, ein Wikibuch: Übersicht - Der Weg - Die Helferprogramme - Das Script - Installation - Bedienungsanleitung - Programmieranleitung



Zurück zur Multimedia-Übersicht