Dvb script gui/scriptcode: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
K (Kategorie Multimedia entfernt)
(export VIDEO_FORMAT=PAL)
 
(17 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Box Test||
+
{{dvb_script_gui_testbox}}
OpenSuse 11.0 (32Bit) mit KDE 3.9.x <br>
 
OpenSuse 11.0 (32Bit) mit KDE 4.1
 
}}
 
  
 
{{dvb_script_gui_navibox}}
 
{{dvb_script_gui_navibox}}
Zeile 8: Zeile 5:
 
<pre>
 
<pre>
 
#!/bin/bash
 
#!/bin/bash
#was_tun=`echo @Self.item(0)`
 
was_tun=$1
 
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++BESCHREIBUNG ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
  
 
#Name: dvb_script_gui_arbeitsscript
 
#Name: dvb_script_gui_arbeitsscript
#Version: 0.0.4
+
#Version: 0.5.0
#Erstellungsdatum: 26.11.2008
+
#Erstellungsdatum: 9.1.2011
 
#Autor: escho (www.linux-club.de)
 
#Autor: escho (www.linux-club.de)
 
#Benutzung auf eigene Gefahr
 
#Benutzung auf eigene Gefahr
  
 
#Dieses Shell Script automatisiert weitgehend die Vorgänge, die nötig sind, um aus einer DVB-Aufnahme
 
#Dieses Shell Script automatisiert weitgehend die Vorgänge, die nötig sind, um aus einer DVB-Aufnahme
#eine abspielbare Video-DVD zu erzeugen. Es ist nur zusammen mit dem Installationsscript und dem GUI-Script lauffähig.
+
#eine abspielbare Video-DVD zu erzeugen. Es ist nur zusammen mit dem Installationsscript und dem GUI-Script lauffähig
  
#Neu in dieser Version:
+
# ---------------------------------Vorbereitungen-------------------------------------
#Sicherung gegen unbeabsichtigtes Überschreiben von schon vorhandenen Clips eingebaut
 
  
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Funktionen++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
+
# Übernahme von Kommander
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Vorbereitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
was_tun=`echo @Self.item(0)`
  
installation_erfolgt ()
+
# Voreinstellungen
{
+
 
if [ ! -s ~/.dvb_script_gui.ini/pfad_hauptverzeichnis ]
+
speed=8 #maximale Brenngeschwindigkeit
then
+
dvdgroesse=4600000000 #festgelegte Grösse der DVD in Byte
kdialog --error "Bitte zuerst Installation starten"
+
 
exit
+
export VIDEO_FORMAT=PAL
fi
+
 
}
+
# Die Hilfsprogramme
 +
 
 +
mplex=/usr/bin/mplex #Multiplexen
 +
dvdauthor=/usr/bin/dvdauthor #Dvd authorn
 +
normalize=/usr/bin/normalize #Ton auf definierten Pegel bringen
 +
ffmpeg=/usr/bin/ffmpeg #Spezielle mpeg-Bearbeitungsmöglichkeiten
 +
growisofs=/usr/bin/growisofs #Brennen
 +
tcrequant=/usr/bin/tcrequant #Requantisieren
 +
pjx=$HOME/DVB/PJX/Project-X/ProjectX.jar #ProjectX - CVS - edgar
 +
#pjx= ~/Project-X/ProjectX.jar # Projectx - CVS - Standard
  
voreinstellungen ()
+
# Verzeichnisse
{
 
brenngeschwindigkeit=8 #maximale Brenngeschwindigkeit
 
maxgroesse=4600000000 #DVD-Größe (für das Requantisieren)
 
}
 
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Für's Austesten °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
#°°°°Hauptverzeichnis°°°°
  
stop ()
+
hauptverzeichnis=$HOME/DVB_Script #Hauptverzeichnis
{
 
kdialog --msgbox "Programm unterbrochen"
 
exit
 
}
 
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Kommanderfenster °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# °°°°Arbeitsverzeichnisse°°°°
  
fenster1 ()
+
dvdstruktur=$hauptverzeichnis/dvdstruktur #fertige DVD-Struktur
{
+
sicherung=$hauptverzeichnis/sicherung #Noch zu brennende DVD-Struktur bzw. TS
echo "$1" > ~/.dvb_script_gui.ini/fortschrittfenster
+
tmp1=$hauptverzeichnis/tmp1 #temporärer Ordner
}
+
tmp2=$hauptverzeichnis/tmp2 #temporärer Ordner
 +
konfiguration=$hauptverzeichnis/konfiguration #für die x.ini
 +
kommander=$hauptverzeichnis/kommander #Kommunikation mit der GUI
  
fenster1_mehr ()
+
# °°°°Verzeichnis für die Videoclips°°°°
{
 
echo "$1" >> ~/.dvb_script_gui.ini/fortschrittfenster
 
}
 
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Abbruch °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
clip_verz=/daten/Videoclips/Clips
 +
# Überprüfung, ob die Hilfsprogramme installiert sind
  
benutzerabbruch ()
+
test=( $mplex $dvdauthor $normalize $ffmpeg $growisofs $tcrequant $pjx )
{
 
fenster1_mehr ""
 
fenster1_mehr "Abbruch durch den Benutzer."
 
programmende
 
}
 
  
funktionsabbruch ()
+
for var in ${test[*]}
{
+
do
fenster1_mehr ""
+
    if [ ! -e "$var" ]
fenster1_mehr "$1"
+
    then
programmende
+
kdialog --error "Das Hilfs-Programm $var wurde nicht gefunden. Bitte zuerst installieren"
}
+
exit
 +
    fi
 +
done
  
programmende ()
+
# Anlegen der Verzeichnisstruktur
{
 
fenster1_mehr ""
 
fenster1_mehr "Ende"
 
kdialog --passivepopup "Programmende" 1000
 
fenster1 ""
 
exit
 
}
 
  
 +
if [ ! -e "$hauptverzeichnis" ]
 +
then
 +
    mkdir $hauptverzeichnis
 +
    mkdir $dvdstruktur
 +
    mkdir $sicherung
 +
    mkdir $tmp1
 +
    mkdir $tmp2
 +
    mkdir $kommander
 +
    mkdir $konfiguration
 +
fi
  
