Dvb script gui/scriptcode: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(Aktualisierung)
(Neue Version 0.2.0, Änderungen siehe Diskussion zum Hauptartikel)
Zeile 10: Zeile 10:
  
 
#Name: dvb_script_gui_arbeitsscript
 
#Name: dvb_script_gui_arbeitsscript
#Version: 0.1.0
+
#Version: 0.2.0
#Erstellungsdatum: 2.1.2009
+
#Erstellungsdatum: 11.1.2009
 
#Autor: escho (www.linux-club.de)
 
#Autor: escho (www.linux-club.de)
 
#Benutzung auf eigene Gefahr
 
#Benutzung auf eigene Gefahr
Zeile 19: Zeile 19:
  
 
#Neu in dieser Version:
 
#Neu in dieser Version:
#Anpassung an die neue GUI, Codevereinfachung, neue Verzeichnisstruktur, Integration in ein Script-Widget der GUI
+
#Änderungenen siehe Diskussion zum Hauptartikel
  
 
# ---------------------------------Vorbereitungen-------------------------------------
 
# ---------------------------------Vorbereitungen-------------------------------------
Zeile 29: Zeile 29:
 
# Voreinstellungen
 
# Voreinstellungen
  
aufnahme=~/dvb_script/Aufnahme
+
hauptverzeichnis=~/dvbscript
druckschablonen=~/dvb_script/Druckschablonen
+
ini_verz=~/.dvbscript
videoclips=~/dvb_script/Videoclips
+
 
 +
aufnahme=~/DVB/Aufnahme
 +
druckschablonen=~/DVB/Druckschablonen
 +
videoclips=~/DVB/Videoclips
  
 
speed=8
 
speed=8
 
dvdgroesse=4600000000
 
dvdgroesse=4600000000
  
# Hauptverzeichnis festlegen
+
# Verzeichnisstruktur erstellen
  
mkdir ~/.dvb_script_kommander
+
mkdir $hauptverzeichnis 2>/dev/null
 
+
mkdir $ini_verz 2>/dev/null
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/dvdstruktur 2>/dev/null
Zeile 69: Zeile 50:
 
mkdir $hauptverzeichnis/tmp2 2>/dev/null
 
mkdir $hauptverzeichnis/tmp2 2>/dev/null
  
# Pfade der Logfenster für Kommmander
+
# Pfade für Kommmander
  
echo $hauptverzeichnis/fenster_fortschritt > ~/.dvb_script_kommander/fortschrittfenster
+
echo $hauptverzeichnis > $ini_verz/hauptverzeichnis
echo $hauptverzeichnis/fenster_debug > ~/.dvb_script_kommander/debugfenster
+
echo $hauptverzeichnis/fenster_fortschritt > $ini_verz/fortschrittfenster
 +
echo $hauptverzeichnis/fenster_debug > $ini_verz/debugfenster
  
# Anzeigefenster leeren und einstellen
+
# Anzeigefenster leeren
  
 
echo "" > $hauptverzeichnis/fenster_fortschritt
 
echo "" > $hauptverzeichnis/fenster_fortschritt
 
echo "" > $hauptverzeichnis/fenster_debug
 
echo "" > $hauptverzeichnis/fenster_debug
 +
 +
# Umleitung für Debug-Fenster
 +
 
exec 2> $hauptverzeichnis/fenster_debug
 
exec 2> $hauptverzeichnis/fenster_debug
 
  
 
# Hilfsprogramme festlegen
 
# Hilfsprogramme festlegen
Zeile 87: Zeile 71:
 
for var in ${hilfsprogramm[*]}
 
for var in ${hilfsprogramm[*]}
 
do
 
do
touch ~/.dvb_script_kommander/$var
+
touch $ini_verz/$var
hilfsvar=`cat ~/.dvb_script_kommander/$var`
+
hilfsvar=`cat $ini_verz/$var`
 
if [ ! -e "$hilfsvar/$var" ]
 
if [ ! -e "$hilfsvar/$var" ]
 
then
 
then
Zeile 99: Zeile 83:
 
exit ;;
 
exit ;;
  
1) echo $gefundene_pfade > ~/.dvb_script_kommander/$var ;;
+
1) echo "$var gefunden" >> $hauptverzeichnis/fenster_fortschritt
 +
echo $gefundene_pfade > $ini_verz/$var ;;
  
 
*) auswahl=`kdialog --caption "$var" --combobox "Bitte Pfad auswählen" $gefundene_pfade`
 
