Dvb wiki script/Script: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(kdialog: Abbrechen klappt nun)
(überarbeitet für Script-Version 0.6.0)
Zeile 1: Zeile 1:
 +
 +
{{Dvbscript navigationsbox}}
 +
'''Bitte die [[Dvb wiki script/Installation|Installationsanleitung]] beachten!'''<br>
 
<pre>
 
<pre>
 +
 
#!/bin/bash
 
#!/bin/bash
  
Zeile 5: Zeile 9:
  
 
#Name: DVB_Wiki_Buch_Script
 
#Name: DVB_Wiki_Buch_Script
#Version: 0.5.8
+
#Version: 0.6.0
#Erstellungsdatum: 19.7.2008
+
#Erstellungsdatum: 18.8.2008
 
#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
 
#eine abspielbare Video-DVD zu erzeugen
  
#++++++++++++++++++++++++++++++++++++++++Evt. vom Benutzer anzupassen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Funktionen++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
  
 +
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Für's Austesten°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  
#-------------Basisverzeichnis---------------
+
stop ()
 +
{
 +
kdialog --msgbox "Programm unterbrochen"
 +
}
  
basisverzeichnis=~/filme #ausschließlich im Heimatverzeichnis vorgesehen
+
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Initialisierung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  
#----------------DVD-Grösse------------------
+
#-----Basisverzeichnis festlegen beim ersten Scriptaufruf-----
  
maxgroesse=4600000000 #für DVD5
+
basisverzeichnis_festlegen ()
 +
{
 +
echo "*** Festlegen des Basisverzeichnisses ***"
  
#------------Brenngeschwindigkeit------------
+
if [ ! -e ~/.dvb_wiki_script_arbeitsverzeichnis.txt ]
 +
then
 +
hilfsverzeichnis=`kdialog --caption "Name des Arbeitsverzeichnisses" --inputbox ~/ dvb_wiki_script`
 +
if [ $? = 0 ]
 +
then
 +
basisverzeichnis=~/`echo $hilfsverzeichnis | tr -d " "`
 +
if [ -e ${basisverzeichnis} ]
 +
then
 +
kdialog --passivepopup "Verzeichnis existiert schon! Bitte neu wählen" 3
 +
basisverzeichnis_festlegen
 +
else
 +
kdialog --passivepopup "Die Verzeichnisstruktur wird in folgendem Arbeitsverzeichnis erstellt: ${basisverzeichnis}" 3
 +
echo ${basisverzeichnis} > ~/.dvb_wiki_script_arbeitsverzeichnis.txt
 +
fi
 +
 +
else
 +
kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
 +
exit
 +
fi
 +
fi
  
brenngeschwindigkeit=8 #maximal
+
echo "*** erledigt" ; echo
 +
}
  
#------Pfade, in denen nach den Helferprogrammen gesucht wird-------
+
#-----Basisverzeichnis und Arbeitsverzeichnisse anlegen-----
  
suchpfade="/bin $HOME /opt /usr"
+
arbeitsverzeichnisse_erstellen ()
 +
{
 +
basisverzeichnis=`cat ~/.dvb_wiki_script_arbeitsverzeichnis.txt`
 +
if [ ! -e ${basisverzeichnis} ] ; then mkdir ${basisverzeichnis} ; fi
  
#+++++++++++++++++++++++++++++++++++++++++++++++++++++Fehlermeldungen abschalten+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
if [ ! -e ${basisverzeichnis}/dvd_aufnahme ] ; then mkdir ${basisverzeichnis}/dvd_aufnahme ; fi
 +
if [ ! -e ${basisverzeichnis}/dvd_tmp ] ; then mkdir ${basisverzeichnis}/dvd_tmp ; fi
 +
if [ ! -e ${basisverzeichnis}/dvd_tmp1 ] ; then mkdir ${basisverzeichnis}/dvd_tmp1 ; fi
 +
if [ ! -e ${basisverzeichnis}/dvd_struktur ] ; then mkdir ${basisverzeichnis}/dvd_struktur ; fi
 +
if [ ! -e ${basisverzeichnis}/dvd_sicherung ] ; then mkdir ${basisverzeichnis}/dvd_sicherung ; fi
 +
if [ ! -e ${basisverzeichnis}/dvd_default ] ; then mkdir ${basisverzeichnis}/dvd_default ; fi
 +
if [ ! -e ${basisverzeichnis}/dvd_screenshot ] ; then mkdir ${basisverzeichnis}/dvd_screenshot ; fi
 +
}
  
exec 2>/dev/null
+
programmerkennung ()
 
+
{
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++Installationsroutine+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
echo "*** Programmerkennung ***"
 
 
#------------- Programmnamen --------------
 
  
 
name[0]=mplex
 
name[0]=mplex
Zeile 49: Zeile 86:
 
name[6]=growisofs
 
name[6]=growisofs
 
name[7]=kdialog
 
name[7]=kdialog
name[8]=mplayer
+
name[8]=kaffeine
 
 
 
 
#-----------Anlegen der notwendigen Verzeichnisse------------------
 
  
mkdir ${basisverzeichnis}
 
 
mkdir ${basisverzeichnis}/dvd_aufnahme
 
mkdir ${basisverzeichnis}/dvd_tmp
 
mkdir ${basisverzeichnis}/dvd_struktur
 
mkdir ${basisverzeichnis}/dvd_sicherung
 
mkdir $basisverzeichnis/default
 
mkdir $basisverzeichnis/screenshot
 
 
#--------Überprüfung, ob die Programme vorhanden sind und Anlegen der Programmpfade---------
 
 
echo "*** Programmerkennung ***"
 
 
for ((i=0 ; i<9 ; i++))
 
for ((i=0 ; i<9 ; i++))
 
do
 
do
pfad[i]=`cat $basisverzeichnis/default/pfad[$i].txt`
+
touch $basisverzeichnis/dvd_default/pfad[$i].txt
 +
pfad[i]=`cat $basisverzeichnis/dvd_default/pfad[$i].txt`
 
if [ ! -e ${pfad[i]}/${name[i]} ]
 
if [ ! -e ${pfad[i]}/${name[i]} ]
 
then
 
then
 
echo "${name[i]}:      Datei wird gesucht"
 
echo "${name[i]}:      Datei wird gesucht"
gefundene_pfade=`find ${suchpfade} -type f -name ${name[i]} -printf "%h "`
+
gefundene_pfade=`find /bin /home /opt /usr -type f -name ${name[i]} -printf "%h " 2>/dev/null`
 
pfadanzahl=`echo "$gefundene_pfade" | wc -w`
 
pfadanzahl=`echo "$gefundene_pfade" | wc -w`
  
 
case "$pfadanzahl" in
 
case "$pfadanzahl" in
0) kdialog --msgbox "Programm kann nicht gefunden werden"
+
0) kdialog --passivepopup "Das Programm wurde nicht gefunden. Bitte installieren." 3
 
exit ;;
 
