Dvb script gui/scriptcode: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(Fehler in Funktion normalisieren () beseitigt)
(Version 0.1.0)
Zeile 8: Zeile 8:
 
<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.6
+
#Version: 0.1.0
#Erstellungsdatum: 31.12.2008
+
#Erstellungsdatum: 2.1.2009
 
#Autor: escho (www.linux-club.de)
 
#Autor: escho (www.linux-club.de)
 
#Benutzung auf eigene Gefahr
 
#Benutzung auf eigene Gefahr
Zeile 22: Zeile 19:
  
 
#Neu in dieser Version:
 
#Neu in dieser Version:
#Fehler in Funktion normalisieren () beseitigt
+
#Anpassung an die neue GUI, Codevereinfachung, neue Verzeichnisstruktur, Integration in ein Script-Widget der GUI
  
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Funktionen++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
+
# ---------------------------------Vorbereitungen-------------------------------------
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Vorbereitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# Übernahme von Kommander
  
installation_erfolgt ()
+
was_tun=`echo @Self.item(0)`
{
+
 
if [ ! -s ~/.dvb_script_gui.ini/pfad_hauptverzeichnis ]
+
# Voreinstellungen
 +
 
 +
aufnahme=~/Aufnahme
 +
druckschablonen=~/Druckschablonen
 +
videoclips=~/Videoclips
 +
 
 +
speed=8
 +
dvdgroesse=4600000000
 +
 
 +
# Hauptverzeichnis festlegen
 +
 
 +
mkdir ~/.dvb_script_kommander
 +
 
 +
if [ ! -e ~/.dvb_script_kommander/hauptverzeichnis ]
 
then
 
then
kdialog --error "Bitte zuerst Installation starten"
+
auswahl=`kdialog --caption "Name des Hauptverzeichnisses eingeben" --inputbox ~/ dvb_script_kommander`
exit
+
if [ $? = 0 ]
 +
then
 +
hauptverzeichnis=~/`echo $auswahl | tr -d " *~."`
 +
if [ -e ${hauptverzeichnis} ]
 +
then
 +
kdialog --error "$hauptverzeichnis existiert schon!"
 +
exit
 +
fi
 +
echo ${hauptverzeichnis} > ~/.dvb_script_kommander/hauptverzeichnis
 +
else
 +
kdialog --error "Abbruch durch den Benutzer!"
 +
exit
 +
fi
 +
mkdir ${hauptverzeichnis}
 
fi
 
fi
}
 
  
string_hauptverzeichnis_testen ()
+
hauptverzeichnis=`cat ~/.dvb_script_kommander/hauptverzeichnis`
{
+
 
grep -e " " -e "*" -e "~" ~/.dvb_script_gui.ini/pfad_hauptverzeichnis
+
# Verzeichnisstruktur erstellen
if [ $? = 0 ]
 
then
 
kdialog --error "Hauptverzeichnis enthält unerlaubte Zeichen. Bitte Installation überprüfen!"
 
exit
 
fi
 
}
 
  
voreinstellungen ()
+
mkdir $hauptverzeichnis/dvdstruktur 2>/dev/null
{
+
mkdir $hauptverzeichnis/screenshots 2>/dev/null
brenngeschwindigkeit=8 #maximale Brenngeschwindigkeit
+
mkdir $hauptverzeichnis/sicherung 2>/dev/null
maxgroesse=4600000000 #DVD-Größe (für das Requantisieren)
+
mkdir $hauptverzeichnis/tmp1 2>/dev/null
}
+
mkdir $hauptverzeichnis/tmp2 2>/dev/null
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Für's Austesten °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# Anzeigefenster leeren und einstellen
  
stop ()
+
echo "" > $hauptverzeichnis/fenster_fortschritt
{
+
echo "" > $hauptverzeichnis/fenster_debug
kdialog --msgbox "Programm unterbrochen"
+
exec 2> $hauptverzeichnis/fenster_debug
exit
 
}
 
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Kommanderfenster °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
 
  
fenster1 ()
+
# Hilfsprogramme festlegen
{
 
echo "$1" > ~/.dvb_script_gui.ini/fortschrittfenster
 
}
 
  
fenster1_mehr ()
+
hilfsprogramm=( mplex tcrequant dvdauthor ProjectX.jar normalize ffmpeg growisofs )
{
 
echo "$1" >> ~/.dvb_script_gui.ini/fortschrittfenster
 
}
 
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Abbruch °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
for var in ${hilfsprogramm[*]}
 +
do
 +
touch ~/.dvb_script_kommander/$var
 +
hilfsvar=`cat ~/.dvb_script_kommander/$var`
 +
if [ ! -e "$hilfsvar/$var" ]
 +
then
 +
echo "Programmsuche: $var" >> $hauptverzeichnis/fenster_fortschritt
 +
gefundene_pfade=`find /bin $HOME /opt /usr ! -path "$HOME/.*" -type f -name $var ! -printf "%h " 2>/dev/null`
 +
pfadzahl=`echo "$gefundene_pfade" | wc -w`
 +
case "$pfadzahl" in
  