*) auswahl=`kdialog --caption "$var" --combobox "Bitte Pfad auswählen" $gefundene_pfade`
 
if [ $? = 0 ]
 
if [ $? = 0 ]
 
then
 
then
echo ${auswahl} > ~/.dvb_script_kommander/$var
+
echo "$var gefunden" >> $hauptverzeichnis/fenster_fortschritt
 +
echo $auswahl > $ini_verz/$var
 
else
 
else
 
kdialog --error "Abbruch durch den Benutzer! Installation wird abgebrochen!"
 
kdialog --error "Abbruch durch den Benutzer! Installation wird abgebrochen!"
Zeile 115: Zeile 101:
 
# Hilfsprogramme laden
 
# Hilfsprogramme laden
  
mplex=`cat ~/.dvb_script_kommander/mplex`/mplex
+
mplex=`cat $ini_verz/mplex`/mplex
tcrequant=`cat ~/.dvb_script_kommander/tcrequant`/tcrequant
+
tcrequant=`cat $ini_verz/tcrequant`/tcrequant
dvdauthor=`cat ~/.dvb_script_kommander/dvdauthor`/dvdauthor
+
dvdauthor=`cat $ini_verz/dvdauthor`/dvdauthor
pjx=`cat ~/.dvb_script_kommander/ProjectX.jar`/ProjectX.jar
+
pjx=`cat $ini_verz/ProjectX.jar`/ProjectX.jar
normalize=`cat ~/.dvb_script_kommander/normalize`/normalize
+
normalize=`cat $ini_verz/normalize`/normalize
ffmpeg=`cat ~/.dvb_script_kommander/ffmpeg`/ffmpeg
+
ffmpeg=`cat $ini_verz/ffmpeg`/ffmpeg
growisofs=`cat ~/.dvb_script_kommander/growisofs`/growisofs
+
growisofs=`cat $ini_verz/growisofs`/growisofs
  
 
# X.ini erzeugen
 
# X.ini erzeugen
Zeile 158: Zeile 144:
 
benutzerabbruch ()
 
benutzerabbruch ()
 