variablen ()
+
if [ ! -e "$clip_verz" ]
{
+
then
hauptverzeichnis=`cat ~/.dvb_script_gui.ini/pfad_hauptverzeichnis`
+
    mkdir $clip_verz
 +
fi
  
name[0]=mplex
+
# Zugriffsdateien für das Debug- und das Fortschrittfenster anlegen (zur Anzeige in der GUI)
name[1]=tcrequant
 
name[2]=dvdauthor
 
name[3]=ProjectX.jar
 
name[4]=normalize
 
name[5]=ffmpeg
 
name[6]=growisofs
 
name[7]=vlc
 
name[8]=mplayer
 
  
pfad[0]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[0]`
+
touch $kommander/debug
pfad[1]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[1]`
+
touch $kommander/fortschritt
pfad[2]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[2]`
 
pfad[3]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[3]`
 
pfad[4]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[4]`
 
pfad[5]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[5]`
 
pfad[6]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[6]`
 
pfad[7]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[7]`
 
  
mplex=${pfad[0]}/${name[0]}
+
# Fehlermeldungen ins Debug-Fenster umleiten
tcrequant=${pfad[1]}/${name[1]}
 
dvdauthor=${pfad[2]}/${name[2]}
 
pjx=${pfad[3]}/${name[3]}
 
normalize=${pfad[4]}/${name[4]}
 
ffmpeg=${pfad[5]}/${name[5]}
 
growisofs=${pfad[6]}/${name[6]}
 
vlc=${pfad[7]}/${name[7]}
 
  
x_ini=~/.dvb_script_gui.ini/X.ini.film
+
exec 2> $hauptverzeichnis/kommander/debug
  
tmp_pfad1=${hauptverzeichnis}/temp/tmp1
+
# ----------------------------------Funktionen-------------------------------------
tmp_pfad2=${hauptverzeichnis}/temp/tmp2
 
dvdstruktur_pfad=${hauptverzeichnis}/temp/struktur
 
  
sicherungs_pfad=${hauptverzeichnis}/save
+
# °°°°Meldungen°°°°
screenshot_pfad=${hauptverzeichnis}/screenshot
 
  
aufnahme_pfad=`cat ~/.dvb_script_gui.ini/aufnahmeordner`
+
fortschrittfenster ()
direktdruck_pfad=`cat ~/.dvb_script_gui.ini/schablonenordner`
+
{
clip_pfad=`cat ~/.dvb_script_gui.ini/clipordner`
+
echo "$1" >> $kommander/fortschritt
 
}
 
}
  
playlist_aktualisieren ()
+
fenster_leeren ()
 
