Projectx oder vom DVB zur DVD part 2
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 |
Inhaltsverzeichnis
- 1 Vorwort
- 2 Welche Programme sind nötig?
- 3 ProjectX
- 4 Das Script
- 5 Beschreibung des Scriptes
- 6 Bedienungsanleitung
- 7 Ausschau
- 8 Links
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
- 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