benutzerabbruch ()
+
0) kdialog --error "Das Programm wurde nicht gefunden. Bitte zuerst installieren."
{
+
exit ;;
fenster1_mehr ""
 
fenster1_mehr "Abbruch durch den Benutzer."
 
programmende
 
}
 
  
funktionsabbruch ()
+
1) echo $gefundene_pfade > ~/.dvb_script_kommander/$var ;;
{
 
fenster1_mehr ""
 
fenster1_mehr "$1"
 
programmende
 
}
 
  
programmende ()
+
*) auswahl=`kdialog --caption "$var" --combobox "Bitte Pfad auswählen" $gefundene_pfade`
{
+
if [ $? = 0 ]
fenster1_mehr ""
+
then
fenster1_mehr "Ende"
+
echo ${auswahl} > ~/.dvb_script_kommander/$var
kdialog --passivepopup "Programmende" 1000
+
else
fenster1 ""
+
kdialog --error "Abbruch durch den Benutzer! Installation wird abgebrochen!"
exit
+
exit
}
+
fi ;;
 +
esac
 +
fi
 +
done
  
 +
# Hilfsprogramme laden
  
variablen ()
+
mplex=`cat ~/.dvb_script_kommander/mplex`/mplex
{
+
tcrequant=`cat ~/.dvb_script_kommander/tcrequant`/tcrequant
hauptverzeichnis=`cat ~/.dvb_script_gui.ini/pfad_hauptverzeichnis`
+
dvdauthor=`cat ~/.dvb_script_kommander/dvdauthor`/dvdauthor
 +
pjx=`cat ~/.dvb_script_kommander/ProjectX.jar`/ProjectX.jar
 +
normalize=`cat ~/.dvb_script_kommander/normalize`/normalize
 +
ffmpeg=`cat ~/.dvb_script_kommander/ffmpeg`/ffmpeg
 +
growisofs=`cat ~/.dvb_script_kommander/growisofs`/growisofs
  
name[0]=mplex
+
# X.ini erzeugen
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]`
+
echo "X.ini für ProjectX erzeugen"
pfad[1]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[1]`
+
echo \
pfad[2]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[2]`
+
"# Application
pfad[3]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[3]`
+
Application.Agreement=1
pfad[4]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[4]`
+
Application.Language=de
pfad[5]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[5]`
+
Application.ActiveDirectory=$hauptverzeichnis/screenshots
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]}
+
# WindowPosition
tcrequant=${pfad[1]}/${name[1]}
+
WindowPosition.Main.Width=9999
dvdauthor=${pfad[2]}/${name[2]}
+
WindowPosition.Main.Y=0
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
+
# OptionPanel
 +
OptionPanel.NormalLog=0
 +
OptionPanel.closeOnEnd=1" \
 +
> $hauptverzeichnis/X.ini
  
tmp_pfad1=${hauptverzeichnis}/temp/tmp1
+
# Playlist für mplayer
tmp_pfad2=${hauptverzeichnis}/temp/tmp2
 
