Dvb script gui/scriptcode: Unterschied zwischen den Versionen
Escho (Diskussion | Beiträge) (Aktualisierung) |
Escho (Diskussion | Beiträge) (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. | + | #Version: 0.2.0 |
| − | #Erstellungsdatum: | + | #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: | ||
| − | # | + | #Änderungenen siehe Diskussion zum Hauptartikel |
# ---------------------------------Vorbereitungen------------------------------------- | # ---------------------------------Vorbereitungen------------------------------------- | ||
| Zeile 29: | Zeile 29: | ||
# Voreinstellungen | # Voreinstellungen | ||
| − | aufnahme=~/ | + | hauptverzeichnis=~/dvbscript |
| − | druckschablonen=~/ | + | ini_verz=~/.dvbscript |
| − | videoclips=~/ | + | |
| + | aufnahme=~/DVB/Aufnahme | ||
| + | druckschablonen=~/DVB/Druckschablonen | ||
| + | videoclips=~/DVB/Videoclips | ||
speed=8 | speed=8 | ||
dvdgroesse=4600000000 | dvdgroesse=4600000000 | ||
| − | # | + | # Verzeichnisstruktur erstellen |
| − | mkdir | + | mkdir $hauptverzeichnis 2>/dev/null |
| − | + | mkdir $ini_verz 2>/dev/null | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
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 | + | # Pfade für Kommmander |
| − | echo $hauptverzeichnis/fenster_fortschritt > | + | echo $hauptverzeichnis > $ini_verz/hauptverzeichnis |
| − | echo $hauptverzeichnis/fenster_debug > | + | echo $hauptverzeichnis/fenster_fortschritt > $ini_verz/fortschrittfenster |
| + | echo $hauptverzeichnis/fenster_debug > $ini_verz/debugfenster | ||
| − | # Anzeigefenster leeren | + | # 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 | + | touch $ini_verz/$var |
| − | hilfsvar=`cat | + | 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 > | + | 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 $ | + | 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 | + | mplex=`cat $ini_verz/mplex`/mplex |
| − | tcrequant=`cat | + | tcrequant=`cat $ini_verz/tcrequant`/tcrequant |
| − | dvdauthor=`cat | + | dvdauthor=`cat $ini_verz/dvdauthor`/dvdauthor |
| − | pjx=`cat | + | pjx=`cat $ini_verz/ProjectX.jar`/ProjectX.jar |
| − | normalize=`cat | + | normalize=`cat $ini_verz/normalize`/normalize |
| − | ffmpeg=`cat | + | ffmpeg=`cat $ini_verz/ffmpeg`/ffmpeg |
| − | growisofs=`cat | + | growisofs=`cat $ini_verz/growisofs`/growisofs |
# X.ini erzeugen | # X.ini erzeugen | ||
| Zeile 158: | Zeile 144: | ||
benutzerabbruch () | benutzerabbruch () | ||
{ | { | ||
| − | |||
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 "$1" >> $hauptverzeichnis/fenster_fortschritt | echo "$1" >> $hauptverzeichnis/fenster_fortschritt | ||
programmende | programmende | ||
| Zeile 172: | Zeile 156: | ||
programmende () | programmende () | ||
{ | { | ||
| − | |||
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 "$ | + | 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 $ | + | 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 $ | + | 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 |
} | } | ||
| Zeile 259: | Zeile 242: | ||
{ | { | ||
mv $hauptverzeichnis/tmp1/film.mp2 $hauptverzeichnis/tmp2 | mv $hauptverzeichnis/tmp1/film.mp2 $hauptverzeichnis/tmp2 | ||
| − | rm -- $ | + | 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 |
echo "normalize: Ton normalisieren" >> $hauptverzeichnis/fenster_fortschritt | echo "normalize: Ton normalisieren" >> $hauptverzeichnis/fenster_fortschritt | ||
| − | $ | + | $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 |
| − | rm -- $ | + | rm -- $hauptverzeichnis/tmp2/* |
} | } | ||
ac3_behalten () | ac3_behalten () | ||
{ | { | ||
| − | if [ ! -e $ | + | 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 -- $ | + | rm -- $hauptverzeichnis/tmp1/*.mp2 |
} | } | ||
mp2_behalten () | mp2_behalten () | ||
{ | { | ||
| − | if [ ! -e $ | + | 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 -- $ | + | 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 |
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 #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 | ||
| − | + | $growisofs -dry-run -speed=$speed -dvd-compat -Z /dev/dvd -dvd-video $brenn_pfad | |
| − | + | while [ $? != 0 ] | |
| − | + | do | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
kdialog --warningcontinuecancel "DVD nicht bereit" | kdialog --warningcontinuecancel "DVD nicht bereit" | ||
| − | if [ $? = 0 ] | + | if [ $? != 0 ] |
then | then | ||
| − | |||
| − | |||
benutzerabbruch | benutzerabbruch | ||
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 $ | + | dvdzahl=`find $brenn_pfad -type f | wc -l` |
| − | + | echo "Anzahl der notwendigen DVDs: $dvdzahl" >> $hauptverzeichnis/fenster_fortschritt | |
| − | echo "Anzahl der notwendigen DVDs: $ | ||
| − | for((i=1; i<=$ | + | for((i=1; i<=$dvdzahl; i++)) |
do | 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 | done | ||
funktionsabbruch "Brennen fertig. Programm beendet" | funktionsabbruch "Brennen fertig. Programm beendet" | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
} | } | ||
| 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/$ | + | mkdir $hauptverzeichnis/sicherung/$sicherungsordner |
| − | mv $hauptverzeichnis/dvdstruktur/* $hauptverzeichnis/sicherung/$ | + | mv $hauptverzeichnis/dvdstruktur/* $hauptverzeichnis/sicherung/$sicherungsordner |
| − | funktionsabbruch "Datei gesichert nach $hauptverzeichnis/sicherung/$ | + | 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/$ | + | mkdir $hauptverzeichnis/sicherung/$sicherungsordner |
| − | mv $hauptverzeichnis/tmp1/*.ts $hauptverzeichnis/sicherung/$ | + | mv $hauptverzeichnis/tmp1/*.ts $hauptverzeichnis/sicherung/$sicherungsordner |
| − | funktionsabbruch "Datei gesichert nach $hauptverzeichnis/sicherung/$ | + | 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 $ | + | clipspeicher=`kdialog --title "$quelldatei" --getsavefilename $videoclips` |
if [ $? != 0 ] | if [ $? != 0 ] | ||
then | then | ||
| Zeile 429: | Zeile 383: | ||
fi | fi | ||
| − | if [ -e "$ | + | 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 "$ | + | mv $hauptverzeichnis/tmp1/film.mpg "$clipspeicher" |
| − | funktionsabbruch "Videoclip gespeichert: $ | + | 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 |
| 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 |