{
 
{
find $clip_pfad/* > ~/.mplayer/playlist
+
echo "" > $kommander/fortschritt
 +
echo "" > $kommander/debug
 
}
 
}
 +
# °°°° Programmende °°°°
  
loeschen_tmp ()
+
programmende ()
 
{
 
{
fenster1_mehr "Löschen tmp, kann etwas dauern ..."
+
kdialog --yesno "Programm beendet. Fensterinhalte löschen?"
rm -r ${hauptverzeichnis}/temp/tmp1/* 2>/dev/null
+
if [ $? = 0 ]
rm -r ${hauptverzeichnis}/temp/tmp2/* 2>/dev/null
+
then
rm -r ${hauptverzeichnis}/temp/struktur/* 2>/dev/null
+
fenster_leeren
 +
fi
 +
exit
 
}
 
}
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Auswahl der Eingangsdateien°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# °°°°Konfiguration°°°°
  
filmauswahl_dvd ()
+
konfiguration ()
 
{
 
{
brenn_pfad=${dvdstruktur_pfad}
+
echo "X.ini für ProjectX erzeugen"
filmauswahl
+
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" \
 +
> $konfiguration/x.ini
 
}
 
}
  
filmauswahl_ts ()
+
arbeitsordner_leeren ()
 
{
 
{
brenn_pfad=${tmp_pfad1}
+
fortschrittfenster "Löschen tmp, kann etwas dauern ..."
filmauswahl
+
rm -r -- $tmp1/* 2>/dev/null
 +
rm -r -- $tmp2/* 2>/dev/null
 +
rm -r -- $dvdstruktur/* 2>/dev/null
 
}
 
}
  
filmauswahl_clip ()
+
# °°°°Auswahl Quelldateien°°°°
{
 
filmauswahl
 
}
 
  
 
filmauswahl ()
 
filmauswahl ()
 
{
 
{
fenster1_mehr "Quelldatei auswählen ..."
+
fortschrittfenster "Quelldatei auswählen"
quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename "${aufnahme_pfad}"`
+
 
 +
case $was_tun in
 +
11) brenn_pfad=$dvdstruktur ;;
 +
12) brenn_pfad=$dvdstruktur ;;
 +
21) brenn_pfad=$tmp1 ;;
 +
22) brenn_pfad=$tmp1 ;;
 +
esac
 +
 
 +
quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename ~`
 
if [ $? != 0 ]
 
if [ $? != 0 ]
 
then
 
then
benutzerabbruch
+
fortschrittfenster "Abbruch durch den Benutzer"
 +
programmende
 
fi
 
fi
 
}
 
}
  
verzeichnisauswahl_dvd ()
+
verzeichnisauswahl ()
 
{
 
{
verzeichnistyp="*_dvd"
+
fortschrittfenster "Quelldatei auswählen"
verzeichnisauswahl
+
 
}
+
case $was_tun in
 +
13) verzeichnistyp="*_dvd" ;;
 +
23) verzeichnistyp="*_ts" ;;
 +
esac
  
verzeichnisauswahl_ts ()
+
anzahl_der_sicherungen=`find $sicherung/$verzeichnistyp -maxdepth 0 -type d | wc -l`
{
+
hilfsverzeichnis=`find $sicherung/$verzeichnistyp -maxdepth 0 -type d`
verzeichnistyp="*_ts"
 
verzeichnisauswahl
 
}
 
  
verzeichnisauswahl ()
 
{
 
fenster1_mehr "Quelldatei auswählem ..."
 
anzahl_der_sicherungen=`find $sicherungs_pfad/$verzeichnistyp -maxdepth 0 -type d | wc -l`
 
hilfsverzeichnis=`find $sicherungs_pfad/$verzeichnistyp -maxdepth 0 -type d`
 
 
case $anzahl_der_sicherungen in
 
case $anzahl_der_sicherungen in
0) funktionsabbruch "Es gibt nichts passendes zum Brennen. Das Script wird nun beendet." ;;
+
0) fortschrittfenster "Es gibt nichts passendes zum Brennen. Das Script wird nun beendet."
1) fenster1_mehr "Folgende Sicherung wird gebrannt: $hilfsverzeichnis"
+
programmende ;;
 +
1) fortschrittfenster "$hilfsverzeichnis"
 
verzeichnis=$hilfsverzeichnis ;;
 
verzeichnis=$hilfsverzeichnis ;;
 
*) verzeichnis=`kdialog --combobox "Welche Datei soll gebrannt werden?" $hilfsverzeichnis`
 
*) verzeichnis=`kdialog --combobox "Welche Datei soll gebrannt werden?" $hilfsverzeichnis`
 
if [ $? != 0 ]
 
if [ $? != 0 ]
 
then
 
then
benutzerabbruch
+
fortschrittfenster "Abbruch durch den Benutzer"
 +
programmende
 
fi ;;
 
fi ;;
 
esac
 
esac
 +
 
brenn_pfad=$verzeichnis
 
brenn_pfad=$verzeichnis
 
}
 
}
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Eingangsverarbeitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
 
  
#-----Schneiden und Demultiplexen-----
+
# °°°°Eingangsverarbeitung°°°°
 +
 
 +
# Schneiden und Demultiplexen
 
pjx_demux_gui ()
 
pjx_demux_gui ()
 
{
 
{
fenster1_mehr "ProjectX: Schneiden und demultiplexen"
+
fortschrittfenster "ProjectX: Schneiden und demultiplexen"
java -jar ${pjx} -demux -gui -ini $x_ini -out ${tmp_pfad1} -name film "$quelldatei"
+
java -jar $pjx -demux -gui -ini $konfiguration/x.ini -out $tmp1 -name film "$quelldatei"
 
}
 
}
  
#-----Schneiden und Wandeln nach TS-----
+
# Schneiden und Wandeln nach TS
 
pjx_ts_gui ()
 
pjx_ts_gui ()
 
{
 
{
fenster1_mehr "ProjectX: Schneiden und demultiplexen"
+
fortschrittfenster "ProjectX: Schneiden und demultiplexen"
java -jar ${pjx} -tots -gui -split 4300 -ini $x_ini -out ${tmp_pfad1} -name film "$quelldatei"
+
java -jar $pjx -tots -gui -split 4300 -ini $konfiguration/x.ini -out $tmp1 -name film "$quelldatei"
 
}
 
}
  
 
mpeg1_input ()
 
mpeg1_input ()
 
{
 
{
fenster1_mehr "ffmpeg: Decodierung Audio"
+
fortschrittfenster "ffmpeg: Decodierung Audio"
${ffmpeg} -i "${quelldatei}" ${tmp_pfad1}/film.mp2 -vcodec copy ${tmp_pfad1}/film.m1v
+
$ffmpeg -i "$quelldatei" $tmp1/film.mp2 -vcodec copy $tmp1/film.m1v
 
}
 
}
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Bearbeitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# °°°°°Bearbeitung°°°°
  
 
requantisieren ()
 
requantisieren ()
 
{
 
{
videogroesse=`du -bc ${tmp_pfad1}/*.m2v | cut -f1 | tail -n 1` #Berechnung des Requantisierungsfaktors
+
audio_video_summe=`du -bc $tmp1/*.ac3 $tmp1/*.mp2 $tmp1/*.m2v | cut -f1 | tail -n 1`
audio_summe=`du -bc ${tmp_pfad1}/*.ac3 ${tmp_pfad1}/*.mp2 | cut -f1 | tail -n 1`
+
if [ $audio_video_summe -ge $dvdgroesse ]
audio_video_summe=`du -bc ${tmp_pfad1}/*.ac3 ${tmp_pfad1}/*.mp2 ${tmp_pfad1}/*.m2v | cut -f1 | tail -n 1`
 
requantisierungsfaktor=`echo "scale=8 ; ${videogroesse}/$((maxgroesse-audio_summe))*1.04" | bc`
 
 
 
if [ $audio_video_summe -ge $maxgroesse ] #Wenn der Film zu gross für eine einzige DVD ist, Requantisierung anstossen
 
 
then
 
then
fenster1_mehr "tcrequant: Requantisieren mit Faktor ${requantisierungsfaktor}"
+
    fortschrittfenster "Der Film ist zu groß für eine DVD. Es wird requantisiert!"
${tcrequant} -d2 -i ${tmp_pfad1}/film.m2v -o ${tmp_pfad1}/film.requant -f ${requantisierungsfaktor}
+
    videogroesse=`du -bc $tmp1/*.m2v | cut -f1 | tail -n 1`
mv ${tmp_pfad1}/film.requant ${tmp_pfad1}/film.m2v
+
    audio_summe=`du -bc $tmp1/*.ac3 $hauptverzeichnis/tmp1/*.mp2 | cut -f1 | tail -n 1`
 +
    requantisierungsfaktor=`echo "scale=8 ; ${videogroesse}/$((dvdgroesse-audio_summe))*1.04" | bc`
 +
    ${tcrequant} -d2 -i $tmp1/film.m2v -o $tmp1/film.requant -f $requantisierungsfaktor
 +
    mv $tmp1/film.requant $tmp1/film.m2v
 
fi
 
fi
 
}
 
}
  
#........mp2-Ton auf einheitliche Lautstärke bringen (-12dBfs)..........
+
# mp2-Ton auf einheitliche Lautstärke bringen (-12dBfs)
 
normalisieren ()
 
normalisieren ()
 
{
 
{
mv ${tmp_pfad1}/film.mp2 ${tmp_pfad2}
+
mv $tmp1/film.mp2 $tmp2
rm ${hauptverzeichnis}/initialisierung/temp/tmp1/*.mp2
+
rm -- $tmp1/*.mp2
  
fenster1_mehr "ffmpeg: Ton decodieren"
+
fortschrittfenster "ffmpeg: Ton decodieren"
${ffmpeg} -i ${tmp_pfad2}/film.mp2 ${tmp_pfad2}/film.mp2.wav
+
$ffmpeg -i $tmp2/film.mp2 $tmp2/film.mp2.wav
  
fenster1_mehr "normalize: Ton normalisieren"
+
fortschrittfenster "normalize: Ton normalisieren"
${normalize} ${tmp_pfad2}/film.mp2.wav 2>~/.DVB_Script/fenster/Konsolenausgabe
+
$normalize $hauptverzeichnis/tmp2/film.mp2.wav
  
fenster1_mehr "ffmpeg: Ton encodieren"
+
fortschrittfenster "ffmpeg: Ton encodieren"
${ffmpeg} -i ${tmp_pfad2}/film.mp2.wav -acodec mp2 -ab 192k ${tmp_pfad1}/film.mp2
+
$ffmpeg -i $tmp2/film.mp2.wav -acodec mp2 -ab 192k $tmp1/film.mp2
  
rm ${hauptverzeichnis}/initialisierung/temp/tmp2/*
+
rm -- $tmp2/*
 
}
 
}
  
 
ac3_behalten ()
 
ac3_behalten ()
 
{
 
{
if [ ! -e ${hauptverzeichnis}/initialisierung/temp/tmp1/*.ac3 ]
+
if [ ! -e $tmp1/*.ac3 ]
 
then
 
then
funktionsabbruch "Der Clip enthält keinen AC3-Ton. Das Script wird nun beendet."
+
fortschrittfenster "Der Clip enthält keinen AC3-Ton. Das Script wird nun beendet."
 +
programmende
 
fi
 
fi
  
rm ${hauptverzeichnis}/initialisierung/temp/tmp1/*.mp2
+
rm -- $tmp1/*.mp2
 
}
 
}
  
 
mp2_behalten ()
 
mp2_behalten ()
 
{
 
{
if [ ! -e ${hauptverzeichnis}/initialisierung/temp/tmp1/*.mp2 ]
+
if [ ! -e $tmp1/*.mp2 ]
 
then
 
then
funktionsabbruch "Der Clip enthält keinen mp2-Ton. Das Script wird nun beendet."
+
fortschrittfenster "Der Clip enthält keinen mp2-Ton. Das Script wird nun beendet."
 +
programmende
 
fi
 
fi
  
rm ${hauptverzeichnis}/initialisierung/temp/tmp1/*.ac3
+
rm -- $tmp1/*.ac3
 
}
 
}
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Multiplexen, Codieren°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# °°°°Multiplexen, Codieren°°°°
  
 
multiplexen ()
 
multiplexen ()
 
{
 
{
fenster1_mehr "mplex: Multiplexen, kann etwas dauern ..."
+
fortschrittfenster "mplex: Multiplexen, kann etwas dauern ..."
 
mpeg1_video=
 
mpeg1_video=
 
mpeg2_video=
 
mpeg2_video=
Zeile 293: Zeile 291:
 
ac3_audio=
 
ac3_audio=
  
mpeg1_video=`find ${tmp_pfad1} | grep "m1v"`
+
mpeg1_video=`find $tmp1 | grep "m1v"`
mpeg2_video=`find ${tmp_pfad1} | grep "m2v"`
+
mpeg2_video=`find $tmp1 | grep "m2v"`
mp2_audio=`find ${tmp_pfad1} | grep "mp2"`
+
mp2_audio=`find $tmp1 | grep "mp2"`
ac3_audio=`find ${tmp_pfad1} | grep "ac3"`
+
ac3_audio=`find $tmp1 | grep "ac3"`
  
${mplex} -v1 -f8 -o ${tmp_pfad1}/film.mpg ${mpeg1_video} ${mpeg2_video} ${ac3_audio} ${mp2_audio}
+
$mplex -v1 -f8 -o $tmp1/film.mpg $mpeg1_video $mpeg2_video $ac3_audio $mp2_audio
  
if [ ! -e ${tmp_pfad1}/film.mpg ]
+
if [ ! -e $tmp1/film.mpg ]
 
then
 
then
funktionsabbruch "Es konnte keine Datei multiplext werden!"
+
fortschrittfenster "Es konnte keine Datei multiplext werden!"
 +
programmende
 
fi
 
fi
 
}
 
}
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Author'n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# °°°°Authorn°°°°
  
 
authoring_ohne_menue ()
 
authoring_ohne_menue ()
 
{
 
{
fenster1_mehr "dvdauthor: Erzeugen der DVD-Struktur"
+
fortschrittfenster "dvdauthor: Erzeugen der DVD-Struktur"
${dvdauthor} -o ${dvdstruktur_pfad} -t ${tmp_pfad1}/film.mpg  #VOBs und "Kapitel"-IFOs
+
$dvdauthor -o $dvdstruktur -t $tmp1/film.mpg  #VOBs und "Kapitel"-IFOs
${dvdauthor} -o ${dvdstruktur_pfad} -T #VIDEO_TS.BUP und VIDEO_TS.IFO
+
$dvdauthor -o $dvdstruktur -T #VIDEO_TS.BUP und VIDEO_TS.IFO
 
}
 
}
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Screenshots°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# °°°°Brennen°°°°
  
screenshot ()
+
# Video-DVD
{
 
fenster1_mehr "vlc: Screenshot"
 
rm ${hauptverzeichnis}/screenshot/* 2>/dev/null
 
${vlc} --no-audio --snapshot-path ${screenshot_pfad} dvd://${brenn_pfad}
 
}
 
 
 
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Brennen°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
 
 
 
#----------Video-DVD--------------
 
 
brennen_video_dvd ()
 
brennen_video_dvd ()
 
{
 
{
fenster1_mehr "growisofs: Video-DVD brennen"
+
fortschrittfenster "growisofs: Video-DVD brennen"
video_dvd_bereit
+
$growisofs  -dry-run -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
fenster1_mehr "Brennen beginnt"
+
while [ $? != 0 ]
${growisofs} -speed=${brenngeschwindigkeit} -dvd-compat -Z /dev/dvd -dvd-video ${brenn_pfad}
+
do
funktionsabbruch "Brennen fertig. Programm beendet"
 
}
 
 
 
video_dvd_bereit ()
 
{
 
${growisofs} -dry-run -speed=${brenngeschwindigkeit} -dvd-compat -Z /dev/dvd -dvd-video ${brenn_pfad}
 
if [ $? = 0 ]
 
then
 
return
 
else
 
 
kdialog --warningcontinuecancel "DVD nicht bereit"
 
kdialog --warningcontinuecancel "DVD nicht bereit"
if [ $? = 0 ]
+
if [ $? != 0 ]
 
then
 
then
video_dvd_bereit
+
fortschrittfenster "Abbruch durch den Benutzer"
else
+
programmende
benutzerabbruch
 
 
fi
 
fi
fi
+
$growisofs  -dry-run -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
 +
done
 +
fortschrittfenster "Brennen beginnt"
 +
$growisofs -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
 +
fortschrittfenster "Brennen fertig. Programm beendet"
 +
programmende
 
}
 
}
  
#--------------Daten-DVD------------
+
# Daten-DVD
 
brennen_ts ()
 
brennen_ts ()
 
{
 
{
fenster1_mehr "growisofs: Daten-DVD brennen"
+
fortschrittfenster "growisofs: Daten-DVD brennen"
dvdzahl=`find ${brenn_pfad} -type f | wc -l`
+
dvdzahl=`find $brenn_pfad -type f | wc -l`
fenster1_mehr ""
+
fortschrittfenster "Anzahl der notwendigen DVDs: $dvdzahl"
fenster1_mehr "Anzahl der notwendigen DVDs: ${dvdzahl}"
 
  
for((i=1; i<=${dvdzahl}; i++))
+
for((i=1; i<=$dvdzahl; i++))
 
do
 
do
loop_brennen_ts
+
$growisofs -dry-run -speed=$speed -Z /dev/dvd -allow-limited-size -R -J $brenn_pfad/"film($((i-1)))[remux].ts"
 +
while [ $? != 0 ]
 +
do
 +
kdialog --warningcontinuecancel "Bitte DVD Nr.: $i einlegen"
 +
if [ $? != 0 ]
 +
then
 +
fortschrittfenster "Abbruch durch den Benutzer"
 +
programmende
 +
fi
 +
$growisofs -dry-run -speed=$speed -Z /dev/dvd -allow-limited-size -R -J $brenn_pfad/"film($((i-1)))[remux].ts"
 +
done
 +
fortschrittfenster "Brennvorgang gestartet"
 +
$growisofs -speed=$speed -Z /dev/dvd -allow-limited-size -R -J $brenn_pfad/"film($((i-1)))[remux].ts"
 
done
 
done
funktionsabbruch "Brennen fertig. Programm beendet"
+
fortschrittfenster "Brennen fertig. Programm beendet"
}
+
programmende
 
 
loop_brennen_ts ()
 
{
 
daten_dvd_bereit
 
kdialog --msgbox "Bitte DVD Nr.: $i einlegen"
 
if [ $? = 0 ]
 
then
 
fenster1_mehr ""
 
fenster1_mehr "Brennvorgang gestartet"
 
${growisofs} -speed=${brenngeschwindigkeit} -Z /dev/dvd -allow-limited-size -R -J ${brenn_pfad}/"film($((i-1)))[remux].ts"
 
else
 
benutzerabbruch
 
fi
 
}
 
 
 
daten_dvd_bereit ()
 
{
 
${growisofs} -dry-run -speed=${brenngeschwindigkeit} -Z /dev/dvd -allow-limited-size -R -J ${brenn_pfad}/"film($((i-1)))[remux].ts"
 
if [ $? = 0 ]
 
then
 
return
 
else
 
kdialog --warningcontinuecancel "DVD nicht bereit"
 
if [ $? = 0 ]
 
then
 
loop_brennen_ts
 
else
 
benutzerabbruch
 
fi
 
fi
 
 
}
 
}
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Sichern°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
#°°°°Sichern°°°°
  
 
sichern_dvd_struktur ()
 
sichern_dvd_struktur ()
 
{
 
{
fenster1_mehr "Sichern der DVD-Stuktur"
+
fortschrittfenster "Sichern der DVD-Stuktur"
 
sicherungsordner="$(date +%Y%m%d%H%M%S)_dvd"
 
sicherungsordner="$(date +%Y%m%d%H%M%S)_dvd"
mkdir ${sicherungs_pfad}/${sicherungsordner}
+
mkdir $sicherung/$sicherungsordner
mv ${dvdstruktur_pfad}/* ${sicherungs_pfad}/${sicherungsordner}
+
mv $dvdstruktur/* $sicherung/$sicherungsordner
funktionsabbruch "Datei gesichert nach ${sicherungs_pfad}/${sicherungsordner}. Programm beendet"
+
fortschrittfenster "Datei gesichert nach $sicherung/$sicherungsordner. Programm beendet"
 +
programmende
 
}
 
}
  
 
sichern_ts ()
 
sichern_ts ()
 
{
 
{
fenster1_mehr "Sichern des TS-File"
+
fortschrittfenster "Sichern des TS-File"
 
sicherungsordner="$(date +%Y%m%d%H%M%S)_ts"
 
sicherungsordner="$(date +%Y%m%d%H%M%S)_ts"
mkdir ${sicherungs_pfad}/${sicherungsordner}
+
mkdir $sicherung/$sicherungsordner
mv ${tmp_pfad1}/*.ts ${sicherungs_pfad}/${sicherungsordner}
+
mv $tmp1/*.ts $sicherung/$sicherungsordner
funktionsabbruch "Datei gesichert nach ${sicherungs_pfad}/${sicherungsordner}. Programm beendet"
+
fortschrittfenster "Datei gesichert nach $sicherung/$sicherungsordner. Programm beendet"
 +
programmende
 
}
 
}
  
 
sichern_clip ()
 
sichern_clip ()
 
{
 
{
fenster1_mehr "Speichern des Videoclips"
+
fortschrittfenster "Speichern des Videoclips"
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${clip_pfad}`
+
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename $clip_verz`
 
if [ $? != 0 ]
 
if [ $? != 0 ]
 
then
 
then
benutzerabbruch
+
fortschrittfenster "Abbruch durch den Benutzer"
 +
programmende
 
fi
 
fi
  
if [ -e "${clipspeicher}" ]
+
if [ -e "$clipspeicher" ]
 
then
 
then
 
kdialog --yesno "Dieser Clip ist schon gespeichert. Überschreiben?"
 
kdialog --yesno "Dieser Clip ist schon gespeichert. Überschreiben?"
if [ $? = 0 ]
+
if [ $? != 0 ]
 
then
 
then
sichern_clip_ausfuehren
+
sichern_clip
 
fi
 
fi
sichern_clip
 
 
fi
 
fi
sichern_clip_ausfuehren
 
}
 
  
sichern_clip_ausfuehren ()
+
mv $tmp1/film.mpg "$clipspeicher"
{
+
fortschrittfenster "Videoclip gespeichert: $clipspeicher"
mv ${tmp_pfad1}/film.mpg "${clipspeicher}"
+
programmende
playlist_aktualisieren
 
funktionsabbruch "Videoclip gespeichert: ${clipspeicher}"
 
 
}
 
}
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Hauptprogramm++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
  
#-----Initialisierung-----
+
# --------------------------------Hauptprogramm------------------------------------
installation_erfolgt
 
  
exec 2> ~/.dvb_script_gui.ini/debugfenster
+
fenster_leeren
 +
konfiguration
 +
arbeitsordner_leeren
  
voreinstellungen
+
# Video-DVD
variablen
 
playlist_aktualisieren
 
loeschen_tmp
 
 
 
#-----untermenue_video_dvd-----
 
  
 
case $was_tun in
 
case $was_tun in
  
11) filmauswahl_dvd
+
11) filmauswahl
 
pjx_demux_gui
 
pjx_demux_gui
 
requantisieren
 
requantisieren
 
multiplexen
 
multiplexen
 
authoring_ohne_menue
 
authoring_ohne_menue
screenshot
 
 
brennen_video_dvd
 
brennen_video_dvd
 
programmende ;;
 
programmende ;;
  
12) filmauswahl_dvd
+
12) filmauswahl
 
pjx_demux_gui
 
pjx_demux_gui
 
requantisieren
 
requantisieren
Zeile 479: Zeile 436:
 
programmende ;;
 
programmende ;;
  
13) verzeichnisauswahl_dvd
+
13) verzeichnisauswahl
screenshot
 
 
brennen_video_dvd
 
brennen_video_dvd
 
programmende ;;
 
programmende ;;
 
esac
 
esac
  
#-----untermenue_ts-----
+
# Daten-DVD
  
 
case $was_tun in
 
case $was_tun in
  
21) filmauswahl_ts
+
21) filmauswahl
 
pjx_ts_gui
 
pjx_ts_gui
 
brennen_ts
 
brennen_ts
 
programmende ;;
 
programmende ;;
  
22) filmauswahl_ts
+
22) filmauswahl
 
pjx_ts_gui
 
pjx_ts_gui
 
sichern_ts
 
sichern_ts
 
programmende ;;
 
programmende ;;
  
23) verzeichnisauswahl_ts
+
23) verzeichnisauswahl
 
brennen_ts
 
brennen_ts
 
programmende ;;
 
programmende ;;
 
esac
 
esac
  
#-----untermenue_videoclip-----
+
# Videoclips
  
 
case $was_tun in
 
case $was_tun in
  
31) filmauswahl_clip
+
31) filmauswahl
 
pjx_demux_gui
 
pjx_demux_gui
 
multiplexen
 
multiplexen
Zeile 514: Zeile 470:
 
programmende ;;
 
programmende ;;
  
32) filmauswahl_clip
+
32) filmauswahl
 
pjx_demux_gui
 
pjx_demux_gui
 
ac3_behalten
 
ac3_behalten
Zeile 521: Zeile 477:
 
programmende ;;
 
programmende ;;
  
33) filmauswahl_clip
+
33) filmauswahl
 
pjx_demux_gui
 
pjx_demux_gui
 
mp2_behalten
 
mp2_behalten
Zeile 534: Zeile 490:
 
programmende ;;
 
programmende ;;
  
37) filmauswahl_clip
+
37) filmauswahl
 
pjx_demux_gui
 
pjx_demux_gui
 
mp2_behalten
 
mp2_behalten
Zeile 548: Zeile 504:
 
sichern_clip
 
sichern_clip
 
programmende ;;
 
programmende ;;
 
 
esac
 
esac
 
#----untermenue_direktdruck
 
 
case $was_tun in
 
 
81) oodraw -o $direktdruck_pfad/videodvd.odg ;;
 
82) oodraw -o $direktdruck_pfad/datendvd.odg ;;
 
esac
 
 
 
</pre>
 
</pre>
  

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

Diese Beschreibung wurde mit folgenden Distributionen getestet:

OpenSuse 11.0 (32Bit) mit KDE 3.9.x / 4.1 / 4.2
OpenSuse 11.1 (32Bit) mit KDE 4.3
OpenSuse 11.2 (32Bit) mit KDE 4.3 / 4.4
OpenSuse 11.3 (32Bit) mit KDE 4.5


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



#!/bin/bash

#Name: dvb_script_gui_arbeitsscript
#Version: 0.5.0
#Erstellungsdatum: 9.1.2011
#Autor: escho (www.linux-club.de)
#Benutzung auf eigene Gefahr

#Dieses Shell Script automatisiert weitgehend die Vorgänge, die nötig sind, um aus einer DVB-Aufnahme
#eine abspielbare Video-DVD zu erzeugen. Es ist nur zusammen mit dem Installationsscript und dem GUI-Script lauffähig

# ---------------------------------Vorbereitungen-------------------------------------

# Übernahme von Kommander

was_tun=`echo @Self.item(0)`

# Voreinstellungen

speed=8 #maximale Brenngeschwindigkeit
dvdgroesse=4600000000 #festgelegte Grösse der DVD in Byte

export VIDEO_FORMAT=PAL

# Die Hilfsprogramme

mplex=/usr/bin/mplex #Multiplexen
dvdauthor=/usr/bin/dvdauthor #Dvd authorn
normalize=/usr/bin/normalize #Ton auf definierten Pegel bringen
ffmpeg=/usr/bin/ffmpeg #Spezielle mpeg-Bearbeitungsmöglichkeiten
growisofs=/usr/bin/growisofs #Brennen
tcrequant=/usr/bin/tcrequant #Requantisieren
pjx=$HOME/DVB/PJX/Project-X/ProjectX.jar #ProjectX - CVS - edgar
#pjx= ~/Project-X/ProjectX.jar # Projectx - CVS - Standard

# Verzeichnisse

#°°°°Hauptverzeichnis°°°°

hauptverzeichnis=$HOME/DVB_Script #Hauptverzeichnis

# °°°°Arbeitsverzeichnisse°°°°

dvdstruktur=$hauptverzeichnis/dvdstruktur #fertige DVD-Struktur
sicherung=$hauptverzeichnis/sicherung #Noch zu brennende DVD-Struktur bzw. TS
tmp1=$hauptverzeichnis/tmp1 #temporärer Ordner
tmp2=$hauptverzeichnis/tmp2 #temporärer Ordner
konfiguration=$hauptverzeichnis/konfiguration #für die x.ini
kommander=$hauptverzeichnis/kommander #Kommunikation mit der GUI

# °°°°Verzeichnis für die Videoclips°°°°

clip_verz=/daten/Videoclips/Clips
# Überprüfung, ob die Hilfsprogramme installiert sind

test=( $mplex $dvdauthor $normalize $ffmpeg $growisofs $tcrequant $pjx )

for var in ${test[*]}
do
    if [ ! -e "$var" ]
    then
	kdialog --error "Das Hilfs-Programm $var wurde nicht gefunden. Bitte zuerst installieren"
	exit
    fi
done

# Anlegen der Verzeichnisstruktur

if [ ! -e "$hauptverzeichnis" ]
then
    mkdir $hauptverzeichnis
    mkdir $dvdstruktur
    mkdir $sicherung
    mkdir $tmp1
    mkdir $tmp2
    mkdir $kommander
    mkdir $konfiguration
fi

if [ ! -e "$clip_verz" ]
then
    mkdir $clip_verz
fi

# Zugriffsdateien für das Debug- und das Fortschrittfenster anlegen (zur Anzeige in der GUI)

touch $kommander/debug
touch $kommander/fortschritt

# Fehlermeldungen ins Debug-Fenster umleiten

exec 2> $hauptverzeichnis/kommander/debug

# ----------------------------------Funktionen-------------------------------------

# °°°°Meldungen°°°°

fortschrittfenster ()
{
echo "$1" >> $kommander/fortschritt
}

fenster_leeren ()
{
echo "" > $kommander/fortschritt
echo "" > $kommander/debug
}
# °°°° Programmende °°°°

programmende ()
{
kdialog --yesno "Programm beendet. Fensterinhalte löschen?"
if [ $? = 0 ]
then
	fenster_leeren
fi
exit
}

# °°°°Konfiguration°°°°

konfiguration ()
{
echo "X.ini für ProjectX erzeugen"
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" \
> $konfiguration/x.ini
}

arbeitsordner_leeren ()
{
fortschrittfenster "Löschen tmp, kann etwas dauern ..."
rm -r -- $tmp1/* 2>/dev/null
rm -r -- $tmp2/* 2>/dev/null
rm -r -- $dvdstruktur/* 2>/dev/null
}

# °°°°Auswahl Quelldateien°°°°

filmauswahl ()
{
fortschrittfenster "Quelldatei auswählen"

case $was_tun in
	11)	brenn_pfad=$dvdstruktur ;;
	12)	brenn_pfad=$dvdstruktur ;;
	21)	brenn_pfad=$tmp1 ;;
	22)	brenn_pfad=$tmp1 ;;
esac

quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename ~`
if [ $? != 0 ]
then
	fortschrittfenster "Abbruch durch den Benutzer"
	programmende
fi
}

verzeichnisauswahl ()
{
fortschrittfenster "Quelldatei auswählen"

case $was_tun in
	13)	verzeichnistyp="*_dvd" ;;
	23)	verzeichnistyp="*_ts" ;;
esac

anzahl_der_sicherungen=`find $sicherung/$verzeichnistyp -maxdepth 0 -type d | wc -l`
hilfsverzeichnis=`find $sicherung/$verzeichnistyp -maxdepth 0 -type d`

case $anzahl_der_sicherungen in
	0)	fortschrittfenster "Es gibt nichts passendes zum Brennen. Das Script wird nun beendet."
		programmende ;;
	1)	fortschrittfenster "$hilfsverzeichnis"
		verzeichnis=$hilfsverzeichnis ;;
	*)	verzeichnis=`kdialog --combobox "Welche Datei soll gebrannt werden?" $hilfsverzeichnis`
		if [ $? != 0 ]
		then
			fortschrittfenster "Abbruch durch den Benutzer"
			programmende
		fi ;;
esac

brenn_pfad=$verzeichnis
}

# °°°°Eingangsverarbeitung°°°°

# Schneiden und Demultiplexen
pjx_demux_gui ()
{
fortschrittfenster "ProjectX: Schneiden und demultiplexen"
java -jar $pjx -demux -gui -ini $konfiguration/x.ini -out $tmp1 -name film "$quelldatei"
}

# Schneiden und Wandeln nach TS
pjx_ts_gui ()
{
fortschrittfenster "ProjectX: Schneiden und demultiplexen"
java -jar $pjx -tots -gui -split 4300 -ini $konfiguration/x.ini -out $tmp1 -name film "$quelldatei"
}

mpeg1_input ()
{
fortschrittfenster "ffmpeg: Decodierung Audio"
$ffmpeg -i "$quelldatei" $tmp1/film.mp2 -vcodec copy $tmp1/film.m1v
}

# °°°°°Bearbeitung°°°°

requantisieren ()
{
audio_video_summe=`du -bc $tmp1/*.ac3 $tmp1/*.mp2 $tmp1/*.m2v | cut -f1 | tail -n 1`
if [ $audio_video_summe -ge $dvdgroesse ]
then
    fortschrittfenster "Der Film ist zu groß für eine DVD. Es wird requantisiert!"
    videogroesse=`du -bc $tmp1/*.m2v | cut -f1 | tail -n 1`
    audio_summe=`du -bc $tmp1/*.ac3 $hauptverzeichnis/tmp1/*.mp2 | cut -f1 | tail -n 1`
    requantisierungsfaktor=`echo "scale=8 ; ${videogroesse}/$((dvdgroesse-audio_summe))*1.04" | bc`
    ${tcrequant} -d2 -i $tmp1/film.m2v -o $tmp1/film.requant -f $requantisierungsfaktor
    mv $tmp1/film.requant $tmp1/film.m2v
fi
}

# mp2-Ton auf einheitliche Lautstärke bringen (-12dBfs)
normalisieren ()
{
mv $tmp1/film.mp2 $tmp2
rm -- $tmp1/*.mp2

fortschrittfenster "ffmpeg: Ton decodieren"
$ffmpeg -i $tmp2/film.mp2 $tmp2/film.mp2.wav

fortschrittfenster "normalize: Ton normalisieren"
$normalize $hauptverzeichnis/tmp2/film.mp2.wav

fortschrittfenster "ffmpeg: Ton encodieren"
$ffmpeg -i $tmp2/film.mp2.wav -acodec mp2 -ab 192k $tmp1/film.mp2

rm -- $tmp2/*
}

ac3_behalten ()
{
if [ ! -e $tmp1/*.ac3 ]
then
	fortschrittfenster "Der Clip enthält keinen AC3-Ton. Das Script wird nun beendet."
	programmende
fi

rm -- $tmp1/*.mp2
}

mp2_behalten ()
{
if [ ! -e $tmp1/*.mp2 ]
then
	fortschrittfenster "Der Clip enthält keinen mp2-Ton. Das Script wird nun beendet."
	programmende
fi

rm -- $tmp1/*.ac3
}

# °°°°Multiplexen, Codieren°°°°

multiplexen ()
{
fortschrittfenster "mplex: Multiplexen, kann etwas dauern ..."
mpeg1_video=
mpeg2_video=
mp2_audio=
ac3_audio=

mpeg1_video=`find $tmp1 | grep "m1v"`
mpeg2_video=`find $tmp1 | grep "m2v"`
mp2_audio=`find $tmp1 | grep "mp2"`
ac3_audio=`find $tmp1 | grep "ac3"`

$mplex -v1 -f8 -o $tmp1/film.mpg $mpeg1_video $mpeg2_video $ac3_audio $mp2_audio

if [ ! -e $tmp1/film.mpg ]
then
	fortschrittfenster "Es konnte keine Datei multiplext werden!"
	programmende
fi
}

# °°°°Authorn°°°°

authoring_ohne_menue ()
{
fortschrittfenster "dvdauthor: Erzeugen der DVD-Struktur"
$dvdauthor -o $dvdstruktur -t $tmp1/film.mpg  #VOBs und "Kapitel"-IFOs
$dvdauthor -o $dvdstruktur -T #VIDEO_TS.BUP und VIDEO_TS.IFO
}

# °°°°Brennen°°°°

# Video-DVD
brennen_video_dvd ()
{
fortschrittfenster "growisofs: Video-DVD brennen"
$growisofs  -dry-run -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
while [ $? != 0 ]
do
	kdialog --warningcontinuecancel "DVD nicht bereit"
	if [ $? != 0 ]
	then
		fortschrittfenster "Abbruch durch den Benutzer"
		programmende
	fi
	$growisofs  -dry-run -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
done
fortschrittfenster "Brennen beginnt"
$growisofs -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
fortschrittfenster "Brennen fertig. Programm beendet"
programmende
}

# Daten-DVD
brennen_ts ()
{
fortschrittfenster "growisofs: Daten-DVD brennen"
dvdzahl=`find $brenn_pfad -type f | wc -l`
fortschrittfenster "Anzahl der notwendigen DVDs: $dvdzahl"

for((i=1; i<=$dvdzahl; i++))
do
	$growisofs -dry-run -speed=$speed -Z /dev/dvd -allow-limited-size -R -J $brenn_pfad/"film($((i-1)))[remux].ts"
	while [ $? != 0 ]
	do
		kdialog --warningcontinuecancel "Bitte DVD Nr.: $i einlegen"
		if [ $? != 0 ]
		then
			fortschrittfenster "Abbruch durch den Benutzer"
			programmende
		fi
		$growisofs -dry-run -speed=$speed -Z /dev/dvd -allow-limited-size -R -J $brenn_pfad/"film($((i-1)))[remux].ts"
	done
	fortschrittfenster "Brennvorgang gestartet"
	$growisofs -speed=$speed -Z /dev/dvd -allow-limited-size -R -J $brenn_pfad/"film($((i-1)))[remux].ts"
done
fortschrittfenster "Brennen fertig. Programm beendet"
programmende
}

#°°°°Sichern°°°°

sichern_dvd_struktur ()
{
fortschrittfenster "Sichern der DVD-Stuktur"
sicherungsordner="$(date +%Y%m%d%H%M%S)_dvd"
mkdir $sicherung/$sicherungsordner
mv $dvdstruktur/* $sicherung/$sicherungsordner
fortschrittfenster "Datei gesichert nach $sicherung/$sicherungsordner. Programm beendet"
programmende
}

sichern_ts ()
{
fortschrittfenster "Sichern des TS-File"
sicherungsordner="$(date +%Y%m%d%H%M%S)_ts"
mkdir $sicherung/$sicherungsordner
mv $tmp1/*.ts $sicherung/$sicherungsordner
fortschrittfenster "Datei gesichert nach $sicherung/$sicherungsordner. Programm beendet"
programmende
}

sichern_clip ()
{
fortschrittfenster "Speichern des Videoclips"
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename $clip_verz`
if [ $? != 0 ]
then
	fortschrittfenster "Abbruch durch den Benutzer"
	programmende
fi

if [ -e "$clipspeicher" ]
then
	kdialog --yesno "Dieser Clip ist schon gespeichert. Überschreiben?"
	if [ $? != 0 ]
	then
		sichern_clip
	fi
fi

mv $tmp1/film.mpg "$clipspeicher"
fortschrittfenster "Videoclip gespeichert: $clipspeicher"
programmende
}

# --------------------------------Hauptprogramm------------------------------------

fenster_leeren
konfiguration
arbeitsordner_leeren

# Video-DVD

case $was_tun in

	11)	filmauswahl
		pjx_demux_gui
		requantisieren
		multiplexen
		authoring_ohne_menue
		brennen_video_dvd
		programmende ;;

	12)	filmauswahl
		pjx_demux_gui
		requantisieren
		multiplexen
		authoring_ohne_menue
		sichern_dvd_struktur
		programmende ;;

	13)	verzeichnisauswahl
		brennen_video_dvd
		programmende ;;
esac

# Daten-DVD

case $was_tun in

	21)	filmauswahl
		pjx_ts_gui
		brennen_ts
		programmende ;;

	22)	filmauswahl
		pjx_ts_gui
		sichern_ts
		programmende ;;

	23)	verzeichnisauswahl
		brennen_ts
		programmende ;;
esac

# Videoclips

case $was_tun in

	31)	filmauswahl
		pjx_demux_gui
		multiplexen
		sichern_clip
		programmende ;;

	32)	filmauswahl
		pjx_demux_gui
		ac3_behalten
		multiplexen
		sichern_clip
		programmende ;;

	33)	filmauswahl
		pjx_demux_gui
		mp2_behalten
		multiplexen
		sichern_clip
		programmende ;;

	34)	filmauswahl
		mpeg1_input
		multiplexen
		sichern_clip
		programmende ;;

	37)	filmauswahl
		pjx_demux_gui
		mp2_behalten
		normalisieren
		multiplexen
		sichern_clip
		programmende ;;

	38)	filmauswahl
		mpeg1_input
		normalisieren
		multiplexen
		sichern_clip
		programmende ;;
esac


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


Zurück zur Multimedia-Übersicht