Dvb script gui/anleitung

Aus Linupedia.org
Version vom 18. Dezember 2008, 18:27 Uhr von Escho (Diskussion | Beiträge) (Kategorie Multimedia entfernt)
Wechseln zu: Navigation, Suche
Diese Beschreibung wurde mit folgenden Distributionen getestet:

OpenSuse 11.0 (32Bit) mit KDE 3.9.x
OpenSuse 11.0 (32Bit) mit KDE 4.1


Vom DVB zur DVD, die GUI: Anleitungen - Installation - GUI-Kommanderscript - Arbeitsscript - Dokumentation



Was macht dieses Programm

Hauptzweck des Programmes ist es, aufgenommene DVB-Filme so zu bearbearbeiten, daß sie ohne störende Werbung auf DVD gebrannt werden können. Diese Video-DVD ist dann auch in einem Stand-alone Player abspielbar.

Weitere Features

  • Aufnahmen brennen bzw. sichern als Daten-DVD (Die ist dann nicht in einem Stand-alone-Player abspielbar).
  • Auswahl, welche Tonspuren verarbeitet werden sollen (mp2 und/oder AC3)
  • Aufnahmen als Videoclips speichern und eine Playlist für mplayer anlegen
  • Mpeg1-Aufnahmen (SVCD) als Videoclips speichern und in die Playlist aufnehmen
  • Normalisieren der mp2-Tonspur
  • Requantisierung, wenn der Film zu lang für eine einzige DVD wird
  • Screenshots aus dem Film erstellen
  • Direktdruck auf DVD (Das Vorhandensein von Druckschablonen wird dabei vorausgesetzt)
  • Schneiden der Aufnahme (nicht bei mpeg1)

Der tiefere Sinn des Ganzen

An Hand dieses Programmes soll gezeigt werden, wie mit einem Bash-Script die Verarbeitung einer DVB-Aufnahme zu einer Video-DVD automatisiert werden kann. Und um alles noch ein bißchen interessanter zu machen, ist eine Bedienoberfläche (GUI) hinzugekommen, mit der sich das Script mühelos bedienen läßt. Der dornenreiche Weg zu dieser GUI, die mit Kommander erstellt wurde, wird in einem seperaten Artikel behandelt.

Gliederung des Programmes

Das Programm setzt sich aus drei Teilen zusammen, die nur gemeinsam funktionsfähig sind:

  • Installations-Script: Dieses Bash-Script dient, wie der Name schon sagt, der Installation des Ganzen.
  • Kommander-Script: Programmcode der GUI.
  • Arbeits-Script: Bash-Script, mit dem die eigentliche Arbeit verrichtet wird.

Kurzanleitung

Hilfsprogramme

Es müssen folgende Programme installiert sein:

  • mplex
  • tcrequant
  • dvdauthor
  • ProjectX.jar
  • normalize
  • ffmpeg
  • growisofs
  • vlc
  • mplayer

Hier steht, wo diese Programme zu finden sind: Die Helferprogramme

Zusätzlich sind notwendig:

  • kdialog (kde4-kdialog)
  • kommander

Beide Programme gehören zur Standardausstattung von OpenSuse 11.0 (mit KDE) und können mit Yast installiert werden.

Installation

  • Leere Textdatei erzeugen, irgendwo im Heimatverzeichnis
  • An den Namen der Textdatei ein .sh anhängen (im Worten: Punkt sh ohne Leerzeichen dazwischen)
  • Die Textdatei ausführbar machen (Damit ist aus der Textdatei eine ausführbare Script-Datei geworden, bei der nur noch der Inhalt fehlt)
  • Den Installationcode aus dem Wiki in diese Datei kopieren.
  • Die Script-Datei in einem Terminal starten (oder Rechtsklick auf die Datei, Öffnen mit Sonstige, sh, Im Terminal ausführen)
  • Wenn danach gefragt wird, einen Pfad für das Hauptverzeichnis festlegen.
  • Wenn danach gefragt wird, Pfade zu Hilfsprogrammen auswählen.
  • Das Ende der Installation mit OK bestätigen.

Kopieren der Programm-Codes

