Projectx oder vom DVB zur DVD part 2: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
K (Rechtschreibung verbessert)
(export VIDEO_FORMAT=PAL)
 
(16 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{UnderConstruction}}
+
{{blau|
 +
Dies ist der zweite Artikel der Tetralogie "vom DVB zur DVD".<br>
 +
Es wird gezeigt, wie die im ersten Artikel vorgestellte Methode zur Videoverarbeitung weiter vereinfacht werden kann. Dabei wird ProjectX in seiner aktuellen CVS-Version verwendet.}}
  
  
Projectx als Schaltzentrale bei der Verarbeitung eines DVB-Streams zu einer Video-DVD
 
 
  {{Box Test||
 
  {{Box Test||
Opensuse 10.3 32Bit mit KDE 3.5.x
+
Opensuse 11.1 32Bit mit KDE 4.x
 
}}
 
}}
  
{{Box Achtung||
+
==<font color="maroon"> Vorwort </font>==
Der Löschbefehl "rm" ist ein gefährlicher Befehl, der nur mit äußerster Sorgfalt verwendet werden sollte. Falsch angewendet kann er,
 
vor allem in Verbindung mit dem Sternzeichen, das komplette System löschen.
 
}}
 
 
 
==Einleitung==
 
 
 
Dieser Artikel basiert auf dem Wiki-Beitrag [[vom DVB zur DVD]]. Es wird gezeigt, wie die dort angewandte Methode
 
der Videobearbeitung vereinfacht und mit etwas Komfort versehen werden kann.
 
Als Schaltzentrale wird ''projectx'' verwendet.
 
  
==Notwendige Programme==
+
Dieser Artikel baut auf [[Vom DVB zur DVD|dem ersten Teil der Tetralogie]] auf. Es wird als vorausgesetzt, daß dieser erste Wiki-Artikel auch gelesen wurde. Folgende signifikanten Änderungen habe ich vorgenommen:
 +
*ProjectX wird in der CVS-Version verwendet und ist damit so aktuell, wie es nur sein kann
 +
*Wenn das Bearbeitungsergebnis nicht auf eine einzige DVD passt, wird das Videofile requantisiert
 +
*Das Brennen wird automatisch angestossen
 +
*Es werden auch ac3-Tondateien verarbeitet (Dolby digital)
  
Neben den im oben erwähnten Beitrag genannten Programmen wird benötigt:
+
==<font color="maroon"> Welche Programme sind nötig? </font>==
  
Xdialog
+
*kaffeine: Aufnahme und Wiedergabe
 +
**Installation mit Yast
 +
**Repository: packman
 +
*libxine1: Player-Engine, Packman-Version von xine
 +
**Installation mit Yast
 +
**Repository: packman
 +
*ProjectX: Schnitt, Synchronisation, Fehlerbereinigung, Demultiplexen
 +
**Installation: Muß heruntergeladen und Kompiliert werden
 +
**Anleitung zur Installation: Weiter unten im Artikel
 +
*tcrequant: Requantisieren
 +
**Installation mit Yast
 +
**Paketname: transcode (ab Version 1.1.5)
 +
**Repository: packman
 +
*mplex: Multiplexen
 +
**Installation mit Yast
 +
**Paketname: mjpegtools
 +
**Repository: packman
 +
*dvdauthor: Kommandozeilentool für das Authorn von DVDs
 +
**Installation mit Yast
 +
**Repository: packman
 +
*growisofs: Kommandozeilentool für das Brennen
 +
**Installation mit Yast
 +
**Paketname: dvd+rw-tools
 +
**Repository: packman
 +
*kdialog: Graphische Dialoge über die Kommandozeile
 +
**Installation mit Yast
 +
**Repository: packman
  
Xdialog ist im Packman-Repository enthalten und kann mit Yast installiert werden.
+
==<font color="maroon"> ProjectX </font>==
  
==Projectx==
+
ProjectX ist ein geniales Programm, um einen DVB-Stream für die Weiterverarbeitung zur Video-DVD vorzubereiten. Die Bedienung ist zwar etwas gewöhnungsbedürftig, was aber hauptsächlich an den vielfältigen Optionen liegen dürfte, die das Programm anbietet.
 
 
Projectx ist ein geniales Programm, um einen DVB-Stream für die Weiterverarbeitung zur Video-DVD vorzubereiten.
 
Die Bedienung ist zwar etwas gewöhnungsbedürftig, was aber hauptsächlich an den vielfältigen Optionen liegen dürfte, die das
 
Programm anbietet.
 
 
Beläßt man es jedoch bei den Standardeinstellungen, fährt man im allgemeinen gar nicht so schlecht.
 
Beläßt man es jedoch bei den Standardeinstellungen, fährt man im allgemeinen gar nicht so schlecht.
  
Zeile 37: Zeile 55:
 
===Fehlerbereinigung===
 
===Fehlerbereinigung===
  
Kaum eine DVB-Aufnahme wird frei von Fehlern sein. Solche Fehler, wie zum Beispiel Dropouts, werden von projectx automatisch beim Demultiplexen so bereinigt, daß sie bei der
+
Kaum eine DVB-Aufnahme wird frei von Fehlern sein. Solche Fehler, wie zum Beispiel Dropouts, werden von ProjectX automatisch beim Demultiplexen so bereinigt, daß sie bei der DVD-Erstellung nicht mehr stören.
DVD-Erstellung nicht mehr stören.
 
  
 
===Synchronisieren von Audio und Video===
 
===Synchronisieren von Audio und Video===
  
Werden die Rohdaten eines DVB-Streams abgespielt, so wird man feststellen, daß ein Zeitversatz zwischen Bild und Ton vorhanden ist. Ein bis zwei Sekunden
+
Werden die Rohdaten eines DVB-Streams abgespielt, so wird man feststellen, daß ein Zeitversatz zwischen Bild und Ton vorhanden ist. Ein bis zwei Sekunden sind hier keine Seltenheit. Kommen noch Störungen durch Übertragungsfehler dazu, wird darüber hinaus dieser Zeitversatz über den gesamten Film nicht konstant sein. ProjectX beseitigt beim Demultiplexen automatisch den Zeitversatz.
sind hier keine Seltenheit. Kommen noch Störungen durch Übertragungsfehler dazu, wird darüber hinaus dieser Zeitversatz über den gesamten Film nicht konstant sein.
 
Projectx beseitigt beim Demultiplexen automatisch den Zeitversatz.
 
  
 
===Schneiden des DVB-Streams===
 
===Schneiden des DVB-Streams===
  
Ein DVB-Stream setzt sich prinzipiell aus immer wiederkehrenden Bildergruppen (GOP - group of pictures) unterschiedlichen Inhalts zusammen. Ein solches GOP
+
Ein DVB-Stream setzt sich prinzipiell aus immer wiederkehrenden Bildergruppen (GOP - group of pictures) unterschiedlichen Inhalts zusammen. Ein solches GOP besteht aus verschiedenen Arten von Frames (Einzelbildern). Vereinfacht läßt sich sagen:
besteht aus unterschiedlichen Arten von Frames:
 
  
Ein I-Frame enthält ein komplettes komprimiertes Bild.
+
*Ein I-Frame enthält ein komplettes komprimiertes Bild.
Ein P-Frame enthält die Änderungen zum I-Frame.
+
*Ein P-Frame enthält die Änderungen zum I-Frame.
Ein B-Frame füllt die Lücken.
+
*Ein B-Frame füllt die Lücken.
  
 
Damit könnte ein GOP so aussehen: I B B B P B B B P B B B  
 