exit ;;
1) echo "${name[i]}:      Datei gefunden"
+
1) echo "${name[i]}:      Datei gefunden" ; echo
echo $gefundene_pfade > $basisverzeichnis/default/pfad[$i].txt;;
+
echo $gefundene_pfade > $basisverzeichnis/dvd_default/pfad[$i].txt ;;
*) kdialog --combobox "Welcher Pfad" $gefundene_pfade > $basisverzeichnis/default/pfad[$i].txt
+
*) auswahl_gefundene_pfade=`kdialog --caption "${name[i]}" --combobox "Bitte Pfad auswählen" $gefundene_pfade --default $gefundene_pfade`
echo "${name[i]}:      Datei gefunden"
+
if [ $? = 0 ]
 +
then
 +
echo ${auswahl_gefundene_pfade} > $basisverzeichnis/dvd_default/pfad[$i].txt
 +
else
 +
kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
 +
exit
 +
fi
 +
echo "${name[i]}:      Datei gefunden" ; echo ;;
 
esac
 
esac
 
fi
 
fi
 
done
 
done
 +
 
echo "*** erledigt" ; echo
 
echo "*** erledigt" ; echo
 +
}
  
#----------------------Variablenzuweisungen zur besseren Lesbarkeit des Scriptes-------------------------
+
#-----Variablenzuweisungen zur besseren Lesbarkeit des Scriptes-----
  
#---Programme---
+
variablenzuweisungen ()
 +
{
 
mplex=${pfad[0]}/${name[0]}
 
mplex=${pfad[0]}/${name[0]}
 
tcrequant=${pfad[1]}/${name[1]}
 
tcrequant=${pfad[1]}/${name[1]}
Zeile 97: Zeile 130:
 
ffmpeg=${pfad[5]}/${name[5]}
 
ffmpeg=${pfad[5]}/${name[5]}
 
growisofs=${pfad[6]}/${name[6]}
 
growisofs=${pfad[6]}/${name[6]}
kdialog_pfad=${pfad[7]}/${name[7]}
+
kdialog=${pfad[7]}/${name[7]}
mplayer_pfad=${pfad[8]}/${name[8]}
+
kaffeine=${pfad[8]}/${name[8]}
  
#---Pfade---
 
 
aufnahme_pfad=${basisverzeichnis}/dvd_aufnahme
 
aufnahme_pfad=${basisverzeichnis}/dvd_aufnahme
 
tmp_pfad=${basisverzeichnis}/dvd_tmp
 
tmp_pfad=${basisverzeichnis}/dvd_tmp
 
dvdstruktur_pfad=${basisverzeichnis}/dvd_struktur
 
dvdstruktur_pfad=${basisverzeichnis}/dvd_struktur
 
sicherungs_pfad=${basisverzeichnis}/dvd_sicherung
 
sicherungs_pfad=${basisverzeichnis}/dvd_sicherung
screenshot_pfad=$basisverzeichnis/screenshot
+
screenshot_pfad=$basisverzeichnis/dvd_screenshot
default_pfad=${basisverzeichnis}/default
+
default_pfad=${basisverzeichnis}/dvd_default
 
clip_pfad=~/Videoclips
 
clip_pfad=~/Videoclips
 +
}
  
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Konfiguration PJX ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
#-----Vorbereiten der X.ini's für ProjectX----
 
 
#-------------X.ini für Filmbearbeitung----------------
 
  
 +
konfiguration ()
 +
{
 +
#---X.ini für Filmbearbeitung---
 
echo \
 
echo \
 
"# Application
 
"# Application
Zeile 128: Zeile 162:
 
OptionPanel.closeOnEnd=1" > ${default_pfad}/X.ini.film
 
OptionPanel.closeOnEnd=1" > ${default_pfad}/X.ini.film
  
#-------------X.ini für Videoclips (Ton decodieren)----------------
+
#---Voreinstellungen---
 +
brenngeschwindigkeit=8 #maximale Brenngeschwindigkeit
 +
maxgroesse=4600000000 #für DVD5
 +
}
  
echo \
+
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Löschfunktionen°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
"# Application
 
Application.Agreement=1
 