Kommander-Code

  • Den guicode aus dem Wiki in folgende Textdatei kopieren: ~/DVB_Script/GUI/guicode.kmdr
  • Die Textdatei ausführbar machen.

Bashscript-Code

  • Den scriptcode aus dem Wiki in folgende Textdatei kopieren: ~/DVB_Script/Script/scriptcode.sh
  • Die Textdatei ausführbar machen.

(~/DVB_Script abändern, wenn während der Installation ein anderes Hauptverzeichnis gewählt wurde)

Start

Das Programm kann auf mehrere Arten gestartet werden. Hier eine Auswahl:

  • Recommanded: Linksklick auf die Desktop-Datei im Verzeichnis ~/Desktop
  • Terminal: kmdr-executor ~/DVB_Script/GUI/guicode.kmdr (~/DVB_Script abändern, wenn während der Installation ein anderes Hauptverzeichnis gewählt wurde)
  • Linksklick auf die gerade erwähnte kmdr-Datei. Es öffnet sich das Editor-Fenster von Kommander. Hier auf Exec drücken.

Bedienung des Programms

  • Starten des Programms
  • Auswählen der gewünschten Aktion
  • Klicken auf Go

Im Fortschrittfenster wird angezeigt, wie weit die Bearbeitung fortgeschritten ist.

Im Debugfenster kann der Fortschritt noch genauer beobachtet werden. Dieses Fenster ist beim Programmstart aktiviert. Man kann es über den Aus-Knopf deaktivieren. Das Debugfenster zeigt immer die neuesten Meldungen an. Möchte man ältere Meldungen sehen, so kann dies ebenfalls über den Aus-Knopf erreicht werden.

Die GUI kann keine zweite Aufgabe starten, solange die gerade laufende Arbeit nicht erledigt ist. Das bedeutet auch, daß die Einstellungen am Debugfenster vor dem Drücken des Go-Knopfes zu erfolgen haben. Nach Beenden der Aufgabe kann der Fensterinhalt auch noch angesehen werden (Fehlersuche), solange das Programm nicht vollständig beendet wurde (nach Ablauf von 1000 Sekunden oder nach Drücken auf das Popupfenster, welches das Ende ankündigt).

Es ist zu beachten, daß die Bearbeitung eines längeren Filmes auch länger dauern kann. Das Tool mplex hat leider die Angewochnheit, keine Fortschrittanzeige zu produzieren. Man darf aber von folgenden Zeiten ausgehen: Das Multiplexen wird ebenso lange dauern wie das Demultiplexen mit ProjectX. Und das können schon einmal 5 bis 10 Minuten sein (in Abhängigkeit von Rechner und Filmgrösse). Also, nicht die Geduld verlieren!

Die Details: Das Installations-Script

Hauptprogramm

Hier werden die einzelnen Funktionen des Scriptes nacheinander aufgerufen und ausgeführt. Erst wenn eine Funktion abgearbeitet ist, wird die nächste aufgerufen. Das Hauptprogramm befindet sich am Ende des Scriptes. Das ist notwendig, da beim Scriptstart erst alle Funktionen geladen werden müssen, um verwendet werden zu können.

Hier die einzelnen Funktionen in der Reihenfolge, in der sie vom Hauptprogramm abgerufen werden.

  • defaultwerte_laden
  • verzeichnisstruktur_inifiles
  • hauptverzeichnis_festlegen
  • verzeichnisstruktur_hauptfiles
  • ini_file_pjx
  • hilfsprogramme_abfragen
  • desktop_datei_anlegen
  • hinweis

Funktionen

Schauen wir nun, was in den Funktionen geschieht:

defaultwerte_laden ()

Viele User werden ihre Aufnahmen, Videoclips und OpenOffice-Dateien an Orten abspeichern, die ihnen sinnvoll erscheinen. Hier kann der Nutzer diese Pfade eingegen. Ändert er nichts, werden Default-Einstellungen verwendet:

  • aufnahmeordner: Hier speichert das Aufnahmeprogramm (z.B. kaffeine) die DVB-Aufnahmen.
  • schablonenordner: Hier befinden sich die Druckschablonen für den DVD-Direktdruck. Wie solche Schablonen selber gebaut werden können, steht hier: DVD Direktdruck
  • clipordner: Hier werden die fertigen Videoclips gepeichert