{
 
{
echo "" >> $hauptverzeichnis/fenster_fortschritt
 
 
echo "Abbruch durch den Benutzer" >> $hauptverzeichnis/fenster_fortschritt
 
echo "Abbruch durch den Benutzer" >> $hauptverzeichnis/fenster_fortschritt
 
programmende
 
programmende
Zeile 165: Zeile 150:
 
funktionsabbruch ()
 
funktionsabbruch ()
 
{
 
{
echo "" >> $hauptverzeichnis/fenster_fortschritt
 
 
echo "$1" >> $hauptverzeichnis/fenster_fortschritt
 
echo "$1" >> $hauptverzeichnis/fenster_fortschritt
 
programmende
 
programmende
Zeile 172: Zeile 156:
 
programmende ()
 
programmende ()
 
{
 
{
echo "" >> $hauptverzeichnis/fenster_fortschritt
 
 
echo "Ende" >> $hauptverzeichnis/fenster_fortschritt
 
echo "Ende" >> $hauptverzeichnis/fenster_fortschritt
 
kdialog --passivepopup "Programmende" 1000
 
kdialog --passivepopup "Programmende" 1000
Zeile 192: Zeile 175:
 
esac
 
esac
  
quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename "${aufnahme}"`
+
quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename "$aufnahme"`
 
if [ $? != 0 ]
 
if [ $? != 0 ]
 
then
 
then
Zeile 231: Zeile 214:
 
{
 
{
 
echo "ProjectX: Schneiden und demultiplexen" >> $hauptverzeichnis/fenster_fortschritt
 
echo "ProjectX: Schneiden und demultiplexen" >> $hauptverzeichnis/fenster_fortschritt
java -jar ${pjx} -demux -gui -ini $hauptverzeichnis/X.ini -out $hauptverzeichnis/tmp1 -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`
 
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 ]
 
if [ $audio_video_summe -ge $dvdgroesse ]
Zeile 244: Zeile 227:
 
{
 
{
 
echo "ProjectX: Schneiden und demultiplexen" >> $hauptverzeichnis/fenster_fortschritt
 
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"
+
java -jar $pjx -tots -gui -split 4300 -ini $hauptverzeichnis/X.ini -out $hauptverzeichnis/tmp1 -name film "$quelldatei"
 
}
 
}
  
Zeile 250: Zeile 233:
 
{
 
{
 
echo "ffmpeg: Decodierung Audio" >> $hauptverzeichnis/fenster_fortschritt
 
echo "ffmpeg: Decodierung Audio" >> $hauptverzeichnis/fenster_fortschritt
${ffmpeg} -i "${quelldatei}" $hauptverzeichnis/tmp1/film.mp2 -vcodec copy $hauptverzeichnis/tmp1/film.m1v
+
$ffmpeg -i "$quelldatei" $hauptverzeichnis/tmp1/film.mp2 -vcodec copy $hauptverzeichnis/tmp1/film.m1v
 
}
 
}
  
Zeile 259: Zeile 242:
 
{
 
{
 
mv $hauptverzeichnis/tmp1/film.mp2 $hauptverzeichnis/tmp2
 
mv $hauptverzeichnis/tmp1/film.mp2 $hauptverzeichnis/tmp2
rm -- ${hauptverzeichnis}/tmp1/*.mp2
+
rm -- $hauptverzeichnis/tmp1/*.mp2
  
 
echo "ffmpeg: Ton decodieren" >> $hauptverzeichnis/fenster_fortschritt
 
echo "ffmpeg: Ton decodieren" >> $hauptverzeichnis/fenster_fortschritt
${ffmpeg} -i $hauptverzeichnis/tmp2/film.mp2 $hauptverzeichnis/tmp2/film.mp2.wav
+
$ffmpeg -i $hauptverzeichnis/tmp2/film.mp2 $hauptverzeichnis/tmp2/film.mp2.wav
  
 
echo "normalize: Ton normalisieren" >> $hauptverzeichnis/fenster_fortschritt
 
echo "normalize: Ton normalisieren" >> $hauptverzeichnis/fenster_fortschritt
${normalize} $hauptverzeichnis/tmp2/film.mp2.wav
+
$normalize $hauptverzeichnis/tmp2/film.mp2.wav
  
 
echo "ffmpeg: Ton encodieren" >> $hauptverzeichnis/fenster_fortschritt
 
echo "ffmpeg: Ton encodieren" >> $hauptverzeichnis/fenster_fortschritt
${ffmpeg} -i $hauptverzeichnis/tmp2/film.mp2.wav -acodec mp2 -ab 192k $hauptverzeichnis/tmp1/film.mp2
+
$ffmpeg -i $hauptverzeichnis/tmp2/film.mp2.wav -acodec mp2 -ab 192k $hauptverzeichnis/tmp1/film.mp2
  
rm -- ${hauptverzeichnis}/tmp2/*
+
rm -- $hauptverzeichnis/tmp2/*
 
}
 
}
  
 
ac3_behalten ()
 
ac3_behalten ()
 
{
 
{
if [ ! -e ${hauptverzeichnis}/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}/tmp1/*.mp2
+
rm -- $hauptverzeichnis/tmp1/*.mp2
 
}
 
}
  
 
mp2_behalten ()
 
mp2_behalten ()
 
{
 
{
if [ ! -e ${hauptverzeichnis}/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}/tmp1/*.ac3
+
rm -- $hauptverzeichnis/tmp1/*.ac3
 
}
 
}
  
Zeile 308: Zeile 291:
 
ac3_audio=`find $hauptverzeichnis/tmp1 | grep "ac3"`
 
ac3_audio=`find $hauptverzeichnis/tmp1 | grep "ac3"`
  
${mplex} -v1 -f8 -o $hauptverzeichnis/tmp1/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 $hauptverzeichnis/tmp1/film.mpg ]
 
if [ ! -e $hauptverzeichnis/tmp1/film.mpg ]
Zeile 321: Zeile 304:
 
{
 
{
 
echo "dvdauthor: Erzeugen der DVD-Struktur" >> $hauptverzeichnis/fenster_fortschritt
 
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 $hauptverzeichnis/tmp1/film.mpg  #VOBs und "Kapitel"-IFOs
${dvdauthor} -o $hauptverzeichnis/dvdstruktur -T #VIDEO_TS.BUP und VIDEO_TS.IFO
+
$dvdauthor -o $hauptverzeichnis/dvdstruktur -T #VIDEO_TS.BUP und VIDEO_TS.IFO
 
}
 
}
  
Zeile 331: Zeile 314:
 
{
 
{
 
echo "growisofs: Video-DVD brennen" >> $hauptverzeichnis/fenster_fortschritt
 
echo "growisofs: Video-DVD brennen" >> $hauptverzeichnis/fenster_fortschritt
video_dvd_bereit
+
$growisofs  -dry-run -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
echo "Brennen beginnt" >> $hauptverzeichnis/fenster_fortschritt
+
while [ $? != 0 ]
${growisofs} -speed=${speed} -dvd-compat -Z /dev/dvd -dvd-video ${brenn_pfad}
+
do
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"
 
kdialog --warningcontinuecancel "DVD nicht bereit"
if [ $? = 0 ]
+
if [ $? != 0 ]
 
then
 
then
video_dvd_bereit
 
else
 
 
benutzerabbruch
 
benutzerabbruch
 
fi
 
fi
fi
+
$growisofs  -dry-run -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
 +
done
 +
echo "Brennen beginnt" >> $hauptverzeichnis/fenster_fortschritt
 +
$growisofs -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
 +
funktionsabbruch "Brennen fertig. Programm beendet"
 
}
 
}
  
Zeile 358: Zeile 333:
 
{
 
{
 
echo "growisofs: Daten-DVD brennen" >> $hauptverzeichnis/fenster_fortschritt
 
echo "growisofs: Daten-DVD brennen" >> $hauptverzeichnis/fenster_fortschritt
dvdzahl=`find ${brenn_pfad} -type f | wc -l`
+
dvdzahl=`find $brenn_pfad -type f | wc -l`
echo "" >> $hauptverzeichnis/fenster_fortschritt
+
echo "Anzahl der notwendigen DVDs: $dvdzahl" >> $hauptverzeichnis/fenster_fortschritt
echo "Anzahl der notwendigen DVDs: ${dvdzahl}" >> $hauptverzeichnis/fenster_fortschritt
 
  
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
 +
benutzerabbruch
 +
fi
 +
$growisofs -dry-run -speed=$speed -Z /dev/dvd -allow-limited-size -R -J $brenn_pfad/"film($((i-1)))[remux].ts"
 +
done
 +
echo "Brennvorgang gestartet" >> $hauptverzeichnis/fenster_fortschritt
 +
$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"
 
funktionsabbruch "Brennen fertig. Programm beendet"
}
 
 
loop_brennen_ts ()
 
{
 
daten_dvd_bereit
 
kdialog --msgbox "Bitte DVD Nr.: $i einlegen"
 
if [ $? = 0 ]
 
then
 
echo "" >> $hauptverzeichnis/fenster_fortschritt
 
echo "Brennvorgang gestartet" >> $hauptverzeichnis/fenster_fortschritt
 
${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
 
 
}
 
}
  
Zeile 406: Zeile 360:
 
echo "Sichern der DVD-Stuktur" >> $hauptverzeichnis/fenster_fortschritt
 
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 $hauptverzeichnis/sicherung/${sicherungsordner}
+
mkdir $hauptverzeichnis/sicherung/$sicherungsordner
mv $hauptverzeichnis/dvdstruktur/* $hauptverzeichnis/sicherung/${sicherungsordner}
+
mv $hauptverzeichnis/dvdstruktur/* $hauptverzeichnis/sicherung/$sicherungsordner
funktionsabbruch "Datei gesichert nach $hauptverzeichnis/sicherung/${sicherungsordner}. Programm beendet"
+
funktionsabbruch "Datei gesichert nach $hauptverzeichnis/sicherung/$sicherungsordner. Programm beendet"
 
}
 
}
  
Zeile 415: Zeile 369:
 
echo "Sichern des TS-File" >> $hauptverzeichnis/fenster_fortschritt
 
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 $hauptverzeichnis/sicherung/${sicherungsordner}
+
mkdir $hauptverzeichnis/sicherung/$sicherungsordner
mv $hauptverzeichnis/tmp1/*.ts $hauptverzeichnis/sicherung/${sicherungsordner}
+
mv $hauptverzeichnis/tmp1/*.ts $hauptverzeichnis/sicherung/$sicherungsordner
funktionsabbruch "Datei gesichert nach $hauptverzeichnis/sicherung/${sicherungsordner}. Programm beendet"
+
funktionsabbruch "Datei gesichert nach $hauptverzeichnis/sicherung/$sicherungsordner. Programm beendet"
 
}
 
}
  
Zeile 423: Zeile 377:
 
{
 
{
 
echo "Speichern des Videoclips" >> $hauptverzeichnis/fenster_fortschritt
 
echo "Speichern des Videoclips" >> $hauptverzeichnis/fenster_fortschritt
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${videoclips}`
+
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename $videoclips`
 
if [ $? != 0 ]
 
if [ $? != 0 ]
 
then
 
then
Zeile 429: Zeile 383:
 
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?"
Zeile 438: Zeile 392:
 
fi
 
fi
  
mv $hauptverzeichnis/tmp1/film.mpg "${clipspeicher}"
+
mv $hauptverzeichnis/tmp1/film.mpg "$clipspeicher"
funktionsabbruch "Videoclip gespeichert: ${clipspeicher}"
+
funktionsabbruch "Videoclip gespeichert: $clipspeicher"
 
}
 
}
  
Zeile 542: Zeile 496:
 
echo "" > $hauptverzeichnis/fenster_fortschritt ;;
 
echo "" > $hauptverzeichnis/fenster_fortschritt ;;
 
esac
 
esac
 +
  
 
</pre>
 
</pre>

Version vom 11. Januar 2009, 15:26 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.2.0
#Erstellungsdatum: 11.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:
#Änderungenen siehe Diskussion zum Hauptartikel

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

# Übernahme von Kommander

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

# Voreinstellungen

hauptverzeichnis=~/dvbscript
ini_verz=~/.dvbscript

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

speed=8
dvdgroesse=4600000000

# Verzeichnisstruktur erstellen

mkdir $hauptverzeichnis 2>/dev/null
mkdir $ini_verz 2>/dev/null

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

# Pfade für Kommmander

echo $hauptverzeichnis > $ini_verz/hauptverzeichnis
echo $hauptverzeichnis/fenster_fortschritt > $ini_verz/fortschrittfenster
echo $hauptverzeichnis/fenster_debug > $ini_verz/debugfenster

# Anzeigefenster leeren

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

# Umleitung für Debug-Fenster

exec 2> $hauptverzeichnis/fenster_debug

# Hilfsprogramme festlegen

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

for var in ${hilfsprogramm[*]}
do
	touch $ini_verz/$var
	hilfsvar=`cat $ini_verz/$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 "$var gefunden" >> $hauptverzeichnis/fenster_fortschritt
				echo $gefundene_pfade > $ini_verz/$var ;;

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

# Hilfsprogramme laden

mplex=`cat $ini_verz/mplex`/mplex
tcrequant=`cat $ini_verz/tcrequant`/tcrequant
dvdauthor=`cat $ini_verz/dvdauthor`/dvdauthor
pjx=`cat $ini_verz/ProjectX.jar`/ProjectX.jar
normalize=`cat $ini_verz/normalize`/normalize
ffmpeg=`cat $ini_verz/ffmpeg`/ffmpeg
growisofs=`cat $ini_verz/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 "Abbruch durch den Benutzer" >> $hauptverzeichnis/fenster_fortschritt
programmende
}

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

programmende ()
{
echo "Ende" >> $hauptverzeichnis/fenster_fortschritt
kdialog --passivepopup "Programmende" 1000
echo "" > $hauptverzeichnis/fenster_fortschritt
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
}

# °°°°Authorn°°°°

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
$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
		benutzerabbruch
	fi
	$growisofs  -dry-run -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
done
echo "Brennen beginnt" >> $hauptverzeichnis/fenster_fortschritt
$growisofs -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad
funktionsabbruch "Brennen fertig. Programm beendet"
}

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

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
			benutzerabbruch
		fi
		$growisofs -dry-run -speed=$speed -Z /dev/dvd -allow-limited-size -R -J $brenn_pfad/"film($((i-1)))[remux].ts"
	done
	echo "Brennvorgang gestartet" >> $hauptverzeichnis/fenster_fortschritt
	$growisofs -speed=$speed -Z /dev/dvd -allow-limited-size -R -J $brenn_pfad/"film($((i-1)))[remux].ts"
done
funktionsabbruch "Brennen fertig. Programm beendet"
}

#°°°°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
		echo "" > $hauptverzeichnis/fenster_fortschritt ;;

	82)	oodraw -o $druckschablonen/datendvd.odg
		echo "" > $hauptverzeichnis/fenster_fortschritt ;;
esac



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


Zurück zur Multimedia-Übersicht