dvdstruktur_pfad=${hauptverzeichnis}/temp/struktur
 
  
sicherungs_pfad=${hauptverzeichnis}/save
+
find $videoclips/* > ~/.mplayer/playlist
screenshot_pfad=${hauptverzeichnis}/screenshot
 
  
aufnahme_pfad=`cat ~/.dvb_script_gui.ini/aufnahmeordner`
+
# Löschen
direktdruck_pfad=`cat ~/.dvb_script_gui.ini/schablonenordner`
 
clip_pfad=`cat ~/.dvb_script_gui.ini/clipordner`
 
}
 
  
playlist_aktualisieren ()
+
echo "Löschen tmp, kann etwas dauern ..." > $hauptverzeichnis/fenster_fortschritt
{
+
rm -r -- $hauptverzeichnis/tmp1/* 2>/dev/null
find $clip_pfad/* > ~/.mplayer/playlist
+
rm -r -- $hauptverzeichnis/tmp2/* 2>/dev/null
}
+
rm -r -- $hauptverzeichnis/dvdstruktur/* 2>/dev/null
  
loeschen_tmp ()
+
# ----------------------------------Funktionen-------------------------------------
{
 
fenster1_mehr "Löschen tmp, kann etwas dauern ..."
 
rm -r -- ${hauptverzeichnis}/temp/tmp1/* 2>/dev/null
 
rm -r -- ${hauptverzeichnis}/temp/tmp2/* 2>/dev/null
 
rm -r -- ${hauptverzeichnis}/temp/struktur/* 2>/dev/null
 
}
 
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Auswahl der Eingangsdateien°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# °°°° Abbruch °°°°
  
filmauswahl_dvd ()
+
benutzerabbruch ()
 
{
 
{
brenn_pfad=${dvdstruktur_pfad}
+
echo "" >> $hauptverzeichnis/fenster_fortschritt
filmauswahl
+
echo "Abbruch durch den Benutzer" >> $hauptverzeichnis/fenster_fortschritt
 +
programmende
 
}
 
}
  
filmauswahl_ts ()
+
funktionsabbruch ()
 
{
 
{
brenn_pfad=${tmp_pfad1}
+
echo "" >> $hauptverzeichnis/fenster_fortschritt
filmauswahl
+
echo "$1" >> $hauptverzeichnis/fenster_fortschritt
 +
programmende
 
}
 
}
  
filmauswahl_clip ()
+
programmende ()
 
{
 
{
filmauswahl
+
echo "" >> $hauptverzeichnis/fenster_fortschritt
 +
echo "Ende" >> $hauptverzeichnis/fenster_fortschritt
 +
kdialog --passivepopup "Programmende" 1000
 +
echo "" > $hauptverzeichnis/fenster_fortschritt
 +
echo "" > $hauptverzeichnis/fenster_debug
 +
exit
 
}
 
}
 +
 +
# °°°°Auswahl Quelldateien°°°°
  
 
filmauswahl ()
 
filmauswahl ()
 
{
 
{
fenster1_mehr "Quelldatei auswählen ..."
+
echo "Quelldatei auswählen" >> $hauptverzeichnis/fenster_fortschritt
quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename "${aufnahme_pfad}"`
+
 
 +
case $was_tun in
 +
11) brenn_pfad=$hauptverzeichnis/dvdstruktur ;;
 +
12) brenn_pfad=$hauptverzeichnis/dvdstruktur ;;
 +
21) brenn_pfad=$hauptverzeichnis/tmp1 ;;
 +
22) brenn_pfad=$hauptverzeichnis/tmp1 ;;
 +
esac
 +
 
 +
quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename "${aufnahme}"`
 
if [ $? != 0 ]
 
if [ $? != 0 ]
 
then
 
then
Zeile 187: Zeile 195:
 
}
 
}
  
verzeichnisauswahl_dvd ()
+
verzeichnisauswahl ()
 
{
 
{
verzeichnistyp="*_dvd"
+
echo "Quelldatei auswählen" >> $hauptverzeichnis/fenster_fortschritt
verzeichnisauswahl
+
 
}
+
case $was_tun in
 +
13) verzeichnistyp="*_dvd" ;;
 +
23) verzeichnistyp="*_ts" ;;
 +
esac
  
verzeichnisauswahl_ts ()
+
anzahl_der_sicherungen=`find $hauptverzeichnis/sicherung/$verzeichnistyp -maxdepth 0 -type d | wc -l`
{
+
hilfsverzeichnis=`find $hauptverzeichnis/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) funktionsabbruch "Es gibt nichts passendes zum Brennen. Das Script wird nun beendet." ;;
1) fenster1_mehr "Folgende Sicherung wird gebrannt: $hilfsverzeichnis"
+
1) echo "$hilfsverzeichnis" >> $hauptverzeichnis/fenster_fortschritt
 
verzeichnis=$hilfsverzeichnis ;;
 
verzeichnis=$hilfsverzeichnis ;;
 
*) verzeichnis=`kdialog --combobox "Welche Datei soll gebrannt werden?" $hilfsverzeichnis`
 
*) verzeichnis=`kdialog --combobox "Welche Datei soll gebrannt werden?" $hilfsverzeichnis`
Zeile 214: Zeile 217:
 
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"
+
echo "ProjectX: Schneiden und demultiplexen" >> $hauptverzeichnis/fenster_fortschritt
java -jar ${pjx} -demux -gui -ini $x_ini -out ${tmp_pfad1} -name film "$quelldatei"
+
java -jar ${pjx} -demux -gui -ini $hauptverzeichnis/X.ini -out $hauptverzeichnis/tmp1 -name film "$quelldatei"
 +
audio_video_summe=`du -bc $hauptverzeichnis/tmp1/*.ac3 $hauptverzeichnis/tmp1/*.mp2 $hauptverzeichnis/tmp1/*.m2v | cut -f1 | tail -n 1`
 +
if [ $audio_video_summe -ge $dvdgroesse ]
 +
then
 +
kdialog --error "Das Bearbeitungsergebnis wird zu groß für eine DVD"
 +
programmende
 +
fi
 
}
 
}
  
#-----Schneiden und Wandeln nach TS-----
+
# Schneiden und Wandeln nach TS
 
pjx_ts_gui ()
 
pjx_ts_gui ()
 
{
 
{
fenster1_mehr "ProjectX: Schneiden und demultiplexen"
+
echo "ProjectX: Schneiden und demultiplexen" >> $hauptverzeichnis/fenster_fortschritt
java -jar ${pjx} -tots -gui -split 4300 -ini $x_ini -out ${tmp_pfad1} -name film "$quelldatei"
+
java -jar ${pjx} -tots -gui -split 4300 -ini $hauptverzeichnis/X.ini -out $hauptverzeichnis/tmp1 -name film "$quelldatei"
 
}
 
}
  
 
mpeg1_input ()
 
mpeg1_input ()
 
{
 
{
fenster1_mehr "ffmpeg: Decodierung Audio"
+
echo "ffmpeg: Decodierung Audio" >> $hauptverzeichnis/fenster_fortschritt
${ffmpeg} -i "${quelldatei}" ${tmp_pfad1}/film.mp2 -vcodec copy ${tmp_pfad1}/film.m1v
+
${ffmpeg} -i "${quelldatei}" $hauptverzeichnis/tmp1/film.mp2 -vcodec copy $hauptverzeichnis/tmp1/film.m1v
 
}
 
}
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Bearbeitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# °°°°°Bearbeitung°°°°
 
 
requantisieren ()
 
{
 
videogroesse=`du -bc ${tmp_pfad1}/*.m2v | cut -f1 | tail -n 1` #Berechnung des Requantisierungsfaktors
 
audio_summe=`du -bc ${tmp_pfad1}/*.ac3 ${tmp_pfad1}/*.mp2 | cut -f1 | tail -n 1`
 
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
 
fenster1_mehr "tcrequant: Requantisieren mit Faktor ${requantisierungsfaktor}"
 
${tcrequant} -d2 -i ${tmp_pfad1}/film.m2v -o ${tmp_pfad1}/film.requant -f ${requantisierungsfaktor}
 
mv ${tmp_pfad1}/film.requant ${tmp_pfad1}/film.m2v
 
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 $hauptverzeichnis/tmp1/film.mp2 $hauptverzeichnis/tmp2
rm -- ${hauptverzeichnis}/temp/tmp1/*.mp2
+
rm -- ${hauptverzeichnis}/tmp1/*.mp2
  
fenster1_mehr "ffmpeg: Ton decodieren"
+
echo "ffmpeg: Ton decodieren" >> $hauptverzeichnis/fenster_fortschritt
${ffmpeg} -i ${tmp_pfad2}/film.mp2 ${tmp_pfad2}/film.mp2.wav
+
${ffmpeg} -i $hauptverzeichnis/tmp2/film.mp2 $hauptverzeichnis/tmp2/film.mp2.wav
  
fenster1_mehr "normalize: Ton normalisieren"
+
echo "normalize: Ton normalisieren" >> $hauptverzeichnis/fenster_fortschritt
${normalize} ${tmp_pfad2}/film.mp2.wav
+
${normalize} $hauptverzeichnis/tmp2/film.mp2.wav
  
fenster1_mehr "ffmpeg: Ton encodieren"
+
echo "ffmpeg: Ton encodieren" >> $hauptverzeichnis/fenster_fortschritt
${ffmpeg} -i ${tmp_pfad2}/film.mp2.wav -acodec mp2 -ab 192k ${tmp_pfad1}/film.mp2
+
${ffmpeg} -i $hauptverzeichnis/tmp2/film.mp2.wav -acodec mp2 -ab 192k $hauptverzeichnis/tmp1/film.mp2
  
rm -- ${hauptverzeichnis}/temp/tmp2/*
+
rm -- ${hauptverzeichnis}/tmp2/*
 
}
 
}
  
 
ac3_behalten ()
 
ac3_behalten ()
 
{
 
{
if [ ! -e ${hauptverzeichnis}/initialisierung/temp/tmp1/*.ac3 ]
+
if [ ! -e ${hauptverzeichnis}/tmp1/*.ac3 ]
 
then
 
then
 
funktionsabbruch "Der Clip enthält keinen AC3-Ton. Das Script wird nun beendet."
 
funktionsabbruch "Der Clip enthält keinen AC3-Ton. Das Script wird nun beendet."
 
fi
 
fi
  
rm -- ${hauptverzeichnis}/initialisierung/temp/tmp1/*.mp2
+
rm -- ${hauptverzeichnis}/tmp1/*.mp2
 
}
 
}
  
 
mp2_behalten ()
 
mp2_behalten ()
 
{
 
{
if [ ! -e ${hauptverzeichnis}/initialisierung/temp/tmp1/*.mp2 ]
+
if [ ! -e ${hauptverzeichnis}/tmp1/*.mp2 ]
 
then
 
then
 
funktionsabbruch "Der Clip enthält keinen mp2-Ton. Das Script wird nun beendet."
 
funktionsabbruch "Der Clip enthält keinen mp2-Ton. Das Script wird nun beendet."
 
fi
 
fi
  
rm -- ${hauptverzeichnis}/initialisierung/temp/tmp1/*.ac3
+
rm -- ${hauptverzeichnis}/tmp1/*.ac3
 
}
 
}
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Multiplexen, Codieren°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# °°°°Multiplexen, Codieren°°°°
  
 
multiplexen ()
 
multiplexen ()
 
{
 
{
fenster1_mehr "mplex: Multiplexen, kann etwas dauern ..."
+
echo "mplex: Multiplexen, kann etwas dauern ..." >> $hauptverzeichnis/fenster_fortschritt
 
mpeg1_video=
 
mpeg1_video=
 
mpeg2_video=
 
mpeg2_video=
Zeile 303: Zeile 299:
 
ac3_audio=
 
ac3_audio=
  
mpeg1_video=`find ${tmp_pfad1} | grep "m1v"`
+
mpeg1_video=`find $hauptverzeichnis/tmp1 | grep "m1v"`
mpeg2_video=`find ${tmp_pfad1} | grep "m2v"`
+
mpeg2_video=`find $hauptverzeichnis/tmp1 | grep "m2v"`
mp2_audio=`find ${tmp_pfad1} | grep "mp2"`
+
mp2_audio=`find $hauptverzeichnis/tmp1 | grep "mp2"`
ac3_audio=`find ${tmp_pfad1} | grep "ac3"`
+
ac3_audio=`find $hauptverzeichnis/tmp1 | grep "ac3"`
  
${mplex} -v1 -f8 -o ${tmp_pfad1}/film.mpg ${mpeg1_video} ${mpeg2_video} ${ac3_audio} ${mp2_audio}
+
${mplex} -v1 -f8 -o $hauptverzeichnis/tmp1/film.mpg ${mpeg1_video} ${mpeg2_video} ${ac3_audio} ${mp2_audio}
  
if [ ! -e ${tmp_pfad1}/film.mpg ]
+
if [ ! -e $hauptverzeichnis/tmp1/film.mpg ]
 
then
 
then
 
funktionsabbruch "Es konnte keine Datei multiplext werden!"
 
funktionsabbruch "Es konnte keine Datei multiplext werden!"
Zeile 316: Zeile 312:
 
}
 
}
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Author'n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
# °°°°Author'n°°°°
  
 
authoring_ohne_menue ()
 
authoring_ohne_menue ()
 
{
 
{
fenster1_mehr "dvdauthor: Erzeugen der DVD-Struktur"
+
echo "dvdauthor: Erzeugen der DVD-Struktur" >> $hauptverzeichnis/fenster_fortschritt
${dvdauthor} -o ${dvdstruktur_pfad} -t ${tmp_pfad1}/film.mpg  #VOBs und "Kapitel"-IFOs
+
${dvdauthor} -o $hauptverzeichnis/dvdstruktur -t $hauptverzeichnis/tmp1/film.mpg  #VOBs und "Kapitel"-IFOs
${dvdauthor} -o ${dvdstruktur_pfad} -T #VIDEO_TS.BUP und VIDEO_TS.IFO
+
${dvdauthor} -o $hauptverzeichnis/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"
+
echo "growisofs: Video-DVD brennen" >> $hauptverzeichnis/fenster_fortschritt
 
video_dvd_bereit
 
video_dvd_bereit
fenster1_mehr "Brennen beginnt"
+
echo "Brennen beginnt" >> $hauptverzeichnis/fenster_fortschritt
${growisofs} -speed=${brenngeschwindigkeit} -dvd-compat -Z /dev/dvd -dvd-video ${brenn_pfad}
+
${growisofs} -speed=${speed} -dvd-compat -Z /dev/dvd -dvd-video ${brenn_pfad}
 
funktionsabbruch "Brennen fertig. Programm beendet"
 
funktionsabbruch "Brennen fertig. Programm beendet"
 
}
 
}
Zeile 348: Zeile 335:
 
video_dvd_bereit ()
 
video_dvd_bereit ()
 
{
 
{
${growisofs}  -dry-run -speed=${brenngeschwindigkeit} -dvd-compat -Z /dev/dvd -dvd-video ${brenn_pfad}
+
${growisofs}  -dry-run -speed=${speed} -dvd-compat -Z /dev/dvd -dvd-video ${brenn_pfad}
 
if [ $? = 0 ]
 
if [ $? = 0 ]
 
then
 
then
Zeile 363: Zeile 350:
 
}
 
}
  
#--------------Daten-DVD------------
+
# Daten-DVD
 
brennen_ts ()
 
brennen_ts ()
 
{
 
{
fenster1_mehr "growisofs: Daten-DVD brennen"
+
echo "growisofs: Daten-DVD brennen" >> $hauptverzeichnis/fenster_fortschritt
 
dvdzahl=`find ${brenn_pfad} -type f | wc -l`
 
dvdzahl=`find ${brenn_pfad} -type f | wc -l`
fenster1_mehr ""
+
echo "" >> $hauptverzeichnis/fenster_fortschritt
fenster1_mehr "Anzahl der notwendigen DVDs: ${dvdzahl}"
+
echo "Anzahl der notwendigen DVDs: ${dvdzahl}" >> $hauptverzeichnis/fenster_fortschritt
  
 
for((i=1; i<=${dvdzahl}; i++))
 
for((i=1; i<=${dvdzahl}; i++))
Zeile 386: Zeile 373:
 
fenster1_mehr ""
 
fenster1_mehr ""
 
fenster1_mehr "Brennvorgang gestartet"
 
fenster1_mehr "Brennvorgang gestartet"
${growisofs} -speed=${brenngeschwindigkeit} -Z /dev/dvd -allow-limited-size -R -J ${brenn_pfad}/"film($((i-1)))[remux].ts"
+
${growisofs} -speed=${speed} -Z /dev/dvd -allow-limited-size -R -J ${brenn_pfad}/"film($((i-1)))[remux].ts"
 
else
 
else
 
benutzerabbruch
 
benutzerabbruch
Zeile 394: Zeile 381:
 
daten_dvd_bereit ()
 
daten_dvd_bereit ()
 
{
 
{
${growisofs} -dry-run -speed=${brenngeschwindigkeit} -Z /dev/dvd -allow-limited-size -R -J ${brenn_pfad}/"film($((i-1)))[remux].ts"
+
${growisofs} -dry-run -speed=${speed} -Z /dev/dvd -allow-limited-size -R -J ${brenn_pfad}/"film($((i-1)))[remux].ts"
 
if [ $? = 0 ]
 
if [ $? = 0 ]
 
then
 
then
Zeile 409: Zeile 396:
 
}
 
}
  
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Sichern°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
+
#°°°°Sichern°°°°
  
 
sichern_dvd_struktur ()
 
sichern_dvd_struktur ()
 
{
 
{
fenster1_mehr "Sichern der DVD-Stuktur"
+
echo "Sichern der DVD-Stuktur" >> $hauptverzeichnis/fenster_fortschritt
 
sicherungsordner="$(date +%Y%m%d%H%M%S)_dvd"
 
sicherungsordner="$(date +%Y%m%d%H%M%S)_dvd"
mkdir ${sicherungs_pfad}/${sicherungsordner}
+
mkdir $hauptverzeichnis/sicherung/${sicherungsordner}
mv ${dvdstruktur_pfad}/* ${sicherungs_pfad}/${sicherungsordner}
+
mv $hauptverzeichnis/dvdstruktur/* $hauptverzeichnis/sicherung/${sicherungsordner}
funktionsabbruch "Datei gesichert nach ${sicherungs_pfad}/${sicherungsordner}. Programm beendet"
+
funktionsabbruch "Datei gesichert nach $hauptverzeichnis/sicherung/${sicherungsordner}. Programm beendet"
 
}
 
}
  
 
sichern_ts ()
 
sichern_ts ()
 
{
 
{
fenster1_mehr "Sichern des TS-File"
+
echo "Sichern des TS-File" >> $hauptverzeichnis/fenster_fortschritt
 
sicherungsordner="$(date +%Y%m%d%H%M%S)_ts"
 
sicherungsordner="$(date +%Y%m%d%H%M%S)_ts"
mkdir ${sicherungs_pfad}/${sicherungsordner}
+
mkdir $hauptverzeichnis/sicherung/${sicherungsordner}
mv ${tmp_pfad1}/*.ts ${sicherungs_pfad}/${sicherungsordner}
+
mv $hauptverzeichnis/tmp1/*.ts $hauptverzeichnis/sicherung/${sicherungsordner}
funktionsabbruch "Datei gesichert nach ${sicherungs_pfad}/${sicherungsordner}. Programm beendet"
+
funktionsabbruch "Datei gesichert nach $hauptverzeichnis/sicherung/${sicherungsordner}. Programm beendet"
 
}
 
}
  
 
sichern_clip ()
 
sichern_clip ()
 
{
 
{
fenster1_mehr "Speichern des Videoclips"
+
echo "Speichern des Videoclips" >> $hauptverzeichnis/fenster_fortschritt
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${clip_pfad}`
+
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${videoclips}`
 
if [ $? != 0 ]
 
if [ $? != 0 ]
 
then
 
then
Zeile 441: Zeile 428:
 
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 $hauptverzeichnis/tmp1/film.mpg "${clipspeicher}"
{
 
mv ${tmp_pfad1}/film.mpg "${clipspeicher}"
 
playlist_aktualisieren
 
 
funktionsabbruch "Videoclip gespeichert: ${clipspeicher}"
 
funktionsabbruch "Videoclip gespeichert: ${clipspeicher}"
 
}
 
}
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Hauptprogramm++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
  
#-----Initialisierung-----
+
# --------------------------------Hauptprogramm------------------------------------
installation_erfolgt
 
string_hauptverzeichnis_testen
 
  
exec 2> ~/.dvb_script_gui.ini/debugfenster
+
# Video-DVD
 
 
voreinstellungen
 
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
 
 
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
 
 
multiplexen
 
multiplexen
 
authoring_ohne_menue
 
authoring_ohne_menue
Zeile 490: Zeile 458:
 
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 525: Zeile 492:
 
programmende ;;
 
programmende ;;
  
32) filmauswahl_clip
+
32) filmauswahl
 
pjx_demux_gui
 
pjx_demux_gui
 
ac3_behalten
 
ac3_behalten
Zeile 532: Zeile 499:
 
programmende ;;
 
programmende ;;
  
33) filmauswahl_clip
+
33) filmauswahl
 
pjx_demux_gui
 
pjx_demux_gui
 
mp2_behalten
 
mp2_behalten
Zeile 545: Zeile 512:
 
programmende ;;
 
programmende ;;
  
37) filmauswahl_clip
+
37) filmauswahl
 
pjx_demux_gui
 
pjx_demux_gui
 
mp2_behalten
 
mp2_behalten
Zeile 559: Zeile 526:
 
sichern_clip
 
sichern_clip
 
programmende ;;
 
programmende ;;
 
 
esac
 
esac
  
#----untermenue_direktdruck
+
# DVD bedrucken
  
 
case $was_tun in
 
case $was_tun in
  
81) oodraw -o $direktdruck_pfad/videodvd.odg ;;
+
81) oodraw -o $druckschablonen/videodvd.odg ;;
82) oodraw -o $direktdruck_pfad/datendvd.odg ;;
+
82) oodraw -o $druckschablonen/datendvd.odg ;;
 
esac
 
esac
 +
 +
  
 
</pre>
 
</pre>

Version vom 3. Januar 2009, 19:15 Uhr

Diese Beschreibung wurde mit folgenden Distributionen getestet:

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


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



#!/bin/bash

#Name: dvb_script_gui_arbeitsscript
#Version: 0.1.0
#Erstellungsdatum: 2.1.2009
#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.

#Neu in dieser Version:
#Anpassung an die neue GUI, Codevereinfachung, neue Verzeichnisstruktur, Integration in ein Script-Widget der GUI

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

# Übernahme von Kommander

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

# Voreinstellungen

aufnahme=~/Aufnahme
druckschablonen=~/Druckschablonen
videoclips=~/Videoclips

speed=8
dvdgroesse=4600000000

# Hauptverzeichnis festlegen

mkdir ~/.dvb_script_kommander

if [ ! -e ~/.dvb_script_kommander/hauptverzeichnis ]
then
	auswahl=`kdialog --caption "Name des Hauptverzeichnisses eingeben" --inputbox ~/ dvb_script_kommander`
	if [ $? = 0 ]
	then
		hauptverzeichnis=~/`echo $auswahl | tr -d " *~."`
		if [ -e ${hauptverzeichnis} ]
		then
			kdialog --error "$hauptverzeichnis existiert schon!"
			exit
		fi
		echo ${hauptverzeichnis} > ~/.dvb_script_kommander/hauptverzeichnis
	else
		kdialog --error "Abbruch durch den Benutzer!"
		exit
	fi
	mkdir ${hauptverzeichnis}
fi

hauptverzeichnis=`cat ~/.dvb_script_kommander/hauptverzeichnis`

# Verzeichnisstruktur erstellen

mkdir $hauptverzeichnis/dvdstruktur 2>/dev/null
mkdir $hauptverzeichnis/screenshots 2>/dev/null
mkdir $hauptverzeichnis/sicherung 2>/dev/null
mkdir $hauptverzeichnis/tmp1 2>/dev/null
mkdir $hauptverzeichnis/tmp2 2>/dev/null

# Anzeigefenster leeren und einstellen

echo "" > $hauptverzeichnis/fenster_fortschritt
echo "" > $hauptverzeichnis/fenster_debug
exec 2> $hauptverzeichnis/fenster_debug


# Hilfsprogramme festlegen

hilfsprogramm=( mplex tcrequant dvdauthor ProjectX.jar normalize ffmpeg growisofs )

for var in ${hilfsprogramm[*]}
do
	touch ~/.dvb_script_kommander/$var
	hilfsvar=`cat ~/.dvb_script_kommander/$var`
	if [ ! -e "$hilfsvar/$var" ]
	then
		echo "Programmsuche: $var" >> $hauptverzeichnis/fenster_fortschritt
		gefundene_pfade=`find /bin $HOME /opt /usr ! -path "$HOME/.*" -type f -name $var ! -printf "%h " 2>/dev/null`
		pfadzahl=`echo "$gefundene_pfade" | wc -w`
		case "$pfadzahl" in

			0)	kdialog --error "Das Programm wurde nicht gefunden. Bitte zuerst installieren."
				exit ;;

			1)	echo $gefundene_pfade > ~/.dvb_script_kommander/$var ;;

			*)	auswahl=`kdialog --caption "$var" --combobox "Bitte Pfad auswählen" $gefundene_pfade`
				if [ $? = 0 ]
				then
					echo ${auswahl} > ~/.dvb_script_kommander/$var
				else
					kdialog --error "Abbruch durch den Benutzer! Installation wird abgebrochen!"
					exit
				fi ;;
		esac
	fi
done

# Hilfsprogramme laden

mplex=`cat ~/.dvb_script_kommander/mplex`/mplex
tcrequant=`cat ~/.dvb_script_kommander/tcrequant`/tcrequant
dvdauthor=`cat ~/.dvb_script_kommander/dvdauthor`/dvdauthor
pjx=`cat ~/.dvb_script_kommander/ProjectX.jar`/ProjectX.jar
normalize=`cat ~/.dvb_script_kommander/normalize`/normalize
ffmpeg=`cat ~/.dvb_script_kommander/ffmpeg`/ffmpeg
growisofs=`cat ~/.dvb_script_kommander/growisofs`/growisofs

# X.ini erzeugen

echo "X.ini für ProjectX erzeugen"
echo \
"# Application
Application.Agreement=1
Application.Language=de
Application.ActiveDirectory=$hauptverzeichnis/screenshots

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

# OptionPanel
OptionPanel.NormalLog=0
OptionPanel.closeOnEnd=1" \
> $hauptverzeichnis/X.ini

# Playlist für mplayer

find $videoclips/* > ~/.mplayer/playlist

# Löschen

echo "Löschen tmp, kann etwas dauern ..." > $hauptverzeichnis/fenster_fortschritt
rm -r -- $hauptverzeichnis/tmp1/* 2>/dev/null
rm -r -- $hauptverzeichnis/tmp2/* 2>/dev/null
rm -r -- $hauptverzeichnis/dvdstruktur/* 2>/dev/null

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

# °°°° Abbruch °°°°

benutzerabbruch ()
{
echo "" >> $hauptverzeichnis/fenster_fortschritt
echo "Abbruch durch den Benutzer" >> $hauptverzeichnis/fenster_fortschritt
programmende
}

funktionsabbruch ()
{
echo "" >> $hauptverzeichnis/fenster_fortschritt
echo "$1" >> $hauptverzeichnis/fenster_fortschritt
programmende
}

programmende ()
{
echo "" >> $hauptverzeichnis/fenster_fortschritt
echo "Ende" >> $hauptverzeichnis/fenster_fortschritt
kdialog --passivepopup "Programmende" 1000
echo "" > $hauptverzeichnis/fenster_fortschritt
echo "" > $hauptverzeichnis/fenster_debug
exit
}

# °°°°Auswahl Quelldateien°°°°

filmauswahl ()
{
echo "Quelldatei auswählen" >> $hauptverzeichnis/fenster_fortschritt

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

quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename "${aufnahme}"`
if [ $? != 0 ]
then
	benutzerabbruch
fi
}

verzeichnisauswahl ()
{
echo "Quelldatei auswählen" >> $hauptverzeichnis/fenster_fortschritt

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

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

case $anzahl_der_sicherungen in
	0)	funktionsabbruch "Es gibt nichts passendes zum Brennen. Das Script wird nun beendet." ;;
	1)	echo "$hilfsverzeichnis" >> $hauptverzeichnis/fenster_fortschritt
		verzeichnis=$hilfsverzeichnis ;;
	*)	verzeichnis=`kdialog --combobox "Welche Datei soll gebrannt werden?" $hilfsverzeichnis`
		if [ $? != 0 ]
		then
			benutzerabbruch
		fi ;;
esac

brenn_pfad=$verzeichnis
}

# °°°°Eingangsverarbeitung°°°°

# Schneiden und Demultiplexen
pjx_demux_gui ()
{
echo "ProjectX: Schneiden und demultiplexen" >> $hauptverzeichnis/fenster_fortschritt
java -jar ${pjx} -demux -gui -ini $hauptverzeichnis/X.ini -out $hauptverzeichnis/tmp1 -name film "$quelldatei"
audio_video_summe=`du -bc $hauptverzeichnis/tmp1/*.ac3 $hauptverzeichnis/tmp1/*.mp2 $hauptverzeichnis/tmp1/*.m2v | cut -f1 | tail -n 1`
if [ $audio_video_summe -ge $dvdgroesse ]
then
	kdialog --error "Das Bearbeitungsergebnis wird zu groß für eine DVD"
	programmende
fi
}

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

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

# °°°°°Bearbeitung°°°°

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

echo "ffmpeg: Ton decodieren" >> $hauptverzeichnis/fenster_fortschritt
${ffmpeg} -i $hauptverzeichnis/tmp2/film.mp2 $hauptverzeichnis/tmp2/film.mp2.wav

echo "normalize: Ton normalisieren" >> $hauptverzeichnis/fenster_fortschritt
${normalize} $hauptverzeichnis/tmp2/film.mp2.wav

echo "ffmpeg: Ton encodieren" >> $hauptverzeichnis/fenster_fortschritt
${ffmpeg} -i $hauptverzeichnis/tmp2/film.mp2.wav -acodec mp2 -ab 192k $hauptverzeichnis/tmp1/film.mp2

rm -- ${hauptverzeichnis}/tmp2/*
}

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

rm -- ${hauptverzeichnis}/tmp1/*.mp2
}

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

rm -- ${hauptverzeichnis}/tmp1/*.ac3
}

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

multiplexen ()
{
echo "mplex: Multiplexen, kann etwas dauern ..." >> $hauptverzeichnis/fenster_fortschritt
mpeg1_video=
mpeg2_video=
mp2_audio=
ac3_audio=

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

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

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

# °°°°Author'n°°°°

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

# °°°°Brennen°°°°

# Video-DVD
brennen_video_dvd ()
{
echo "growisofs: Video-DVD brennen" >> $hauptverzeichnis/fenster_fortschritt
video_dvd_bereit
echo "Brennen beginnt" >> $hauptverzeichnis/fenster_fortschritt
${growisofs} -speed=${speed} -dvd-compat -Z /dev/dvd -dvd-video ${brenn_pfad}
funktionsabbruch "Brennen fertig. Programm beendet"
}

video_dvd_bereit ()
{
${growisofs}  -dry-run -speed=${speed} -dvd-compat -Z /dev/dvd -dvd-video ${brenn_pfad}
if [ $? = 0 ]
then
	return
else
	kdialog --warningcontinuecancel "DVD nicht bereit"
	if [ $? = 0 ]
	then
		video_dvd_bereit
	else
		benutzerabbruch
	fi
fi
}

# Daten-DVD
brennen_ts ()
{
echo "growisofs: Daten-DVD brennen" >> $hauptverzeichnis/fenster_fortschritt
dvdzahl=`find ${brenn_pfad} -type f | wc -l`
echo "" >> $hauptverzeichnis/fenster_fortschritt
echo "Anzahl der notwendigen DVDs: ${dvdzahl}" >> $hauptverzeichnis/fenster_fortschritt

for((i=1; i<=${dvdzahl}; i++))
do
	loop_brennen_ts
done
funktionsabbruch "Brennen fertig. Programm beendet"
}

loop_brennen_ts ()
{
daten_dvd_bereit
kdialog --msgbox "Bitte DVD Nr.: $i einlegen"
if [ $? = 0 ]
then
	fenster1_mehr ""
	fenster1_mehr "Brennvorgang gestartet"
	${growisofs} -speed=${speed} -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=${speed} -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_dvd_struktur ()
{
echo "Sichern der DVD-Stuktur" >> $hauptverzeichnis/fenster_fortschritt
sicherungsordner="$(date +%Y%m%d%H%M%S)_dvd"
mkdir $hauptverzeichnis/sicherung/${sicherungsordner}
mv $hauptverzeichnis/dvdstruktur/* $hauptverzeichnis/sicherung/${sicherungsordner}
funktionsabbruch "Datei gesichert nach $hauptverzeichnis/sicherung/${sicherungsordner}. Programm beendet"
}

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

sichern_clip ()
{
echo "Speichern des Videoclips" >> $hauptverzeichnis/fenster_fortschritt
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${videoclips}`
if [ $? != 0 ]
then
	benutzerabbruch
fi

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

mv $hauptverzeichnis/tmp1/film.mpg "${clipspeicher}"
funktionsabbruch "Videoclip gespeichert: ${clipspeicher}"
}

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

# Video-DVD

case $was_tun in

	11)	filmauswahl
		pjx_demux_gui
		multiplexen
		authoring_ohne_menue
		brennen_video_dvd
		programmende ;;

	12)	filmauswahl
		pjx_demux_gui
		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

# DVD bedrucken

case $was_tun in

	81)	oodraw -o $druckschablonen/videodvd.odg ;;
	82)	oodraw -o $druckschablonen/datendvd.odg ;;
esac




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


Zurück zur Multimedia-Übersicht