Application.Language=de
 
  
# WindowPosition
+
loeschen_temporaere_arbeitsordner ()
WindowPosition.Main.Height=670
+
{
WindowPosition.Main.Width=866
+
echo "*** Löschen der temporären Arbeitsordner (kann etwas dauern)***"
WindowPosition.Main.X=500
 
WindowPosition.Main.Y=0
 
 
 
# OptionPanel
 
OptionPanel.NormalLog=0
 
OptionPanel.closeOnEnd=1
 
  
# AudioPanel
+
rm ${basisverzeichnis}/dvd_tmp/* 2>/dev/null
AudioPanel.decodeMpgAudio=1" > ${default_pfad}/X.ini.clip
+
rm ${basisverzeichnis}/dvd_tmp1/* 2>/dev/null
 +
rm -r ${basisverzeichnis}/dvd_struktur/* 2>/dev/null
 +
rmdir ${basisverzeichnis}/dvd_struktur/* 2>/dev/null
  
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Funktionen ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
echo "*** erledigt" ; echo
 +
}
  
#--------------------Vorbereitungen / Fehlerbehandlung------------------------------------
+
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Aufgabenmenues°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  
#............Löschen der Arbeitsordner........................
+
hauptmenue ()
del_ordner ()
 
 
{
 
{
echo "*** Löschen der Arbeitsordner ***"
+
auswahl_hauptmenue=`kdialog --caption "Hauptmenue" --geometry 200x250+500+400 --radiolist "Bitte einen Aufgabenbereich wählen" \
rm ${basisverzeichnis}/dvd_tmp/*
+
1 "VIDEO-DVD" on \
rm ${dvdstruktur_pfad}/AUDIO_TS/*
+
2 "TS-Stream" off \
rm ${dvdstruktur_pfad}/VIDEO_TS/*
+
3 "Videoclips" off`
rmdir ${dvdstruktur_pfad}/AUDIO_TS
+
if [ $? != 0 ]
rmdir ${dvdstruktur_pfad}/VIDEO_TS
+
then
echo "*** erledigt" ; echo
+
kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
 +
exit
 +
fi
 
}
 
}
  
#..........Fehler, da mplex nichts multiplexen kann............
+
untermenue_video_dvd ()
fehler ()
 
 
{
 
{
if [ ! -e ${tmp_pfad}/film.mpg ]
+
brenn_pfad=${dvdstruktur_pfad}
 +
 
 +
was_tun=`kdialog --caption "Video_DVD" --geometry 600x250+400+400 --radiolist "Was also soll genau getan werden?" \
 +
11 "VIDEO-DVD........Fernsehaufnahme schneiden --> als Video-DVD brennen" on \
 +
12 "VIDEO-DVD........Fernsehaufnahme schneiden --> DVD-Struktur in Datei sichern" off \
 +
13 "VIDEO-DVD........Sicherung brennen" off`
 +
if [ $? != 0 ]
 
then
 
then
echo "*** Fehler *** Error ***Fehler ***"
+
kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
kdialog --error "Es konnte keine Datei multiplext werden!"
 
 
exit
 
exit
 
fi
 
fi
 
}
 
}
  
#----------------------------Auswahlmenues----------------------------------------
+
untermenue_ts ()
 
 
#..................Aufgaben.........................
 
aktionenauswahl ()
 
 
{
 
{
was_tun=`kdialog --caption "Videobearbeitung" --geometry 500x300-0+0 --radiolist "Was soll also getan werden?" \
+
was_tun=`kdialog --caption "Daten-DVD" --geometry 600x250+400+400 --radiolist "Was also soll genau getan werden?" \
1 "VIDEO-DVD........Fernsehaufnahme schneiden --> als Video-DVD brennen" on \
+
21 "TS-Stream..........Fernsehaufnahme schneiden --> TS als Daten-DVD brennen" on \
2 "VIDEO-DVD........Fernsehaufnahme schneiden --> DVD-Struktur in Datei sichern" off \
+
22 "TS-Stream..........Fernsehaufnahme schneiden --> TS sichern" off \
3 "VIDEO-DVD........DVD-Struktur brennen" off \
+
23 "TS-Stream..........Sicherung als Daten-DVD brennen" off`
4 "TS-Stream..........Fernsehaufnahme schneiden --> TS als Daten-DVD brennen" off \
+
if [ $? != 0 ]
5 "TS-Stream..........Fernsehaufnahme schneiden --> TS sichern" off \
 
6 "TS-Stream..........TS-file als Daten-DVD brennen" off \
 
7 "Videoclip.............DVB-Clip schneiden, Ton normalisieren, speichern" off \
 
8 "Videoclip.............Mpeg1-Clip Ton normalisieren, speichern" off`
 
if [ $? = 0 ]
 
 
then
 
then
echo $was_tun
+
kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
else
 
kdialog --msgbox "Programm vom Benutzer abgebrochen"
 
 
exit
 
exit
 
fi
 
fi
 
}
 
}
  
#...........Welcher Film / Clip...................
+
untermenue_videoclip ()
filmauswahl ()
 
 
{
 
{
quelldatei=`kdialog --caption "Filmauswahl" --geometry 500x500-0+0 --getopenfilename ${aufnahme_pfad}`
+
was_tun=`kdialog --caption "Videoclips" --geometry 600x250+400+400 --radiolist "Was also soll genau getan werden?" \
if [ $? = 0 ]
+
31 "Videoclip.............Schneiden und speichern (Ton: MP2 normalisiert + AC3)" on \
 +
32 "Videoclip............ Schneiden und speichern (Ton: AC3)" off \
 +
33 "Videoclip............ Schneiden und speichern (Ton: MP2 normalisiert)" off \
 +
34 "Mpeg1-Clip............Schneiden und speichern (Ton: MP2 normalisiert)" off`
 +
if [ $? != 0 ]
 
then
 
then
echo $quelldatei
+
kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
else
 
kdialog --msgbox "Programm vom Benutzer abgebrochen"
 
 
exit
 
exit
 
fi
 
fi
 
}
 
}
  
#............Welches Verzeichnis..................
+
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Auswahl der Eingangsdateien°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
verzeichnisauswahl ()
+
 
 +
filmauswahl_dvd ()
 +
{
 +
brenn_pfad=${dvdstruktur_pfad}
 +
filmauswahl
 +
}
 +
 
 +
filmauswahl_ts ()
 +
{
 +
brenn_pfad=${tmp_pfad}
 +
filmauswahl
 +
}
 +
 
 +
filmauswahl_clip ()
 +
{
 +
filmauswahl
 +
}
 +
 
 +
filmauswahl ()
 
{
 
{
verzeichnis=`kdialog --caption "Verzeichnisauswahl" --geometry 500x500-0+0 --getexistingdirectory ${sicherungs_pfad}`
+
quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename ${aufnahme_pfad}`
if [ $? = 0 ]
+
if [ $? != 0 ]
 
then
 
then
echo $verzeichnis
+
kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
else
 
kdialog --msgbox "Programm vom Benutzer abgebrochen"
 
 
exit
 
exit
 
fi
 
fi
 
}
 
}
  
#------------------------------Input / Demux / Cut------------------------------------
+
verzeichnisauswahl_dvd ()
 +
{
 +
verzeichnistyp="*_dvd"
 +
verzeichnisauswahl
 +
}
  
#......projectx mit gui zum schneiden und demultiplexen.....
+
verzeichnisauswahl_ts ()
 +
{
 +
verzeichnistyp="*_ts"
 +
verzeichnisauswahl
 +
}
 +
 
 +
verzeichnisauswahl ()
 +
{
 +
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
 +
0) kdialog --passivepopup "Es gibt nichts passendes zum Brennen. Das Script wird nun beendet." 3
 +
exit ;;
 +
1) kdialog --passivepopup "Folgende Sicherung wird gebrannt: $hilfsverzeichnis" 3
 +
verzeichnis=$hilfsverzeichnis ;;
 +
*) verzeichnis=`kdialog --combobox "Welche Datei soll gebrannt werden?" $hilfsverzeichnis`
 +
if [ $? != 0 ]
 +
then
 +
kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
 +
exit
 +
fi ;;
 +
esac
 +
 
 +
brenn_pfad=$verzeichnis
 +
}
 +
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Eingangsverarbeitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
 +
 
 +
#-----Schneiden und Demultiplexen-----
 
pjx_demux_gui ()
 
pjx_demux_gui ()
 
{
 
{
Zeile 234: Zeile 308:
 
}
 
}
  
#......projectx mit gui zum schneiden und wandeln nach ts.....
+
#-----Schneiden und Wandeln nach TS-----
 
pjx_ts_gui ()
 
pjx_ts_gui ()
 
{
 
{
Zeile 242: Zeile 316:
 
}
 
}
  
#.....projectx mit gui zum schneiden und Ton decodieren.......
 
pjx_clip ()
 
{
 
echo "*** Ton --> wav mit PJX"
 
java -jar ${pjx} -demux -gui  -ini ${default_pfad}/X.ini.clip -out ${tmp_pfad} -name film "$quelldatei" 1>/dev/null
 
echo "*** erledigt" ; echo
 
}
 
 
#..................ffmpeg für mgeg1-Video (VCD)................
 
 
mpeg1_input ()
 
mpeg1_input ()
 
{
 
{
 
echo "*** mpeg1 demultiplexen ( Video copy, Ton --> wav) ***"
 
echo "*** mpeg1 demultiplexen ( Video copy, Ton --> wav) ***"
${ffmpeg} -i "${quelldatei}" ${tmp_pfad}/film.mp2.wav -vcodec copy ${tmp_pfad}/film.m1v
+
${ffmpeg} -i "${quelldatei}" ${tmp_pfad}/film.mp2 -vcodec copy ${tmp_pfad}/film.m1v
mv "${tmp_pfad}/film.wav" "${tmp_pfad}/film.mp2.wav"
 
 
echo "*** erledigt" ; echo
 
echo "*** erledigt" ; echo
 
}
 
}
  
 +
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Bearbeitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  
#----------------------------Film zu lang für 1 DVD-------------------------------------
 
 
#..............Requantisieren.....................
 
 
requantisieren ()
 
requantisieren ()
 
{
 
{
Zeile 273: Zeile 335:
 
then
 
then
 
echo "*** Requantisieren ***"
 
echo "*** Requantisieren ***"
kdialog --msgbox "Requantisierung mit Faktor "${requantisierungsfaktor}" notwendig"
+
kdialog --passivepopup "Es wird mit folgendem Faktor requantifiziert: ${requantisierungsfaktor}" 3
 
${tcrequant} -d2 -i ${tmp_pfad}/film.m2v -o ${tmp_pfad}/film.requant -f ${requantisierungsfaktor}
 
${tcrequant} -d2 -i ${tmp_pfad}/film.m2v -o ${tmp_pfad}/film.requant -f ${requantisierungsfaktor}
 
mv ${tmp_pfad}/film.requant ${tmp_pfad}/film.m2v
 
mv ${tmp_pfad}/film.requant ${tmp_pfad}/film.m2v
Zeile 280: Zeile 342:
 
}
 
}
  
#----------------------------encodieren / bearbeiten-------------------------------------
+
#........mp2-Ton auf einheitliche Lautstärke bringen (-12dBfs)..........
 
 
#........Ton auf einheitliche Lautstärke bringen (-12dBfs)..........
 
 
normalisieren ()
 
normalisieren ()
 
{
 
{
 +
mv ${basisverzeichnis}/dvd_tmp/film.mp2 ${basisverzeichnis}/dvd_tmp1
 +
rm ${basisverzeichnis}/dvd_tmp/*.mp2
 +
 +
echo "*** Ton decodieren ***"
 +
${ffmpeg} -i ${basisverzeichnis}/dvd_tmp1/film.mp2 ${basisverzeichnis}/dvd_tmp1/film.mp2.wav
 +
 
echo "*** Ton normalisieren ***"
 
echo "*** Ton normalisieren ***"
${normalize} -v ${tmp_pfad}/film.mp2.wav 2>&1
+
${normalize} -v ${basisverzeichnis}/dvd_tmp1/film.mp2.wav 2>&1
 +
 
 +
echo "*** Ton encodieren  ***"
 +
${ffmpeg} -i ${basisverzeichnis}/dvd_tmp1/film.mp2.wav -acodec mp2 -ab 192k ${tmp_pfad}/film.mp2 2>&1
 +
 
 +
rm ${basisverzeichnis}/dvd_tmp1/*
 +
 
 
echo "*** erledigt" ; echo
 
echo "*** erledigt" ; echo
 
}
 
}
  
#.............Ton.wav encodieren zu Ton.mp2..............
+
ac3_behalten ()
encode2mp2 ()
 
 
{
 
{
echo "*** wav --> mp2 ***"
+
if [ ! -e ${basisverzeichnis}/dvd_tmp/*.ac3 ]
${ffmpeg} -i ${tmp_pfad}/film.mp2.wav -acodec mp2 -ab 192k ${tmp_pfad}/film.mp2 2>&1
+
then
rm ${basisverzeichnis}/dvd_tmp/*.wav
+
kdialog --passivepopup "Der Clip enthält keinen AC3-Ton. Das Script wird nun beendet." 3
 +
exit
 +
fi
 +
 
 +
rm ${basisverzeichnis}/dvd_tmp/*.mp2
 +
}
 +
 
 +
mp2_behalten ()
 +
{
 +
if [ ! -e ${basisverzeichnis}/dvd_tmp/*.mp2 ]
 +
then
 +
kdialog --passivepopup "Der Clip enthält keinen mp2-Ton. Das Script wird nun beendet." 3
 +
exit
 +
fi
 +
 
 
rm ${basisverzeichnis}/dvd_tmp/*.ac3
 
rm ${basisverzeichnis}/dvd_tmp/*.ac3
echo "*** erledigt" ; echo
 
 
}
 
}
  
#.....multiplexen
+
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Multiplexen, Codieren°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
 +
 
 
multiplexen ()
 
multiplexen ()
 
{
 
{
 
echo "*** Multiplexen ***"
 
echo "*** Multiplexen ***"
echo "***Bearbeitung läuft"
+
echo "***Bearbeitung läuft - kann etwas dauern"
 
mpeg1_video=
 
mpeg1_video=
 
mpeg2_video=
 
mpeg2_video=
Zeile 315: Zeile 400:
 
ac3_audio=`find ${tmp_pfad} | grep "ac3"`
 
ac3_audio=`find ${tmp_pfad} | grep "ac3"`
  
${mplex} -v1 -f8 -o ${tmp_pfad}/film.mpg ${mpeg1_video} ${mpeg2_video} ${mp2_audio} ${ac3_audio}
+
${mplex} -v1 -f8 -o ${tmp_pfad}/film.mpg ${mpeg1_video} ${mpeg2_video} ${mp2_audio} ${ac3_audio} 2>/dev/null
 +
 
 +
if [ ! -e ${tmp_pfad}/film.mpg ]
 +
then
 +
echo "*** Fehler *** Error ***Fehler ***"
 +
kdialog --error "Es konnte keine Datei multiplext werden!"
 +
exit
 +
fi
  
rm ${basisverzeichnis}/dvd_tmp/*.m1v
+
echo "*** erledigt" ; echo
rm ${basisverzeichnis}/dvd_tmp/*.m2v
 
rm ${basisverzeichnis}/dvd_tmp/*.mp2
 
rm ${basisverzeichnis}/dvd_tmp/*.ac3
 
echo "*** erledigt"
 
 
}
 
}
  
 +
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Author'n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  
 
#----------------------------------DVD-Authoring----------------------------------------
 
 
#.........Authoring ohne DVD-Menue...............
 
 
authoring_ohne_menue ()
 
authoring_ohne_menue ()
 
{
 
{
Zeile 337: Zeile 422:
 
}
 
}
  
 +
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Ergebniskontrolle°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  
#---------------------------------DVD brennen--------------------------------------------
+
abspielen ()
 +
{
 +
echo "*** Abspielen ***"
 +
echo
 +
echo "*****************************************"
 +
echo "***    Screenshot mit Strg + s      ***"
 +
echo "***    Weiter    mit Strg + q      ***"
 +
echo "*****************************************"
 +
echo
 +
$kaffeine -nofork --geometry 600x500-0+0 ${brenn_pfad}
 +
echo "*** erledigt" ; echo
 +
}
 +
 
 +
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Brennen°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  
#..............Video-DVD...............
 
 
brennen_video_dvd ()
 
brennen_video_dvd ()
 
{
 
{
Zeile 350: Zeile 448:
 
}
 
}
  
#.............Daten-DVD................
 
 
brennen_ts ()
 
brennen_ts ()
 
{
 
{
Zeile 368: Zeile 465:
 
}
 
}
  
#--------------------------Filme / Clips auf Festplatte sichern--------------------------
+
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Sichern°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
  
#............DVD-Struktur................
+
sichern_dvd_struktur ()
sichern_struktur ()
 
 
{
 
{
 
echo "*** DVD-Struktur sichern ***"
 
echo "*** DVD-Struktur sichern ***"
sicherungsordner=$(date +%Y%m%d%H%M%S)
+
sicherungsordner="$(date +%Y%m%d%H%M%S)_dvd"
 
mkdir ${sicherungs_pfad}/${sicherungsordner}
 
mkdir ${sicherungs_pfad}/${sicherungsordner}
 
mv ${dvdstruktur_pfad}/* ${sicherungs_pfad}/${sicherungsordner}
 
mv ${dvdstruktur_pfad}/* ${sicherungs_pfad}/${sicherungsordner}
Zeile 381: Zeile 477:
 
}
 
}
  
#..................TS...................
 
 
sichern_ts ()
 
sichern_ts ()
 
{
 
{
 
echo "*** TS sichern ***"
 
echo "*** TS sichern ***"
sicherungsordner=$(date +%Y%m%d%H%M%S)
+
sicherungsordner="$(date +%Y%m%d%H%M%S)_ts"
 
mkdir ${sicherungs_pfad}/${sicherungsordner}
 
mkdir ${sicherungs_pfad}/${sicherungsordner}
 
mv ${tmp_pfad}/*.ts ${sicherungs_pfad}/${sicherungsordner}
 
mv ${tmp_pfad}/*.ts ${sicherungs_pfad}/${sicherungsordner}
Zeile 392: Zeile 487:
 
}
 
}
  
#................Clip...................
+
sichern_clip ()
clip_speichern ()
 
 
{
 
{
 
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${clip_pfad}`
 
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${clip_pfad}`
echo $clipspeicher
 
 
mv ${tmp_pfad}/film.mpg "${clipspeicher}"
 
mv ${tmp_pfad}/film.mpg "${clipspeicher}"
 
}
 
}
  
#---------------------------- Ergebnis bearbeiten ------------------------
+
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Hauptprogramm++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  
#....................DVD-Struktur abspielen (Screenshot)..................
+
#-----Initialisierung-----
abspielen ()
+
 
{
+
basisverzeichnis_festlegen
echo "*** DVD-Struktur abspielen ***"
+
arbeitsverzeichnisse_erstellen
echo
+
programmerkennung
echo "*************************************************"
+
variablenzuweisungen
echo "* Für Screenshots folgende Taste drücken:  s  *"
+
konfiguration
echo "* Abspielen beenden mit Taste:            esc  *"
+
loeschen_temporaere_arbeitsordner
echo "*************************************************"
 
  
cd ${screenshot_pfad}
+
#-----Hauptmenue-----
${mplayer_pfad} -vf screenshot -geometry 100%:0% dvd://1 -dvd-device ${brenn_pfad} 1>/dev/null
 
  
echo "*** erledigt"
+
hauptmenue
}
+
case $auswahl_hauptmenue in
 +
1) untermenue_video_dvd ;;
 +
2) untermenue_ts ;;
 +
3) untermenue_videoclip ;;
 +
 +
esac
  
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Hauptprogramm ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
#-----untermenue_video_dvd-----
  
del_ordner
 
aktionenauswahl
 
 
case $was_tun in
 
case $was_tun in
  
1) filmauswahl #---------- Fernsehaufnahme schneiden und als Video-DVD brennen -------------------
+
11) filmauswahl_dvd #Fernsehaufnahme schneiden und als Video-DVD brennen
brenn_pfad=${dvdstruktur_pfad}
 
 
pjx_demux_gui
 
pjx_demux_gui
 
requantisieren
 
requantisieren
 
multiplexen
 
multiplexen
fehler
 
 
authoring_ohne_menue
 
authoring_ohne_menue
 
abspielen
 
abspielen
 
brennen_video_dvd ;;
 
brennen_video_dvd ;;
  
2) filmauswahl #---------- Fernsehaufnahme schneiden und DVD-Struktur in Datei sichern ------
+
12) filmauswahl_dvd #Fernsehaufnahme schneiden und DVD-Struktur in Datei sichern
brenn_pfad=${dvdstruktur_pfad}
 
 
pjx_demux_gui
 
pjx_demux_gui
 
requantisieren
 
requantisieren
 
multiplexen
 
multiplexen
fehler
 
 
authoring_ohne_menue
 
authoring_ohne_menue
sichern_struktur ;;
+
abspielen
 +
sichern_dvd_struktur ;;
  
3) verzeichnisauswahl #------------ DVD-Struktur brennen -----------------------
+
13) verzeichnisauswahl_dvd #DVD-Struktur brennen
brenn_pfad=${verzeichnis}
 
 
abspielen
 
abspielen
 
brennen_video_dvd ;;
 
brennen_video_dvd ;;
 +
esac
  
4) filmauswahl #----Fernsehaufnahme schneiden, TS als Daten-DVD brennen------
+
#-----untermenue_ts-----
brenn_pfad=${tmp_pfad}
+
 
 +
case $was_tun in
 +
 
 +
21) filmauswahl_ts #Fernsehaufnahme schneiden, TS als Daten-DVD brennen
 
pjx_ts_gui
 
pjx_ts_gui
 
brennen_ts ;;
 
brennen_ts ;;
  
5) filmauswahl #--------Fernsehaufnahme schneiden, TS und sichern --------------
+
22) filmauswahl_ts #Fernsehaufnahme schneiden, TS und sichern
 
pjx_ts_gui
 
pjx_ts_gui
 
sichern_ts ;;
 
sichern_ts ;;
  
6) verzeichnisauswahl #---------gesichertes TS-file als Daten-DVD brennen ---------------
+
23) verzeichnisauswahl_ts #gesichertes TS-file als Daten-DVD brennen
brenn_pfad=${verzeichnis}
 
 
brennen_ts ;;
 
brennen_ts ;;
 +
esac
 +
 +
#-----untermenue_videoclip-----
 +
 +
case $was_tun in
  
7) filmauswahl #---------DVB-Clip schneiden, normalisieren, speichern
+
31) filmauswahl_clip #DVB-Clip: Schneiden und speichern (Ton: MP2 normalisiert + AC3)
pjx_clip
+
pjx_demux_gui
 
normalisieren
 
normalisieren
encode2mp2
 
 
multiplexen
 
multiplexen
fehler
+
sichern_clip ;;
clip_speichern;;
 
  
8) filmauswahl #-------mpeg1-Clip schneiden, normalisieren, speichern
+
32) filmauswahl_clip #DVB-Clip: Schneiden und speichern (Ton: AC3)
 +
pjx_demux_gui
 +
ac3_behalten
 +
multiplexen
 +
sichern_clip ;;
 +
 
 +
33) filmauswahl_clip #DVB-Clip: Schneiden und speichern (Ton: MP2 normalisiert)
 +
pjx_demux_gui
 +
mp2_behalten
 +
multiplexen
 +
sichern_clip ;;
 +
 
 +
34) filmauswahl #Mpeg1-Clip: Schneiden und speichern (Ton: MP2 normalisiert)
 
mpeg1_input
 
mpeg1_input
 
normalisieren
 
normalisieren
encode2mp2
 
 
multiplexen
 
multiplexen
fehler
+
sichern_clip ;;
clip_speichern ;;
 
 
esac
 
esac
  
kdialog --msgbox "Bearbeitung beendet"
+
exit
 +
 
 +
 
 +
</pre>
  
exit 0 #programmende
+
{{Dvbscript navigationsbox}}
<pre/>
+
[[Category:Multimedia]]

Version vom 19. August 2008, 19:11 Uhr


Vom DVB zur DVD, ein Wikibuch: Übersicht - Der Weg - Die Helferprogramme - Das Script - Installation - Bedienungsanleitung - Programmieranleitung


Bitte die Installationsanleitung beachten!


#!/bin/bash

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++BESCHREIBUNG ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#Name: DVB_Wiki_Buch_Script
#Version: 0.6.0
#Erstellungsdatum: 18.8.2008
#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

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Funktionen++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Für's Austesten°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

stop ()
{
kdialog --msgbox "Programm unterbrochen"
}

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Initialisierung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

#-----Basisverzeichnis festlegen beim ersten Scriptaufruf-----

basisverzeichnis_festlegen ()
{
echo "*** Festlegen des Basisverzeichnisses ***"

if [ ! -e ~/.dvb_wiki_script_arbeitsverzeichnis.txt ]
then
	hilfsverzeichnis=`kdialog --caption "Name des Arbeitsverzeichnisses" --inputbox ~/ dvb_wiki_script`
	if [ $? = 0 ]
	then
		basisverzeichnis=~/`echo $hilfsverzeichnis | tr -d " "`
		if [ -e ${basisverzeichnis} ]
		then
			kdialog --passivepopup "Verzeichnis existiert schon! Bitte neu wählen" 3
			basisverzeichnis_festlegen
		else
			kdialog --passivepopup "Die Verzeichnisstruktur wird in folgendem Arbeitsverzeichnis erstellt: ${basisverzeichnis}" 3
			echo ${basisverzeichnis} > ~/.dvb_wiki_script_arbeitsverzeichnis.txt
		fi
		
	else
		kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
		exit
	fi
fi

echo "*** erledigt" ; echo
}

#-----Basisverzeichnis und Arbeitsverzeichnisse anlegen-----

arbeitsverzeichnisse_erstellen ()
{
basisverzeichnis=`cat ~/.dvb_wiki_script_arbeitsverzeichnis.txt`
if [ ! -e ${basisverzeichnis} ] ; then mkdir ${basisverzeichnis} ; fi

if [ ! -e ${basisverzeichnis}/dvd_aufnahme ] ; then mkdir ${basisverzeichnis}/dvd_aufnahme ; fi
if [ ! -e ${basisverzeichnis}/dvd_tmp ] ; then mkdir ${basisverzeichnis}/dvd_tmp ; fi
if [ ! -e ${basisverzeichnis}/dvd_tmp1 ] ; then mkdir ${basisverzeichnis}/dvd_tmp1 ; fi
if [ ! -e ${basisverzeichnis}/dvd_struktur ] ; then mkdir ${basisverzeichnis}/dvd_struktur ; fi
if [ ! -e ${basisverzeichnis}/dvd_sicherung ] ; then mkdir ${basisverzeichnis}/dvd_sicherung ; fi
if [ ! -e ${basisverzeichnis}/dvd_default ] ; then mkdir ${basisverzeichnis}/dvd_default ; fi
if [ ! -e ${basisverzeichnis}/dvd_screenshot ] ; then mkdir ${basisverzeichnis}/dvd_screenshot ; fi
}

programmerkennung ()
{
echo "*** Programmerkennung ***"

name[0]=mplex
name[1]=tcrequant
name[2]=dvdauthor
name[3]=ProjectX.jar
name[4]=normalize
name[5]=ffmpeg
name[6]=growisofs
name[7]=kdialog
name[8]=kaffeine

for ((i=0 ; i<9 ; i++))
do
	touch $basisverzeichnis/dvd_default/pfad[$i].txt
	pfad[i]=`cat $basisverzeichnis/dvd_default/pfad[$i].txt`
	if [ ! -e ${pfad[i]}/${name[i]} ]
	then
		echo "${name[i]}:      Datei wird gesucht"
		gefundene_pfade=`find /bin /home /opt /usr -type f -name ${name[i]} -printf "%h " 2>/dev/null`
		pfadanzahl=`echo "$gefundene_pfade" | wc -w`

		case "$pfadanzahl" in
			0)	kdialog --passivepopup "Das Programm wurde nicht gefunden. Bitte installieren." 3
				exit ;;
			1)	echo "${name[i]}:      Datei gefunden" ; echo
				echo $gefundene_pfade > $basisverzeichnis/dvd_default/pfad[$i].txt ;;
			*)	auswahl_gefundene_pfade=`kdialog --caption "${name[i]}" --combobox "Bitte Pfad auswählen" $gefundene_pfade --default $gefundene_pfade`
				if [ $? = 0 ]
				then
					echo ${auswahl_gefundene_pfade} > $basisverzeichnis/dvd_default/pfad[$i].txt
				else
					kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
					exit
				fi
				echo "${name[i]}:      Datei gefunden" ; echo ;;
		esac
	fi
done

echo "*** erledigt" ; echo
}

#-----Variablenzuweisungen zur besseren Lesbarkeit des Scriptes-----

variablenzuweisungen ()
{
mplex=${pfad[0]}/${name[0]}
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]}
kdialog=${pfad[7]}/${name[7]}
kaffeine=${pfad[8]}/${name[8]}

aufnahme_pfad=${basisverzeichnis}/dvd_aufnahme
tmp_pfad=${basisverzeichnis}/dvd_tmp
dvdstruktur_pfad=${basisverzeichnis}/dvd_struktur
sicherungs_pfad=${basisverzeichnis}/dvd_sicherung
screenshot_pfad=$basisverzeichnis/dvd_screenshot
default_pfad=${basisverzeichnis}/dvd_default
clip_pfad=~/Videoclips
}

#-----Vorbereiten der X.ini's für ProjectX----

konfiguration ()
{
#---X.ini für Filmbearbeitung---
echo \
"# Application
Application.Agreement=1
Application.Language=de

# WindowPosition
WindowPosition.Main.Height=670
WindowPosition.Main.Width=866
WindowPosition.Main.X=500
WindowPosition.Main.Y=0

# OptionPanel
OptionPanel.NormalLog=0
OptionPanel.closeOnEnd=1" > ${default_pfad}/X.ini.film

#---Voreinstellungen---
brenngeschwindigkeit=8 #maximale Brenngeschwindigkeit
maxgroesse=4600000000 #für DVD5
}

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Löschfunktionen°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

loeschen_temporaere_arbeitsordner ()
{
echo "*** Löschen der temporären Arbeitsordner (kann etwas dauern)***"

rm ${basisverzeichnis}/dvd_tmp/* 2>/dev/null
rm ${basisverzeichnis}/dvd_tmp1/* 2>/dev/null
rm -r ${basisverzeichnis}/dvd_struktur/* 2>/dev/null
rmdir ${basisverzeichnis}/dvd_struktur/* 2>/dev/null

echo "*** erledigt" ; echo
}

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Aufgabenmenues°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

hauptmenue ()
{
auswahl_hauptmenue=`kdialog --caption "Hauptmenue" --geometry 200x250+500+400 --radiolist "Bitte einen Aufgabenbereich wählen" \
	1	"VIDEO-DVD" on \
	2	"TS-Stream" off \
	3	"Videoclips" off`
if [ $? != 0 ]
then
	kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
	exit
fi
}

untermenue_video_dvd ()
{
brenn_pfad=${dvdstruktur_pfad}

was_tun=`kdialog --caption "Video_DVD" --geometry 600x250+400+400 --radiolist "Was also soll genau getan werden?" \
	11	"VIDEO-DVD........Fernsehaufnahme schneiden --> als Video-DVD brennen" on \
	12	"VIDEO-DVD........Fernsehaufnahme schneiden --> DVD-Struktur in Datei sichern" off \
	13	"VIDEO-DVD........Sicherung brennen" off`
if [ $? != 0 ]
then
	kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
	exit
fi
}

untermenue_ts ()
{
was_tun=`kdialog --caption "Daten-DVD" --geometry 600x250+400+400 --radiolist "Was also soll genau getan werden?" \
	21	"TS-Stream..........Fernsehaufnahme schneiden --> TS als Daten-DVD brennen" on \
	22	"TS-Stream..........Fernsehaufnahme schneiden --> TS sichern" off \
	23	"TS-Stream..........Sicherung als Daten-DVD brennen" off`
if [ $? != 0 ]
then
	kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
	exit
fi
}

untermenue_videoclip ()
{
was_tun=`kdialog --caption "Videoclips" --geometry 600x250+400+400 --radiolist "Was also soll genau getan werden?" \
	31	"Videoclip.............Schneiden und speichern (Ton: MP2 normalisiert + AC3)" on \
	32	"Videoclip............ Schneiden und speichern (Ton: AC3)" off \
	33	"Videoclip............ Schneiden und speichern (Ton: MP2 normalisiert)" off \
	34	"Mpeg1-Clip............Schneiden und speichern (Ton: MP2 normalisiert)" off`
if [ $? != 0 ]
then
	kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
	exit
fi
}

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Auswahl der Eingangsdateien°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

filmauswahl_dvd ()
{
brenn_pfad=${dvdstruktur_pfad}
filmauswahl
}

filmauswahl_ts ()
{
brenn_pfad=${tmp_pfad}
filmauswahl
}

filmauswahl_clip ()
{
filmauswahl
}

filmauswahl ()
{
quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename ${aufnahme_pfad}`
if [ $? != 0 ]
then
	kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
	exit
fi
}

verzeichnisauswahl_dvd ()
{
verzeichnistyp="*_dvd"
verzeichnisauswahl
}

verzeichnisauswahl_ts ()
{
verzeichnistyp="*_ts"
verzeichnisauswahl
}

verzeichnisauswahl ()
{
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
	0)	kdialog --passivepopup "Es gibt nichts passendes zum Brennen. Das Script wird nun beendet." 3
		exit ;;
	1)	kdialog --passivepopup "Folgende Sicherung wird gebrannt: $hilfsverzeichnis" 3
		verzeichnis=$hilfsverzeichnis ;;
	*)	verzeichnis=`kdialog --combobox "Welche Datei soll gebrannt werden?" $hilfsverzeichnis`
		if [ $? != 0 ]
		then
			kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3
			exit
		fi ;;
esac

brenn_pfad=$verzeichnis
}
#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Eingangsverarbeitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

#-----Schneiden und Demultiplexen-----
pjx_demux_gui ()
{
echo "*** DVB mit PJX ***"
java -jar ${pjx} -demux -gui  -ini ${default_pfad}/X.ini.film -out ${tmp_pfad} -name film "$quelldatei" 1>/dev/null
echo "*** erledigt" ; echo
}

#-----Schneiden und Wandeln nach TS-----
pjx_ts_gui ()
{
echo "*** TS mit PJX ***"
java -jar ${pjx} -tots -gui -split 4300 -ini ${default_pfad}/X.ini.film -out ${tmp_pfad} -name film "$quelldatei" 1>/dev/null
echo "*** erledigt" ; echo
}

mpeg1_input ()
{
echo "*** mpeg1 demultiplexen ( Video copy, Ton --> wav) ***"
${ffmpeg} -i "${quelldatei}" ${tmp_pfad}/film.mp2 -vcodec copy ${tmp_pfad}/film.m1v
echo "*** erledigt" ; echo
}

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Bearbeitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

requantisieren ()
{
videogroesse=`du -bc ${tmp_pfad}/*.m2v | cut -f1 | tail -n 1` #Berechnung des Requantisierungsfaktors
audio_summe=`du -bc ${tmp_pfad}/*.ac3 ${tmp_pfad}/*.mp2 | cut -f1 | tail -n 1`
audio_video_summe=`du -bc ${tmp_pfad}/*.ac3 ${tmp_pfad}/*.mp2 ${tmp_pfad}/*.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
	echo "*** Requantisieren ***"
	kdialog --passivepopup "Es wird mit folgendem Faktor requantifiziert: ${requantisierungsfaktor}" 3
	${tcrequant} -d2 -i ${tmp_pfad}/film.m2v -o ${tmp_pfad}/film.requant -f ${requantisierungsfaktor}
	mv ${tmp_pfad}/film.requant ${tmp_pfad}/film.m2v
	echo "*** erledigt" ; echo
fi
}

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

echo "*** Ton decodieren ***"
${ffmpeg} -i ${basisverzeichnis}/dvd_tmp1/film.mp2 ${basisverzeichnis}/dvd_tmp1/film.mp2.wav

echo "*** Ton normalisieren ***"
${normalize} -v ${basisverzeichnis}/dvd_tmp1/film.mp2.wav 2>&1

echo "*** Ton encodieren  ***"
${ffmpeg} -i ${basisverzeichnis}/dvd_tmp1/film.mp2.wav -acodec mp2 -ab 192k ${tmp_pfad}/film.mp2 2>&1

rm ${basisverzeichnis}/dvd_tmp1/*

echo "*** erledigt" ; echo
}

ac3_behalten ()
{
if [ ! -e ${basisverzeichnis}/dvd_tmp/*.ac3 ]
then
	kdialog --passivepopup "Der Clip enthält keinen AC3-Ton. Das Script wird nun beendet." 3
	exit
fi

rm ${basisverzeichnis}/dvd_tmp/*.mp2
}

mp2_behalten ()
{
if [ ! -e ${basisverzeichnis}/dvd_tmp/*.mp2 ]
then
	kdialog --passivepopup "Der Clip enthält keinen mp2-Ton. Das Script wird nun beendet." 3
	exit
fi

rm ${basisverzeichnis}/dvd_tmp/*.ac3
}

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

multiplexen ()
{
echo "*** Multiplexen ***"
echo "***Bearbeitung läuft - kann etwas dauern"
mpeg1_video=
mpeg2_video=
mp2_audio=
ac3_audio=

mpeg1_video=`find ${tmp_pfad} | grep "m1v"`
mpeg2_video=`find ${tmp_pfad} | grep "m2v"`
mp2_audio=`find ${tmp_pfad} | grep "mp2"`
ac3_audio=`find ${tmp_pfad} | grep "ac3"`

${mplex} -v1 -f8 -o ${tmp_pfad}/film.mpg ${mpeg1_video} ${mpeg2_video} ${mp2_audio} ${ac3_audio} 2>/dev/null

if [ ! -e ${tmp_pfad}/film.mpg ]
then
	echo "*** Fehler *** Error ***Fehler ***"
	kdialog --error "Es konnte keine Datei multiplext werden!"
	exit
fi

echo "*** erledigt" ; echo
}

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

authoring_ohne_menue ()
{
echo "*** Authoring der DVD ***"
${dvdauthor} -o ${dvdstruktur_pfad} -t ${tmp_pfad}/film.mpg 2>&1 #VOBs und "Kapitel"-IFOs
${dvdauthor} -o ${dvdstruktur_pfad} -T #VIDEO_TS.BUP und VIDEO_TS.IFO
echo "*** erledigt" ; echo
}

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Ergebniskontrolle°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

abspielen ()
{
echo "*** Abspielen ***"
echo
echo "*****************************************"
echo "***     Screenshot mit Strg + s       ***"
echo "***     Weiter     mit Strg + q       ***"
echo "*****************************************"
echo
$kaffeine -nofork --geometry 600x500-0+0 ${brenn_pfad}
echo "*** erledigt" ; echo
}

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Brennen°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

brennen_video_dvd ()
{
echo "*** Video-DVD brennen ***"
kdialog --msgbox "Bitte leere DVD einlegen"
${growisofs} -speed=${brenngeschwindigkeit} -dvd-compat -Z /dev/dvd -dvd-video ${brenn_pfad} 2>&1
kdialog --msgbox "Bitte DVD entnehmen"
echo "*** erledigt" ; echo
}

brennen_ts ()
{
echo "*** Daten-DVD brennen ***"
dvdzahl=`find ${brenn_pfad} -type f | wc -l`
kdialog --msgbox "Anzahl der notwendigen DVDs: ${dvdzahl}"

for((i=1; i<=${dvdzahl}; i++))
do
	kdialog --msgbox "Bitte DVD Nr.: $i einlegen"
	${growisofs} -speed=${brenngeschwindigkeit} -Z /dev/dvd  -allow-limited-size -R -J ${brenn_pfad}/"film($((i-1)))"* 2>&1
	kdialog --msgbox "Bitte DVD entnehmen"
done

kdialog --msgbox "fertig"
echo "*** erledigt" ; echo
}

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Sichern°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

sichern_dvd_struktur ()
{
echo "*** DVD-Struktur sichern ***"
sicherungsordner="$(date +%Y%m%d%H%M%S)_dvd"
mkdir ${sicherungs_pfad}/${sicherungsordner}
mv ${dvdstruktur_pfad}/* ${sicherungs_pfad}/${sicherungsordner}
kdialog --msgbox "Datei gesichert nach "${sicherungs_pfad}/${sicherungsordner}
echo "*** erledigt" ; echo
}

sichern_ts ()
{
echo "*** TS sichern ***"
sicherungsordner="$(date +%Y%m%d%H%M%S)_ts"
mkdir ${sicherungs_pfad}/${sicherungsordner}
mv ${tmp_pfad}/*.ts ${sicherungs_pfad}/${sicherungsordner}
kdialog --msgbox "Datei gesichert nach "${sicherungs_pfad}/${sicherungsordner}
echo "*** erledigt" ; echo
}

sichern_clip ()
{
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${clip_pfad}`
mv ${tmp_pfad}/film.mpg "${clipspeicher}"
}

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Hauptprogramm++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#-----Initialisierung-----

basisverzeichnis_festlegen
arbeitsverzeichnisse_erstellen
programmerkennung
variablenzuweisungen
konfiguration
loeschen_temporaere_arbeitsordner

#-----Hauptmenue-----

hauptmenue
case $auswahl_hauptmenue in
	1)	untermenue_video_dvd ;;
	2)	untermenue_ts ;;
	3)	untermenue_videoclip ;;
	
esac

#-----untermenue_video_dvd-----

case $was_tun in

	11)	filmauswahl_dvd #Fernsehaufnahme schneiden und als Video-DVD brennen
		pjx_demux_gui
		requantisieren
		multiplexen
		authoring_ohne_menue
		abspielen
		brennen_video_dvd ;;

	12)	filmauswahl_dvd #Fernsehaufnahme schneiden und DVD-Struktur in Datei sichern
		pjx_demux_gui
		requantisieren
		multiplexen
		authoring_ohne_menue
		abspielen
		sichern_dvd_struktur ;;

	13)	verzeichnisauswahl_dvd #DVD-Struktur brennen
		abspielen
		brennen_video_dvd ;;
esac

#-----untermenue_ts-----

case $was_tun in

	21)	filmauswahl_ts #Fernsehaufnahme schneiden, TS als Daten-DVD brennen
		pjx_ts_gui
		brennen_ts ;;

	22)	filmauswahl_ts #Fernsehaufnahme schneiden, TS und sichern
		pjx_ts_gui
		sichern_ts ;;

	23)	verzeichnisauswahl_ts #gesichertes TS-file als Daten-DVD brennen
		brennen_ts ;;
esac

#-----untermenue_videoclip-----

case $was_tun in

	31)	filmauswahl_clip #DVB-Clip: Schneiden und speichern (Ton: MP2 normalisiert + AC3)
		pjx_demux_gui
		normalisieren
		multiplexen
		sichern_clip ;;

	32)	filmauswahl_clip #DVB-Clip: Schneiden und speichern (Ton: AC3)
		pjx_demux_gui
		ac3_behalten
		multiplexen
		sichern_clip ;;

	33)	filmauswahl_clip #DVB-Clip: Schneiden und speichern (Ton: MP2 normalisiert)
		pjx_demux_gui
		mp2_behalten
		multiplexen
		sichern_clip ;;

	34)	filmauswahl #Mpeg1-Clip: Schneiden und speichern (Ton: MP2 normalisiert)
		mpeg1_input
		normalisieren
		multiplexen
		sichern_clip ;;
esac

exit



Vom DVB zur DVD, ein Wikibuch: Übersicht - Der Weg - Die Helferprogramme - Das Script - Installation - Bedienungsanleitung - Programmieranleitung