verzeichnisstruktur_inifiles ()

Um die Kommunikation zwischen Arbeitsscript und GUI zu gewährleisten, müssen einige Dateien an fest definierten Orten stehen. Hierzu wird das Verzeichnis ~/.dvb_script_gui.ini erstellt, das einige Unterverzeichnisse besitzt:

  • fortschrittfenster: Diese Datei enthält den im Script festgelegten Text, der dann in der GUI angezeigt werden kann
  • debugfenster: In diese Datei wird die Standard-Fehlerausgabe der verwendeten Scriptbefehle umgeleitet. Sie kann in der GUI angezeigt werden.
  • pfad_hauptverzeichnis: Hier steht der Pfad zum Hauptverzeichnis drin, der im nächsten Schritt festgelegt wird
  • X.ini.film: Das ist die Initialisierungdatei für ProjectX
  • aufnahme-, schlablonen, clipordner: Hier stehen die vorhin festgelegten Default-Pfade
  • hilfsprogramme: Hier sind die Pfade zu den Hilfsprogrammen enthalten, die nachher noch abgefragt werden

hauptverzeichnis_festlegen ()

In dieser Funktion wird der Pfad zum und der Name des Hauptverzeichnisses abgefragt und angelegt. Die prinzipielle Wirkungsweise dieser Funktion kann hier nachgelesen werden: Basisverzeichnis_festlegen

verzeichnisstruktur_hauptfiles ()

