Projectx oder vom DVB zur DVD part 2

Aus Linupedia.org
Version vom 5. November 2009, 20:40 Uhr von Escho (Diskussion | Beiträge) (Einbau des neuen Scriptes)
Wechseln zu: Navigation, Suche
Höhe=24px
Achtung dieser Artikel ist noch in Arbeit und dient vorläufig nur als Vorlage. Dieser Beitrag zu Linux oder der Abschnitt ist in Bearbeitung. Weitere Informationen findest du hier. Der Ersteller arbeitet an dem Beitrag oder Abschnitt und entsorgt den Wartungsbaustein spätestens 3 Tage nach der letzten Bearbeitung. Änderungen außer Rechtschreibkorrekturen ohne Absprache mit dem Urspungsautor sind möglichst zu vermeiden, solange dieser Baustein noch innerhalb der genannten Frist aktiviert ist.


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.
  • Das Videofile wird nötigenfalls requantisiert
  • Das Brennen wird automatisch angestossen
  • Es werden auch ac3-Tondateien verarbeitet (Dolby-Sourround)

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 (Muss selbst kompiliert werden und zwar so: projectx )
  • 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: OSS)

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. Vereinfacht kann man also feststellen:

  • 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 Regel viel 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.

Das Script

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

#++++++++++++++++++++++++++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

# 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 /usr/share/java/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

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