Damit könnte ein GOP so aussehen: I B B B P B B B P B B B  
  
Daraus wird ersichtlich, daß ein Schneiden des Streams zeitsparend nur an den I-Frames, also in unserem Beispiel an jedem zwölften Einzelbild möglich ist.
+
Es wird ersichtlich, daß ein Schneiden des Streams zeitsparend nur an den I-Frames, also in unserem Beispiel an jedem zwölften Einzelbild möglich ist. Schneidet man am den P- oder B-Frames, ist eine mehr oder weniger aufwändige Neucodierung erforderlich, die in der Zeit benötigt.
Schneidet man am den P- oder B-Frames, ist eine mehr oder weniger aufwändige Neucodierung erforderlich, die natürlich Zeit benötigt.
+
 
 +
ProjectX bietet die Möglichkeit, an den I-Frames zu schneiden. Das ist für den Heimanwender zur Beseitigung von Werbung ausreichend genau.
 +
 
 +
=== Installation der CVS-Version ===
 +
 
 +
Für diese Version existieren keine RPMs, sie muß also selbst heruntergeladen und kompiliert werden
 +
 
 +
====<font color="gray"> Herunterladen </font>====
 +
 
 +
Zum Herunterladen ist das Tool "CVS" erforderlich (Falls noch nicht vorhanden, vorher mit Yast installieren).
 +
 
 +
In einer Konsole wird danach folgender Befehl eingegeben:
 +
cvs -z3 -d:pserver:anonymous@project-x.cvs.sourceforge.net:/cvsroot/project-x co -P Project-X
 +
Dadurch wird im Heimatverzeichnis des Users ein Ordner mit dam Namen "Project-X" erstellt, der die notwendigen Dateien aus dem CVS-Repository enthält.
  
Projectx bietet die Möglichkeit, an den I-Frames zu schneiden. Das ist für den Heimanwender zur Beseitigung von Werbung ausreichend genau.
+
====<font color="gray"> Kompilieren </font>====
  
===Nachbearbeitung===
+
Folgende Anweisung in eine Konsole hacken, um in den Installationsordner von PJX zu kommen:
 +
cd ~/Project-X
 +
Hiermit die Programmdatei erstellen
 +
sh build.sh
 +
Diese Programmdatei befindet sich nun im Installationsordner:
 +
~/Project-X/ProjectX.jar
  
Projectx kann ein externes Programm zur Nachbearbeitung des Streams starten. Dabei werden die Audio- und die Videodatei übergeben.
+
====<font color="gray"> Ausführbar machen </font>====
  
===Zusammenfassung===
+
Die Programmdatei muß ausführbar gemacht werden:
  
Gerade die von projectx durchgeführte Fehlerbereinigung und Synchronisation lassen es angeraten erscheinen, den DVB-Stream erst mit diesem Programm zu
+
*Rechtsklick auf ~/Project-X/ProjectX.jar
bearbeiten, bevor ein anderes Tool gestartet wird.
+
**Eigenschaften
 +
**Berechtigungen
 +
**Bei Ausführbar das Kreuz machen
  
Es darf nicht unerwähnt bleiben, daß das Schneiden mit projectx etwas Übung erfordert. Übung nicht deswegen, weil es schwierig wäre, sondern weil der Ton nicht
+
====<font color="gray"> Weitere Infos </font>====
zur Kontrolle mit abgespielt wird. Avidemux bietet hier mehr Komfort.
 
Aber wie gesagt: Den Stream erst durch projectx jagen und dann mit avidemux weiterverarbeiten, um von vornherein mögliche Fehlerquellen auszuschließen.
 
  
Im hier vorgestellten Script wird der Schnitt mit projectx bevorzugt, da ein Großteil der Bearbeitung damit sozusagen "all in one" durchgeführt werden kann.
+
Detailliertere Informationen zur CVS-Version von ProjectX habe ich [[projectx|in diesem Wiki-Artikel]] zusammengefasst
  
==Grundeinstellungen==
+
==<font color="maroon"> Das Script </font>==
 +
<pre>
 +
#!/bin/bash
 +
 +
#++++++++++++++++++++++ProjectX oder vom DVB zur DVD+++++++++++++++++++++++++++++++
  
Diese Einstellungen müssen nur beim ersten Mal durchgeführt werden
+
#+++++++++++++++++++++++++++++Definition+++++++++++++++++++++++++++++++++++++++++++
  
===Ordner===
+
export VIDEO_FORMAT=PAL
  
Folgende Ordnerstruktur wurde gewählt, um die Bearbeitung übersichtlich zu halten und eine einfache Erweiterung zu gewährleisten:
+
#++++++++++++++++++++++++++Ordnerstruktur erzeugen+++++++++++++++++++++++++++++++++
 +
if [ ! -e ~/dvbscript_2 ]
 +
then
 +
    mkdir ~/dvbscript_2
 +
    mkdir ~/dvbscript_2/cache
 +
    mkdir ~/dvbscript_2/ini
 +
    mkdir ~/dvbscript_2/ergebnis
 +
fi
 +
 
 +
#++++++++++++++++++++++++++++++++++++++++X.ini+++++++++++++++++++++++++++++++++++++
 +
echo \
 +
"# Application
 +
Application.Agreement=1
 +
Application.Language=de
  
/filmbearbeitung
+
# CollectionPanel
/filmbearbeitung/tmp
+
CollectionPanel.Preview.SliderWidth=0
/filmbearbeitung/scripte
 
/filmbearbeitung/aufnahme
 
/filmbearbeitung/dvdstruktur
 
/filmbearbeitung/initfile
 
  
 +
# WindowPosition
 +
WindowPosition.Main.Width=9999
 +
WindowPosition.Main.Y=0
  
===Einstellung der Programme===
 
  
Mit der vorgestellten Ordnerstruktur ist die Einstellung der verwendeten Programme vorgegeben
+
# OptionPanel
 +
OptionPanel.NormalLog=0
 +
OptionPanel.closeOnEnd=1" \
 +
> ~/dvbscript_2/ini/X.ini
  
====kaffeine====
+
#++++++++++++++++++++++++++Arbeitsordner leeren++++++++++++++++++++++++++++++++++++
 +