Die vom Programm benötigte Verzeichnisstruktur wird nun erzeugt. Hier die Erläuterung zu einigen der Verzeichnisse:

  • ${hauptverzeichnis}/gui/guicode.kmdr: In diese Datei muß der User den Programmcode der Bedienoberfläche kopieren (siehe die Kurzanleitung oben)
  • ${hauptverzeichnis}/script/scriptcode.sh: In diese Datei muß der User den Programmcode des Arbeitsscriptes kopieren (siehe die Kurzanleitung oben)
  • ${hauptverzeichnis}/save: Enthält die fertig bearbeiteten Files (DVD-Struktur und/oder TS-Files), die noch gebrannt werden müssen
  • ${hauptverzeichnis}/screenshot: Hier findet man die Screenshots, die dann für den DVD-Direktdruck verwendet werden können
  • ${hauptverzeichnis}/temp/*: Temporäre Ordner, die beim Programmstart geleert werden

So noch nicht vorhanden, werden noch die Verzeichnisse für Aufnahhme, Videoclips und Druckschablonen angelegt.

ini_file_pjx ()

Die Initialisierungsdatei für ProjectX ist hier erklärt: X.ini

hilfsprogramme_abfragen ()

Die prinzipielle Wirkungsweise dieser Funktion kann hier nachgeschlagen werden: Programmerkennung

desktop_datei_anlegen ()

Eine Desktop-Datei ist eine Startdatei für ein Programm. Sie kann in KDE einfach erstellt werden, in dem man mit der rechten Maustaste auf die Arbeitsfläche klickt und im Kontextmenue dann auswählt: < Neu erstellen - Verknüpfen mit Programm > Dann einfach alles Notwendige ausfüllen.

Der Code einer solchen Startdatei kann mit kate angesehen werden. Hier die Erklärung der wichtigsten Einstellungen für unseren speziellen Fall, nämlich den Start des DVB-Script-Programmes:

  • Exec=kmdr-executor ${hauptverzeichnis}/gui/guicode.kmdr: Mit diesem Eintrag startet das Programm
  • Icon=kcmperformance: Eine kleine Rakete wurde als Icon für die Startdatei ausgewählt
  • Terminal=false: Das Programm nicht in einem Terminal ausführen

Das Startprogramm wird hier angelegt: ~/Desktop/DVB-Script

Nach erfolgreicher Installation kann das Programm durch Linksklick auf diese Datei gestartet werden.

Die Details: Der Guicode

In der Datei ${hauptverzeichnis}/gui/guicode.kmdr findet man den für die Bedienoberfläche verantwortlichen Programmcode. Dabei handelt es sich eigentlich um ein XML-File, dessen Struktur mit einem Texteditor (kate) angesehen werden kann.

Diese Datei kann auf zwei Arten, abhängig von den Intentionen des Nutzers, gestartet werden:

  • kmdr-executor ${hauptverzeichnis}/gui/guicode.kmdr Damit wird die GUI und damit das DVB-Programm gestartet
  • kmdr-editor ${hauptverzeichnis}/gui/guicode.kmdr Die Bedienoberfläche öffnet im Editor-Modus und kann verändert (umprogrammiert) werden

In einem seperaten Artikel wird gezeigt, wie mit Hilfe eines kmdr-Kommander-Programmes eine GUI für ein Shellscript erstellt werden kann. Die Benutzeroberfläche für das DVB-Script wird dann als Beispiel dienen und ausführlich erklärt werden.

Die Details: Der Scriptcode

Bei diesem Bashscript handelt es sich um eine angepasste Version des DVB-Wiki-Scriptes. Die Funktionsweise des Scriptes kann im Wikibuch nachgelesen werden werden. Einige Änderungen waren notwendig, um das Script zur Zusammenarbeit mit der GUI zu bewegen. Diese Änderungen werden hier kurz beschrieben:

Start der gewünschten Aufgabe

Das Script aus dem Wiki-Buch war ein einziges großes Script, das alles enthielt: Installation, Auswahl der Aufgaben, Ausführung der Aufgaben.

Die Auswahl der Aufgaben wird nunmehr in der GUI erledigt. Es wird dabei eine Kennzahl (z.B. 11 für das Bearbeiten und Brennen einer Video-DVD) an des Arbeitsscript übergeben. Diese Kennzahl wird in der schon vom DVB-Wiki-Script bekannten Variablen was_tun gespeichert. Damit kann die Struktur des restlichen Wiki-Scriptes ohne große Änderungen verwendet werden.

Die Übernahme der Kennzahl erfolgt mit dem Befehl

was_tun=$1

Altbekannt und problemlos also!

Texte zur Information des Benutzers

Um den User immer auf dem Laufenden zu halten, wie weit die Bearbeitung schon fortgeschritten ist, ist es notwendig, das Wiki-Buch-Script in einer Konsole zu starten. Das Konsolenfenster dient dann als Fortschrittfenster. Ein und Ausgaben erfolgen mit kdialog.

Im neuen Script wurde die Verwendung von kdialog für Ein- und Ausgaben beibehalten. Die Fortschrittanzeige dagegen wurde an die GUI übergeben.Und das funktioniert so:

Das Fortschrittfenster

Der Inhalt der Datei ~/.dvb_script_gui.ini/fortschrittfenster wird in der GUI periodisch abgefragt und dann in einem Fenster zur Anzeige gebracht. Diese Datei wird vom Arbeitsscript mit Text gefüllt:

Die Scriptfunktion fenster1 ()

fenster1 ()
{
echo "$1" > ~/.dvb_script_gui.ini/fortschrittfenster
}

Die Datei ~/.dvb_script_gui.ini/fortschrittfenster wird mit dem Text gefüllt, welcher beim Aufruf der Funktion übergeben wird. Der alte Inhalt der Datei wird dabei gnadenlos und ohne Rückfrage überschrieben.

Die Scriptfunktion fenster1_mehr ()

fenster1_mehr ()
{
echo "$1" >> ~/.dvb_script_gui.ini/fortschrittfenster
}

Der an diese Funktion übergebene Text wird an den schon in der Datei ~/.dvb_script_gui.ini/fortschrittfenster vorhandenen Text angehängt. So kann ein wunderschönes Fortschrittslog erzeugt werden.

Die Scriptfunktion programmende ()

programmende ()
{
fenster1_mehr ""
fenster1_mehr "Ende"
kdialog --passivepopup "Programmende" 1000
fenster1 ""
exit

An Hand dieser Funktion soll gezeigt werden, wie das Ganze funktioniert. Diese Funktion wird im Script dann aufgerufen, wenn durch irgend einen Umstand das Programm beendet werden soll. Sie macht dann Folgendes:

  • fenster1_mehr "": Der Funktion fenster1_mehr wird "nichts" übergeben. Das äußert sich in einer Leerzeile in der Datei ~/.dvb_script_gui.ini/fortschrittfenster und damit im Anzeigefenster in der GUI.
  • fenster1_mehr "Ende": Nun wird in die nächste Zeile der Datei ~/.dvb_script_gui.ini/fortschrittfenster der Text "Ende" geschrieben.
  • kdialog --passivepopup "Programmende" 1000: Mit einem Popup wird die Anzeige "Programmende" auf den Bildschirm gebracht. Diese Anzeige bleibt 1000s lang stehen, wenn nicht auf das Popup-Fenster geklickt wird. Ist diese Zeit abgelaufen oder ein Ungeduldiger hat doch auf das Popup geklickt, dann gehts weiter mit der Funktion fenster1.
  • fenster1 "": Es wird eine Leerzeile in die Datei ~/.dvb_script_gui.ini/fortschrittfenster geschrieben. Diesmal wird der alte Dateitext aber überschrieben. Der Inhalt der Datei wird also quasi gelöscht.
  • exit: Dasx Arbeitsscript wird verlassen und die Steuerung an die GUI übergeben. Dort kann eine neue Aufgabe angewählt werden oder Feierabend gemacht werden.

Alles klar?

Das Debugfenster

Ein zweites Textfenster ist in der GUI vorhanden, das ebenso funktioniert wie das Fortschrittfenster. Dazu wird die Datei ~/.dvb_script_gui.ini/debugfenster von der GUI periodisch abgefragt und der Inhalt dieser Datei im Debugfenster zur Anzeige gebracht.

Der Sinn des Ganzen ist es, Meldungen der gerade laufenden Hilfsprogramme in einem Log anzuzeigen. Dies kann gut zur Fehlersuche bei der Scriptprogrammierung oder auch nur als eine erweiterte Fortschrittanzeige genutzt werden, ganz nach den Notwendigkeiten und Wünschen des Nutzers.

Mit folgender Anweisung werden die Meldungen, welche die Hilfsprogramme über den Standard-Fehlerkanal absetzen, zeilenweise in die Datei ~/.dvb_script_gui.ini/debugfenster geschrieben:

exec 2> ~/.dvb_script_gui.ini/debugfenster

Playlist für mplayer

Playlist erzeugen

playlist_aktualisieren ()
{
find $clip_pfad/* > ~/.mplayer/playlist
}

Für Mplayer gibt es das versteckte Verzeichnis ~/.mplayer. In diesem Verzeichnis kann eine Wiedergabeliste angelegt werden mit dem Name playlist. Die abzuspielenden Videoclips müssen zeilenweise in dieser Datei stehen.

In der Variablen clip_pfad ist der Pfad zu dem Verzeichnis enthalten, in dem die fertig bearbeiteten Videoclips gespeichert werden. Diese Clips werden mit find gesucht und in die Datei ~/.mplayer/playlist geschrieben.

Diese Aktualisierung wird jedesmal ausgeführt, wenn im Programm eine neue Aufgabe gestartet wird.

Playlist abspielen

Die Wiedergabeliste kann mit folgendem Befehl abgespielt werden:

mplayer -xy 1280 -playlist ~/.mplayer/playlist -shuffle -vf pp=lb -fixed-vo
  • mplayer: Aufruf von mplayer.
  • -xy 1280: Grösse des Ausgabefensters. Es genügt die Angabe der horizontalen Pixelzahl, die vertikale Anzahl der Bildpunkte wird dann automatisch eingestellt.
  • ~/.mplayer/playlist: Hier ist die Wiedergabeliste gespeichert.

Alle Angaben, die nach der Playlist kommen, beziehen sich auf die komplette Wiedergabeliste, nicht auf ein einzelnes Lied aus der Liste.

  • -shuffle: Die Auswahl der Videoclips erfolgt nach dem Zufallsprinzip.
  • -vf pp=lb: Einschalten eines linearen Deinterlace-Filters.
  • -fixed-vo: Alle Clips werden in einem einzigen Fenster abgespielt.


Vom DVB zur DVD, die GUI: Anleitungen - Installation - GUI-Kommanderscript - Arbeitsscript - Dokumentation


Zurück zur Multimedia-Übersicht