rm ~/dvbscript_2/cache/*
 +
rm ~/dvbscript_2/ergebnis/VIDEO_TS/*
 +
rmdir ~/dvbscript_2/ergebnis/VIDEO_TS
 +
rmdir ~/dvbscript_2/ergebnis/AUDIO_TS
  
Aufnahmepfad festlegen
+
#++++++++++++++Quelledatei auswählen, schneiden und demultiplexen+++++++++++++++++++
kaffeine - DVB -DVB einrichten - Aufnahme - Aufnahmenverzeichnis: /filmbearbeitung/aufnahme
+
java -jar ~/Project-X/ProjectX.jar -demux -gui -ini ~/dvbscript_2/ini/X.ini -out ~/dvbscript_2/cache -name film
  
====projectx====
+
#++++++++++++++++++++++++++++++++++Requantisieren+++++++++++++++++++++++++++++++++++
 +
dvdgroesse=4600000000
 +
filmgroesse=`du -bc ~/dvbscript_2/cache/* | cut -f1 | tail -n 1`
 +
if [ $filmgroesse -ge $dvdgroesse ]
 +
then
 +
    videogroesse=`du -bc ~/dvbscript_2/cache/*.m2v | cut -f1 | tail -n 1`
 +
    audiogroesse=`du -bc ~/dvbscript_2/cache/*.ac3 ~/dvbscript_2/cache/*.mp2 | cut -f1 | tail -n 1`
 +
    requantisierungsfaktor=`echo "scale=8 ; ${videogroesse}/$((dvdgroesse-audiogroesse))*1.04" | bc`
 +
    /usr/bin/tcrequant -d 2 -i ~/dvbscript_2/cache/film.m2v -o ~/dvbscript_2/cache/film.requant -f ${requantisierungsfaktor}
 +
    mv ~/dvbscript_2/cache/film.requant ~/dvbscript_2/cache/film.m2v
 +
fi
  
Ausgabepfad festlegen
+
#++++++++++++++++++++++++++++++++Multiplexen++++++++++++++++++++++++++++++++++++++++
projectx - Liste der Ausgabepfade (rechts unten im Fenster) - /filmbearbeitung/tmp
+
mpeg2_video=
Einstellen: demultiplex
+
mp2_audio=
projectx - anpassen - demultiplex
+
ac3_audio=
Einstellen: Programm nach Ausführung nicht beenden
 
projectx - anpassen - Datei - Programm nach Ausführung beenden '''nicht auswählen'''
 
Einstellen: Nachbearbeitung
 
projectx - anpassen - Bearbeiten - Nachbearbeitung aktivieren '''auswählen'''
 
Einstellen: Externes Programm für Nachbearbeitung
 
projectx - Einstellungen - Einstellungen - Nachbearbeitung - Nachbearbeitung demultiplex - /filmbearbeitung/demultiplex.sh &2
 
Einstellen: Einstellungen nach Beendigung speichern
 
projectx - Einstellungen - Einstellungen beim Beenden speichern '''auswählen'''
 
  
====dvdauthor====
+
mpeg2_video=`find ~/dvbscript_2/cache | grep "m2v"`
 +
mp2_audio=`find ~/dvbscript_2/cache | grep "mp2"`
 +
ac3_audio=`find ~/dvbscript_2/cache | grep "ac3"`
 +
 
 +
/usr/bin/mplex -v1 -f8 -o ~/dvbscript_2/cache/film.mpg $mpeg2_video $ac3_audio $mp2_audio
 +
 
 +
#+++++++++++++++++++++++++++++++++Authorn++++++++++++++++++++++++++++++++++++++++++++
 +
/usr/bin/dvdauthor -o ~/dvbscript_2/ergebnis -t ~/dvbscript_2/cache/film.mpg
 +
/usr/bin/dvdauthor -o ~/dvbscript_2/ergebnis -T
 +
 
 +
#++++++++++++++++++++++++++++++++++Brennen+++++++++++++++++++++++++++++++++++++++++++
 +
/usr/bin/growisofs -speed=8 -dvd-compat -Z /dev/dvd -dvd-video ~/dvbscript_2/ergebnis
  
xlm-Datei erstellen (Neue Textdatei: /filmbearbeitung/initfile/dvdauthor.xml)
 
 
   
 
   
<dvdauthor>
+
#+++++++++++++++++++++++++++++++Script Ende++++++++++++++++++++++++++++++++++++++++++
    <vmgm />
+
kdialog --msgbox "ende"
    <titleset>
+
exit 0
        <titles>
+
</pre>
            <pgc>
+
 
                <vob file="/filmbearbeitung/tmp/film.mpg" />
+
==<font color="maroon"> Beschreibung des Scriptes </font>==
            </pgc>
+
 
        </titles>
+
===Definition===
    </titleset>
+
Das Videoformat wird auf PAL festgelegt
  </dvdauthor>
+
 
 +
===Ordnerstruktur erzeugen===
 +
Es werden ein Basisverzeichnis und notwendige Arbeitsordner erzeugt. Der Name des Basisverzeichnisses lautet:
 +
~/dvbscript_2.
 +
 
 +
===X.ini===
 +
Die Initialisierungsdatei für ProjectX wird erzeugt und in den entsprechenden Arbeitsordner geschrieben. Die Optionen bedeuten:
 +
 
 +
<pre>
 +
Application.Agreement=1
 +
    Wir erklären uns mit den Lizensbestimmungen von ProjectX einverstanden und werden deshalb von der GUI nicht mehr explizit um Zustimmung gebeten.
 +
 
 +
Application.Language=de
 +
    Die Sprache in ProjectX ist, wo es geht, Deutsch.
 +
 
 +
CollectionPanel.Preview.SliderWidth=0
 +
    Der Vorschau-Slider ist genauso lang wie das Vorschaufenster breit ist. So behält man einfacher den Überblick über die Schnittpunkte.
 +
 
 +
WindowPosition.Main.Width=9999
 +
WindowPosition.Main.Y=0
 +
    Damit läuft ProjectX de facto als Vollbild.
 +
 
 +
OptionPanel.NormalLog=0
 +
    Es wird keine Logdatei mitgeschrieben, da die nur stören würde.
 +
 
 +
OptionPanel.closeOnEnd=1
 +
    Wenn ProjectX mit seinen Aufgaben fertig ist, beendet es sich selbst. Das Script läuft dadurch automatisch weiter.
 +
</pre>
 +
 
 +
===Arbeitsordner leeren===
 +
Um unerwünschten Ergebnissen vorzubeugen, werden alle Arbeitsordner geleert.
 +
 
 +
===Quelledatei auswählen, schneiden und demultiplexen===
 +
Dazu wird diesmal ProjectX in der CVS-Version verwendet.
 +
 
 +
===Requantisieren===
 +
 
 +
Jetzt gibt es, oh Schreck, etwas Mathematik. Mathe ist nicht nur etwas, mit dem viele Normal-Sterbliche, egal welchen Alters, auf Kriegsfuß stehen. Mathe ist auch etwas, mit dem die Bash nicht so ohne weiteres umgehen kann, wäre da nicht ein kleines eingebautes Tool mit dem Namen "bc". Mit diesem Tool hat die Bash einen Taschenrechner.Und genau so einen Rechner brauchen wir in dieser Funktion.
 +
 
 +
Der Sinn dessen, was wir hier tun, ist es, einen Film so zu stauchen, daß er auf eine einzelne DVD passt. Dieses Stauchen wollen wir, etwas eleganter, Requantisieren nennen. Und der "Stauchfaktor", also um wieviel mal das Ausgangsmaterial kleiner gemacht werden soll, bekommt von uns den Namen "Requantisierungsfaktor".
 +
 
 +
Es macht wenig Sinn, ein Audiofile verkleinern zu wollen. Ein Videofile mit seinen etlichen GByte Größe bietet hier mehr Aussicht auf Erfolg.
 +
 
 +
Die Formel, nach der wir den Requantisierungsfaktor berechnen, lautet so:
 +
 
 +
Requantifizierungsfaktor = ("Größe des Videofiles" / ("Was auf die DVD maximal passt" - "Summe aller Audiofiles"))*1,04
 +
 
 +
Wieso diese Formel gerade so lautet, darf der geneigte Leser selber zu ergründen versuchen. Eine kleine Denksportaufgabe ist mit Sicherheit nicht die Schlechteste aller Freizeitbeschäftigungen. Ich verrate nur soviel, daß der Faktor 1,04 dafür da ist, die Verwaltung des Dateisystems auf der DVD zu berücksichtigen (Die einzelnen Ordner brauchen ja schließlich auch Platz).
 +
 
 +
Schauen wir uns also eine Umsetzung dieser Formel in der Bash an:
 +
 
 +
====<font color="gray"> Das passt maximal auf die DVD </font>====
 +
 
 +
  dvdgroesse=4600000000
 +
Die Variable dvdgroesse wird mit der Anzahl der Bytes belegt, die maximal auf die DVD passen (ca.)
 +
 
  
 +
====<font color="gray"> So gross ist der Film, wenn er aus ProjectX kommt </font>====
  
 +
filmgroesse=`du -bc ~/dvbscript_2/cache/* | cut -f1 | tail -n 1`
  
==Script==
+
<pre>
 +
du
 +
    Bashprogramm, welches den Platzverbrauch von Dateien schätzt
  
Es ist ein Shellscript folgenden Inhalts zu erstellen und unter dem Namen demultiplex.sh im Ordner /filmbearbeitung/scripte abzuspeichern. Das Script ist ausführbar zu machen.
+
-b
 +
    Ausgabe der Dateigröße in Byte
  
#!/bin/sh
+
-c
+
    Erzeugen einer Gesamtsumme (-b und -c sind zusammen gefasst nach -bc).
#Dieses Script wird von projectx nach dem Demultiplexen automatisch gestartet
+
    Dieses bc ist allerdings nicht identisch mit dem oben angepriesenen gleichnamigen Tachenrechner. Der kommt nachher noch.
+
 
#Zielordner leeren
+
~/dvbscript_2/cache/*
rm /filmbearbeitung/dvdstruktur/AUDIO_TS/*
+
    Von den Dateien im Cacheordner soll die Gesamtgroesse ermittelt werden.
  rm /filmbearbeitung/dvdstruktur/VIDEO_TS/*
+
 
  rmdir /filmbearbeitung/dvdstruktur/AUDIO_TS
+
tail -n 1
rmdir /filmbearbeitung/dvdstruktur/VIDEO_TS
+
    Nur die letzte Zeile dessen, was "du" ausgeben will, wird auch tatsächlich ausgegeben (nämlich unsere Gesamtgrösse)
+
 
#Multiplexen
+
 
  Xdialog --no-buttons --infobox "Multiplexen gestartet" 10 100
+
cut -f1
  /usr/bin/mplex -f8 -o /filmbearbeitung/tmp/film.mpg "$1" "$2"
+
    Von dieser letzten Zeile wird nur das erste Feld ausgegeben, also die reine Zahl
+
 
#Temporären Ordner leeren bis aus .mpg
+
filmgroesse=`....`
rm /filmbearbeitung/tmp/*.m2v
+
    Diese Groesse wird in die Variable $filmgroesse geschrieben
rm /filmbearbeitung/tmp/*.mp2
+
</pre>
  rm /filmbearbeitung/tmp/*.ac3
+
 
   
+
====<font color="gray"> Muß requantisiert werden</font>====
  #DVD-Struktur erstellen
+
 
  Xdialog --no-buttons --infobox "Erstellen der DVD-Struktur" 10 100
+
<pre>
  /usr/bin/dvdauthor -o /filmbearbeitung/dvdstruktur -x /filmbearbeitung/initfiles/dvdauthor.xml
+
if [ $filmgroesse -ge $dvdgroesse ]
+
then
#Bearbeitung fertig
+
    .....
Xdialog --msgbox "Bereit zum Brennen
+
fi
Die DVD-Struktur befindet sich in /filmbearbeitung/dvdstruktur
+
</pre>
Für einen Screenshot /filmbearbeitung/tmp/film.mpg verwenden" 10 100
+
 
   
+
Wenn die berechnete Grösse des Film die Kapazität der DVD (dvdgroesse) überschreitet, dann wird requantisiert.
  #Nun kann projectx beendet werden
+
 
pkill -P `pgrep projectx.sh`
+
 
 +
====<font color="gray"> Die Grösse des Video-Files </font>====
 +
 
 +
  videogroesse=`du -bc ~/dvbscript_2/cache/*.m2v | cut -f1 | tail -n 1`
 +
Nach dem gleichen Prinzip wie oben bei der filmgroesse wird nun die Grösse des Video-Files berechnet (.m2v)
 +
 
 +
 
 +
====<font color="gray"> Die Grösse der Audio-Files </font>====
 +
 
 +
  audiogroesse=`du -bc ~/dvbscript_2/cache/*.ac3 ~/dvbscript_2/cache/*.mp2 | cut -f1 | tail -n 1`
 +
Die Variable audiogroesse erhält die Gesamtgröße aller Audio-files (.ac3 und .m2v)
 +
 
 +
 
 +
====<font color="gray"> Berechnung des Requantisierungsfaktors </font>====
 +
 
 +
  requantisierungsfaktor=`echo "scale=8 ; ${videogroesse}/$((dvdgroesse-audiogroesse))*1.04" | bc`
 +
<pre>
 +
bc
 +
    Nun ist er endlich da, unser Taschenrechner
 +
 
 +
${videogroesse}/$((dvdgroesse-audiogroesse))*1.04
 +
    Diese Formel wird ausgerechnet
 +
 
 +
scale=8
 +
    auf 8 Nachkommastellen genau
 +
 
 +
echo
 +
    und der Nachwelt zu Verfügung gestellt,
 +
 
 +
requantisierungsfaktor=`....`
 +
    indem es in diese Variable geschrieben wird
 +
</pre>
 +
 
 +
====<font color="gray"> Ausführen der Requantisierung </font>====
 +
 
 +
  /usr/bin/tcrequant -d 2 -i ~/dvbscript_2/cache/film.m2v -o ~/dvbscript_2/cache/film.requant -f ${requantisierungsfaktor}
 +
 
 +
<pre>
 +
/usr/bin/tcrequant
 +
    Das Tool tcrequant wird aufgerufen.
 +
 
 +
-d 2
 +
    Es wird aufgefordert, bei der Arbeit etwas von dem zu erzählen, was es gerade tut (funktioniert im Moment nur eingeschränkt)
 +
 
 +
-i ~/dvbscript_2/cache/film.m2v
 +
    Dieses Video-File wird requantisiert
 +
 
 +
~/dvbscript_2/cache/film.requant
 +
    Und das hier ist das Ergebnis, also das gestauchte File
 +
 
 +
-f ${requantisierungsfaktor}
 +
    Um diesen Faktor, wird das Video-File verkleinert
 +
</pre>
 +
 
 +
====<font color="gray"> Sichern des Ergebnisses </font>====
 +
 
 +
  mv ~/dvbscript_2/cache/film.requant ~/dvbscript_2/cache/film.m2v
 +
Das alte Video-File wird mit dem neuen Video-File überschrieben.
 +
 
 +
===Multiplexen===
 +
 
 +
Es werden leere Variablen angelegt für die Video-, die ac3- und die mp2-Tondateien. Das muß sein, damit mplex später nicht meckert.
 +
mpeg2_video=
 +
mp2_audio=
 +
ac3_audio=
 +
 
 +
 
 +
Nun werden die Video- und Audio-Files gesucht
 +
mpeg2_video=`find ~/dvbscript_2/cache | grep "m2v"`
 +
  mp2_audio=`find ~/dvbscript_2/cache | grep "mp2"`
 +
  ac3_audio=`find ~/dvbscript_2/cache | grep "ac3"`
 +
 
 +
<pre>
 +
find
 +
    Suche Dateien
 +
 
 +
~/dvbscript_2/cache
 +
    im Cache-Ordner
 +
 
 +
grep "m2v"
 +
    die im Namen ein m2v enthalten, also Video-Dateien
 +
 
 +
mpeg2_video=`....`
 +
    und schreibe die Namen und Pfadangaben der Dateien in diese Variable
 +
</pre>
 +
 
 +
 
 +
Das eigentliche Multiplexen:
 +
  /usr/bin/mplex -v1 -f8 -o ~/dvbscript_2/cache/film.mpg $mpeg2_video $ac3_audio $mp2_audio
 +
 
 +
<pre>
 +
/usr/bin/mplex
 +
    Starte mplex
 +
 
 +
-v1
 +
    Das Programm soll uns ein paar Infos in die Konsole schreiben, wenn es loslegt
 +
 
 +
-f8
 +
    Das Multiplexen erfolgt in größter Annäherung an den DVD-Standard
 +
 
 +
$mpeg2_video $ac3_audio $mp2_audio
 +
      Die Bild- und Ton-Dateien, die in den Variablen vermerkt sind, werden multiplext
 +
 
 +
~/dvbscript_2/cache/film.mpg
 +
      Und das ist, was bei der Sache herauskommt
 +
</pre>
 +
 
 +
===Authorn===
 +
 
 +
  /usr/bin/dvdauthor -o ~/dvbscript_2/ergebnis -t ~/dvbscript_2/cache/film.mpg
 +
 
 +
<pre>
 +
/usr/bin/dvdauthor
 +
    Starte dvdauthor
 +
 
 +
-o ~/dvbscript_1/ergebnis
 +
    und sage ihm, wohin es die DVD-Struktur schreiben soll
 +
 
 +
-t
 +
    Die DVD enthält nur einen einzigen Titel (ich beschränke mich auf einen Film pro DVD)
 +
 
 +
~/dvbscript_1/cache/film.mpg
 +
    Verwende dieses mpg-File als Quelldatei
 +
</pre>
 +
 
 +
  /usr/bin/dvdauthor -T
 +
 
 +
<pre>
 +
/usr/bin/dvdauthor
 +
    Starte dvdauthor
 +
 
 +
-T
 +
    und erzeuge die TOC (Inhaltsverzeichnis)
 +
</pre>
 +
 
 +
===Brennen===
 +
 
 +
  /usr/bin/growisofs -speed=8 -dvd-compat -Z /dev/dvd -dvd-video ~/dvbscript_2/ergebnis
 +
 
 +
<pre>
 +
/usr/bin/growisofs
 +
    Starte das Brenntool
 +
 
 +
-speed=8
 +
    Es wird mit achtfacher Geschwindigkeit gebrannt
 +
 
 +
-dvd-compat
 +
    Nach dem Brennen wird die DVD abgeschlossen
 +
 
 +
-Z /dev/dvd
 +
    Es wird die erste Session auf die DVD gebrannt, die auch die einzige bleiben wird, da die DVD ja abgeschlossen wird
 +
 
 +
-dvd-video
 +
    Es wird ein UDF-Filesystem generiert, so wie des der Standard für die Video-DVD erfordert
 +
 
 +
~/dvbscript_2/ergebnis
 +
    Was hier drin steht, wird auf die DVD gebrannt
 +
</pre>
  
==Bedienungsanleitung==
+
==<font color="maroon"> Bedienungsanleitung </font>==
 +
[[bild:Projectx.png|thumb|right|Bedienoberfläche von ProjectX]]
 +
*Aufnahme mit kaffeine
 +
*leere DVD einlegen
 +
*Start des Bash-Scriptes in einem Terminal
 +
**Vom Script wird die CVS-Version von ProjectX gestartet
 +
**Der Reiter Dateiliste muß ausgewählt sein
 +
***Die zu bearbeitende Filmdatei auswählen (Plusknopf links unten)
 +
**Auswahl des Reiters Schnittsteuerung
 +
***Schnittpunkt mit dem Slider oder den Spulknöpfen (Navigation) anfahren
 +
***Schnittpunkt speichern (grünes Plus links oben im Feld Schnittpunkte)
 +
***Weiter mit dem nächsten Schnittpunkt
 +
**Das Ergebnis kann an dem Farbbalken unter dem Vorschaufenster betrachtet werden (was rot ist, fliegt raus)
 +
**Quickstart drücken
 +
Sollte man vergessen habe, eine leere DVD einzulegen, dann wird im Script das Brennen mit einer Fehlermeldung übersprungen. In diesem Fall kann die fertige DVD-Struktur im Ordner ~/dvbscript_2/ergebnis mit k3b auf DVD gebrannt werden, wie wir es vom ersten Teil der Tetralogie schon gewohnt sind.
  
1. Film aufnehmen mit kaffeine
+
==<font color="maroon"> Ausschau </font>==
2. Projectx starten, den aufgenommenen Film auswählen, schneiden, Quickstart drücken
 
3. Die DVD-Struktur mit k3b als Video-DVD brennen
 
  
==Weiterführende Informationen==
+
Dieses Script wird weiterentwickelt im [[Dvb wiki script|dritten Teil der Tetralogie]] und erhält im [[Dvb script gui|vierten Teil]] sogar eine Bedienoberfläche.
 
[[vom DVB zur DVD]] und die dort enthaltene Linkliste
 
  
==Zusätzliche Links==
+
==<font color="maroon"> Links </font>==
  
Xdialog http://xdialog.free.fr/
+
In der Artikelübersicht ist eine ausführliche Linkliste enthalten: [[vom DVB zur DVD: Vorstellung der Wiki-Artikel in dieser Serie]]
  
 
----
 
----
 
[[Multimedia|Zurück zur Multimedia-Übersicht]]
 
[[Multimedia|Zurück zur Multimedia-Übersicht]]
 +
[[Category:Multimedia]]
 +
[[Category:DVB-Weiterverarbeitung]]

Aktuelle Version vom 9. Januar 2011, 15:14 Uhr

Dies ist der zweite Artikel der Tetralogie "vom DVB zur DVD".
Es wird gezeigt, wie die im ersten Artikel vorgestellte Methode zur Videoverarbeitung weiter vereinfacht werden kann. Dabei wird ProjectX in seiner aktuellen CVS-Version verwendet.


Diese Beschreibung wurde mit folgenden Distributionen getestet:

Opensuse 11.1 32Bit mit KDE 4.x


Vorwort

Dieser Artikel baut auf dem ersten Teil der Tetralogie auf. Es wird als vorausgesetzt, daß dieser erste Wiki-Artikel auch gelesen wurde. Folgende signifikanten Änderungen habe ich vorgenommen:

  • ProjectX wird in der CVS-Version verwendet und ist damit so aktuell, wie es nur sein kann
  • Wenn das Bearbeitungsergebnis nicht auf eine einzige DVD passt, wird das Videofile requantisiert
  • Das Brennen wird automatisch angestossen
  • Es werden auch ac3-Tondateien verarbeitet (Dolby digital)

Welche Programme sind nötig?

  • kaffeine: Aufnahme und Wiedergabe
    • Installation mit Yast
    • Repository: packman
  • libxine1: Player-Engine, Packman-Version von xine
    • Installation mit Yast
    • Repository: packman
  • ProjectX: Schnitt, Synchronisation, Fehlerbereinigung, Demultiplexen
    • Installation: Muß heruntergeladen und Kompiliert werden
    • Anleitung zur Installation: Weiter unten im Artikel
  • tcrequant: Requantisieren
    • Installation mit Yast
    • Paketname: transcode (ab Version 1.1.5)
    • Repository: packman
  • mplex: Multiplexen
    • Installation mit Yast
    • Paketname: mjpegtools
    • Repository: packman
  • dvdauthor: Kommandozeilentool für das Authorn von DVDs
    • Installation mit Yast
    • Repository: packman
  • growisofs: Kommandozeilentool für das Brennen
    • Installation mit Yast
    • Paketname: dvd+rw-tools
    • Repository: packman
  • kdialog: Graphische Dialoge über die Kommandozeile
    • Installation mit Yast
    • Repository: packman

ProjectX

ProjectX ist ein geniales Programm, um einen DVB-Stream für die Weiterverarbeitung zur Video-DVD vorzubereiten. Die Bedienung ist zwar etwas gewöhnungsbedürftig, was aber hauptsächlich an den vielfältigen Optionen liegen dürfte, die das Programm anbietet. Beläßt man es jedoch bei den Standardeinstellungen, fährt man im allgemeinen gar nicht so schlecht.

Vier Eigenschaften lassen das Tool für den angedachten Verwendungszweck besonders geeignet erscheinen.

Fehlerbereinigung

Kaum eine DVB-Aufnahme wird frei von Fehlern sein. Solche Fehler, wie zum Beispiel Dropouts, werden von ProjectX automatisch beim Demultiplexen so bereinigt, daß sie bei der DVD-Erstellung nicht mehr stören.

Synchronisieren von Audio und Video

Werden die Rohdaten eines DVB-Streams abgespielt, so wird man feststellen, daß ein Zeitversatz zwischen Bild und Ton vorhanden ist. Ein bis zwei Sekunden sind hier keine Seltenheit. Kommen noch Störungen durch Übertragungsfehler dazu, wird darüber hinaus dieser Zeitversatz über den gesamten Film nicht konstant sein. ProjectX beseitigt beim Demultiplexen automatisch den Zeitversatz.

Schneiden des DVB-Streams

Ein DVB-Stream setzt sich prinzipiell aus immer wiederkehrenden Bildergruppen (GOP - group of pictures) unterschiedlichen Inhalts zusammen. Ein solches GOP besteht aus verschiedenen Arten von Frames (Einzelbildern). Vereinfacht läßt sich sagen:

  • Ein I-Frame enthält ein komplettes komprimiertes Bild.
  • Ein P-Frame enthält die Änderungen zum I-Frame.
  • Ein B-Frame füllt die Lücken.

Damit könnte ein GOP so aussehen: I B B B P B B B P B B B

Es wird ersichtlich, daß ein Schneiden des Streams zeitsparend nur an den I-Frames, also in unserem Beispiel an jedem zwölften Einzelbild möglich ist. Schneidet man am den P- oder B-Frames, ist eine mehr oder weniger aufwändige Neucodierung erforderlich, die in der Zeit benötigt.

ProjectX bietet die Möglichkeit, an den I-Frames zu schneiden. Das ist für den Heimanwender zur Beseitigung von Werbung ausreichend genau.

Installation der CVS-Version

Für diese Version existieren keine RPMs, sie muß also selbst heruntergeladen und kompiliert werden

Herunterladen

Zum Herunterladen ist das Tool "CVS" erforderlich (Falls noch nicht vorhanden, vorher mit Yast installieren).

In einer Konsole wird danach folgender Befehl eingegeben:

cvs -z3 -d:pserver:anonymous@project-x.cvs.sourceforge.net:/cvsroot/project-x co -P Project-X

Dadurch wird im Heimatverzeichnis des Users ein Ordner mit dam Namen "Project-X" erstellt, der die notwendigen Dateien aus dem CVS-Repository enthält.

Kompilieren

Folgende Anweisung in eine Konsole hacken, um in den Installationsordner von PJX zu kommen:

cd ~/Project-X

Hiermit die Programmdatei erstellen

sh build.sh

Diese Programmdatei befindet sich nun im Installationsordner:

~/Project-X/ProjectX.jar

Ausführbar machen

Die Programmdatei muß ausführbar gemacht werden:

  • Rechtsklick auf ~/Project-X/ProjectX.jar
    • Eigenschaften
    • Berechtigungen
    • Bei Ausführbar das Kreuz machen

Weitere Infos

Detailliertere Informationen zur CVS-Version von ProjectX habe ich in diesem Wiki-Artikel zusammengefasst

Das Script

#!/bin/bash
 
#++++++++++++++++++++++ProjectX oder vom DVB zur DVD+++++++++++++++++++++++++++++++

#+++++++++++++++++++++++++++++Definition+++++++++++++++++++++++++++++++++++++++++++

export VIDEO_FORMAT=PAL

#++++++++++++++++++++++++++Ordnerstruktur erzeugen+++++++++++++++++++++++++++++++++
if [ ! -e ~/dvbscript_2 ]
then
    mkdir ~/dvbscript_2
    mkdir ~/dvbscript_2/cache
    mkdir ~/dvbscript_2/ini
    mkdir ~/dvbscript_2/ergebnis
fi
  
#++++++++++++++++++++++++++++++++++++++++X.ini+++++++++++++++++++++++++++++++++++++
echo \
"# Application
Application.Agreement=1
Application.Language=de

# CollectionPanel
CollectionPanel.Preview.SliderWidth=0

# WindowPosition
WindowPosition.Main.Width=9999
WindowPosition.Main.Y=0


# OptionPanel
OptionPanel.NormalLog=0
OptionPanel.closeOnEnd=1" \
> ~/dvbscript_2/ini/X.ini

#++++++++++++++++++++++++++Arbeitsordner leeren++++++++++++++++++++++++++++++++++++
rm ~/dvbscript_2/cache/*
rm ~/dvbscript_2/ergebnis/VIDEO_TS/*
rmdir ~/dvbscript_2/ergebnis/VIDEO_TS
rmdir ~/dvbscript_2/ergebnis/AUDIO_TS

#++++++++++++++Quelledatei auswählen, schneiden und demultiplexen+++++++++++++++++++
java -jar ~/Project-X/ProjectX.jar -demux -gui -ini ~/dvbscript_2/ini/X.ini -out ~/dvbscript_2/cache -name film

#++++++++++++++++++++++++++++++++++Requantisieren+++++++++++++++++++++++++++++++++++
dvdgroesse=4600000000
filmgroesse=`du -bc ~/dvbscript_2/cache/* | cut -f1 | tail -n 1`
if [ $filmgroesse -ge $dvdgroesse ]
then
    videogroesse=`du -bc ~/dvbscript_2/cache/*.m2v | cut -f1 | tail -n 1`
    audiogroesse=`du -bc ~/dvbscript_2/cache/*.ac3 ~/dvbscript_2/cache/*.mp2 | cut -f1 | tail -n 1`
    requantisierungsfaktor=`echo "scale=8 ; ${videogroesse}/$((dvdgroesse-audiogroesse))*1.04" | bc`
    /usr/bin/tcrequant -d 2 -i ~/dvbscript_2/cache/film.m2v -o ~/dvbscript_2/cache/film.requant -f ${requantisierungsfaktor}
    mv ~/dvbscript_2/cache/film.requant ~/dvbscript_2/cache/film.m2v
fi

#++++++++++++++++++++++++++++++++Multiplexen++++++++++++++++++++++++++++++++++++++++
mpeg2_video=
mp2_audio=
ac3_audio=

mpeg2_video=`find ~/dvbscript_2/cache | grep "m2v"`
mp2_audio=`find ~/dvbscript_2/cache | grep "mp2"`
ac3_audio=`find ~/dvbscript_2/cache | grep "ac3"`

/usr/bin/mplex -v1 -f8 -o ~/dvbscript_2/cache/film.mpg $mpeg2_video $ac3_audio $mp2_audio

#+++++++++++++++++++++++++++++++++Authorn++++++++++++++++++++++++++++++++++++++++++++
/usr/bin/dvdauthor -o ~/dvbscript_2/ergebnis -t ~/dvbscript_2/cache/film.mpg
/usr/bin/dvdauthor -o ~/dvbscript_2/ergebnis -T

#++++++++++++++++++++++++++++++++++Brennen+++++++++++++++++++++++++++++++++++++++++++
/usr/bin/growisofs -speed=8 -dvd-compat -Z /dev/dvd -dvd-video ~/dvbscript_2/ergebnis

 
#+++++++++++++++++++++++++++++++Script Ende++++++++++++++++++++++++++++++++++++++++++
kdialog --msgbox "ende"
exit 0

Beschreibung des Scriptes

Definition

Das Videoformat wird auf PAL festgelegt

Ordnerstruktur erzeugen

Es werden ein Basisverzeichnis und notwendige Arbeitsordner erzeugt. Der Name des Basisverzeichnisses lautet:

~/dvbscript_2.

X.ini

Die Initialisierungsdatei für ProjectX wird erzeugt und in den entsprechenden Arbeitsordner geschrieben. Die Optionen bedeuten:

Application.Agreement=1
     Wir erklären uns mit den Lizensbestimmungen von ProjectX einverstanden und werden deshalb von der GUI nicht mehr explizit um Zustimmung gebeten.

Application.Language=de
     Die Sprache in ProjectX ist, wo es geht, Deutsch.

CollectionPanel.Preview.SliderWidth=0
     Der Vorschau-Slider ist genauso lang wie das Vorschaufenster breit ist. So behält man einfacher den Überblick über die Schnittpunkte.

WindowPosition.Main.Width=9999
WindowPosition.Main.Y=0
     Damit läuft ProjectX de facto als Vollbild.

OptionPanel.NormalLog=0
     Es wird keine Logdatei mitgeschrieben, da die nur stören würde.

OptionPanel.closeOnEnd=1
     Wenn ProjectX mit seinen Aufgaben fertig ist, beendet es sich selbst. Das Script läuft dadurch automatisch weiter.

Arbeitsordner leeren

Um unerwünschten Ergebnissen vorzubeugen, werden alle Arbeitsordner geleert.

Quelledatei auswählen, schneiden und demultiplexen

Dazu wird diesmal ProjectX in der CVS-Version verwendet.

Requantisieren

Jetzt gibt es, oh Schreck, etwas Mathematik. Mathe ist nicht nur etwas, mit dem viele Normal-Sterbliche, egal welchen Alters, auf Kriegsfuß stehen. Mathe ist auch etwas, mit dem die Bash nicht so ohne weiteres umgehen kann, wäre da nicht ein kleines eingebautes Tool mit dem Namen "bc". Mit diesem Tool hat die Bash einen Taschenrechner.Und genau so einen Rechner brauchen wir in dieser Funktion.

Der Sinn dessen, was wir hier tun, ist es, einen Film so zu stauchen, daß er auf eine einzelne DVD passt. Dieses Stauchen wollen wir, etwas eleganter, Requantisieren nennen. Und der "Stauchfaktor", also um wieviel mal das Ausgangsmaterial kleiner gemacht werden soll, bekommt von uns den Namen "Requantisierungsfaktor".

Es macht wenig Sinn, ein Audiofile verkleinern zu wollen. Ein Videofile mit seinen etlichen GByte Größe bietet hier mehr Aussicht auf Erfolg.

Die Formel, nach der wir den Requantisierungsfaktor berechnen, lautet so:

Requantifizierungsfaktor = ("Größe des Videofiles" / ("Was auf die DVD maximal passt" - "Summe aller Audiofiles"))*1,04

Wieso diese Formel gerade so lautet, darf der geneigte Leser selber zu ergründen versuchen. Eine kleine Denksportaufgabe ist mit Sicherheit nicht die Schlechteste aller Freizeitbeschäftigungen. Ich verrate nur soviel, daß der Faktor 1,04 dafür da ist, die Verwaltung des Dateisystems auf der DVD zu berücksichtigen (Die einzelnen Ordner brauchen ja schließlich auch Platz).

Schauen wir uns also eine Umsetzung dieser Formel in der Bash an:

Das passt maximal auf die DVD

dvdgroesse=4600000000

Die Variable dvdgroesse wird mit der Anzahl der Bytes belegt, die maximal auf die DVD passen (ca.)


So gross ist der Film, wenn er aus ProjectX kommt

filmgroesse=`du -bc ~/dvbscript_2/cache/* | cut -f1 | tail -n 1`
du
     Bashprogramm, welches den Platzverbrauch von Dateien schätzt

-b
     Ausgabe der Dateigröße in Byte

-c
     Erzeugen einer Gesamtsumme (-b und -c sind zusammen gefasst nach -bc).
     Dieses bc ist allerdings nicht identisch mit dem oben angepriesenen gleichnamigen Tachenrechner. Der kommt nachher noch.

~/dvbscript_2/cache/*
     Von den Dateien im Cacheordner soll die Gesamtgroesse ermittelt werden.

tail -n 1
     Nur die letzte Zeile dessen, was "du" ausgeben will, wird auch tatsächlich ausgegeben (nämlich unsere Gesamtgrösse)


cut -f1
     Von dieser letzten Zeile wird nur das erste Feld ausgegeben, also die reine Zahl

filmgroesse=`....`
     Diese Groesse wird in die Variable $filmgroesse geschrieben

Muß requantisiert werden

if [ $filmgroesse -ge $dvdgroesse ]
then
     .....
fi

Wenn die berechnete Grösse des Film die Kapazität der DVD (dvdgroesse) überschreitet, dann wird requantisiert.


Die Grösse des Video-Files

videogroesse=`du -bc ~/dvbscript_2/cache/*.m2v | cut -f1 | tail -n 1`

Nach dem gleichen Prinzip wie oben bei der filmgroesse wird nun die Grösse des Video-Files berechnet (.m2v)


Die Grösse der Audio-Files

audiogroesse=`du -bc ~/dvbscript_2/cache/*.ac3 ~/dvbscript_2/cache/*.mp2 | cut -f1 | tail -n 1`

Die Variable audiogroesse erhält die Gesamtgröße aller Audio-files (.ac3 und .m2v)


Berechnung des Requantisierungsfaktors

requantisierungsfaktor=`echo "scale=8 ; ${videogroesse}/$((dvdgroesse-audiogroesse))*1.04" | bc`
bc
     Nun ist er endlich da, unser Taschenrechner

${videogroesse}/$((dvdgroesse-audiogroesse))*1.04
     Diese Formel wird ausgerechnet

scale=8
     auf 8 Nachkommastellen genau

echo
     und der Nachwelt zu Verfügung gestellt,

requantisierungsfaktor=`....`
     indem es in diese Variable geschrieben wird 

Ausführen der Requantisierung

/usr/bin/tcrequant -d 2 -i ~/dvbscript_2/cache/film.m2v -o ~/dvbscript_2/cache/film.requant -f ${requantisierungsfaktor}
/usr/bin/tcrequant
     Das Tool tcrequant wird aufgerufen.

-d 2
     Es wird aufgefordert, bei der Arbeit etwas von dem zu erzählen, was es gerade tut (funktioniert im Moment nur eingeschränkt)

-i ~/dvbscript_2/cache/film.m2v
     Dieses Video-File wird requantisiert

~/dvbscript_2/cache/film.requant
     Und das hier ist das Ergebnis, also das gestauchte File

-f ${requantisierungsfaktor}
     Um diesen Faktor, wird das Video-File verkleinert

Sichern des Ergebnisses

mv ~/dvbscript_2/cache/film.requant ~/dvbscript_2/cache/film.m2v

Das alte Video-File wird mit dem neuen Video-File überschrieben.

Multiplexen

Es werden leere Variablen angelegt für die Video-, die ac3- und die mp2-Tondateien. Das muß sein, damit mplex später nicht meckert.

mpeg2_video=
mp2_audio=
ac3_audio=


Nun werden die Video- und Audio-Files gesucht

mpeg2_video=`find ~/dvbscript_2/cache | grep "m2v"`
mp2_audio=`find ~/dvbscript_2/cache | grep "mp2"`
ac3_audio=`find ~/dvbscript_2/cache | grep "ac3"`
find
     Suche Dateien

~/dvbscript_2/cache
     im Cache-Ordner

grep "m2v"
     die im Namen ein m2v enthalten, also Video-Dateien

mpeg2_video=`....`
     und schreibe die Namen und Pfadangaben der Dateien in diese Variable


Das eigentliche Multiplexen:

/usr/bin/mplex -v1 -f8 -o ~/dvbscript_2/cache/film.mpg $mpeg2_video $ac3_audio $mp2_audio
/usr/bin/mplex
     Starte mplex

-v1
     Das Programm soll uns ein paar Infos in die Konsole schreiben, wenn es loslegt

-f8
     Das Multiplexen erfolgt in größter Annäherung an den DVD-Standard

$mpeg2_video $ac3_audio $mp2_audio
      Die Bild- und Ton-Dateien, die in den Variablen vermerkt sind, werden multiplext

~/dvbscript_2/cache/film.mpg
      Und das ist, was bei der Sache herauskommt

Authorn

/usr/bin/dvdauthor -o ~/dvbscript_2/ergebnis -t ~/dvbscript_2/cache/film.mpg
/usr/bin/dvdauthor
     Starte dvdauthor

-o ~/dvbscript_1/ergebnis
     und sage ihm, wohin es die DVD-Struktur schreiben soll

-t
     Die DVD enthält nur einen einzigen Titel (ich beschränke mich auf einen Film pro DVD)

~/dvbscript_1/cache/film.mpg
     Verwende dieses mpg-File als Quelldatei
/usr/bin/dvdauthor -T
/usr/bin/dvdauthor
     Starte dvdauthor

-T
     und erzeuge die TOC (Inhaltsverzeichnis)

Brennen

/usr/bin/growisofs -speed=8 -dvd-compat -Z /dev/dvd -dvd-video ~/dvbscript_2/ergebnis
/usr/bin/growisofs
     Starte das Brenntool

-speed=8
     Es wird mit achtfacher Geschwindigkeit gebrannt

-dvd-compat
     Nach dem Brennen wird die DVD abgeschlossen

-Z /dev/dvd
     Es wird die erste Session auf die DVD gebrannt, die auch die einzige bleiben wird, da die DVD ja abgeschlossen wird

-dvd-video
     Es wird ein UDF-Filesystem generiert, so wie des der Standard für die Video-DVD erfordert

~/dvbscript_2/ergebnis
     Was hier drin steht, wird auf die DVD gebrannt

Bedienungsanleitung

Bedienoberfläche von ProjectX
  • Aufnahme mit kaffeine
  • leere DVD einlegen
  • Start des Bash-Scriptes in einem Terminal
    • Vom Script wird die CVS-Version von ProjectX gestartet
    • Der Reiter Dateiliste muß ausgewählt sein
      • Die zu bearbeitende Filmdatei auswählen (Plusknopf links unten)
    • Auswahl des Reiters Schnittsteuerung
      • Schnittpunkt mit dem Slider oder den Spulknöpfen (Navigation) anfahren
      • Schnittpunkt speichern (grünes Plus links oben im Feld Schnittpunkte)
      • Weiter mit dem nächsten Schnittpunkt
    • Das Ergebnis kann an dem Farbbalken unter dem Vorschaufenster betrachtet werden (was rot ist, fliegt raus)
    • Quickstart drücken

Sollte man vergessen habe, eine leere DVD einzulegen, dann wird im Script das Brennen mit einer Fehlermeldung übersprungen. In diesem Fall kann die fertige DVD-Struktur im Ordner ~/dvbscript_2/ergebnis mit k3b auf DVD gebrannt werden, wie wir es vom ersten Teil der Tetralogie schon gewohnt sind.

Ausschau

Dieses Script wird weiterentwickelt im dritten Teil der Tetralogie und erhält im vierten Teil sogar eine Bedienoberfläche.

Links

In der Artikelübersicht ist eine ausführliche Linkliste enthalten: vom DVB zur DVD: Vorstellung der Wiki-Artikel in dieser Serie


Zurück zur Multimedia-Übersicht