Dvb script gui/scriptcode: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(lauffähig)
(Programmende verändert)
Zeile 9: Zeile 9:
  
 
#Name: dvb_script_gui_arbeitsscript
 
#Name: dvb_script_gui_arbeitsscript
#Version: 0.0.2
+
#Version: 0.0.3
#Erstellungsdatum: 13.10.2008
+
#Erstellungsdatum: 15.10.2008
 
#Autor: escho (www.linux-club.de)
 
#Autor: escho (www.linux-club.de)
 
#Benutzung auf eigene Gefahr
 
#Benutzung auf eigene Gefahr
Zeile 76: Zeile 76:
 
fenster1_mehr ""
 
fenster1_mehr ""
 
fenster1_mehr "Ende"
 
fenster1_mehr "Ende"
kdialog --passivepopup "Programmende" 60
+
kdialog --passivepopup "Programmende" 1000
 
fenster1 ""
 
fenster1 ""
 
exit
 
exit
Zeile 447: Zeile 447:
 
authoring_ohne_menue
 
authoring_ohne_menue
 
screenshot
 
screenshot
brennen_video_dvd ;;
+
brennen_video_dvd
 +
programmende ;;
  
 
12) filmauswahl_dvd
 
12) filmauswahl_dvd
Zeile 454: Zeile 455:
 
multiplexen
 
multiplexen
 
authoring_ohne_menue
 
authoring_ohne_menue
sichern_dvd_struktur ;;
+
sichern_dvd_struktur
 +
programmende ;;
  
 
13) verzeichnisauswahl_dvd
 
13) verzeichnisauswahl_dvd
 
screenshot
 
screenshot
brennen_video_dvd ;;
+
brennen_video_dvd
 +
programmende ;;
 
esac
 
esac
  
Zeile 467: Zeile 470:
 
21) filmauswahl_ts
 
21) filmauswahl_ts
 
pjx_ts_gui
 
pjx_ts_gui
brennen_ts ;;
+
brennen_ts
 +
programmende ;;
  
 
22) filmauswahl_ts
 
22) filmauswahl_ts
 
pjx_ts_gui
 
pjx_ts_gui
sichern_ts ;;
+
sichern_ts
 +
programmende ;;
  
 
23) verzeichnisauswahl_ts
 
23) verzeichnisauswahl_ts
brennen_ts ;;
+
brennen_ts
 +
programmende ;;
 
esac
 
esac
  
Zeile 484: Zeile 490:
 
pjx_demux_gui
 
pjx_demux_gui
 
multiplexen
 
multiplexen
sichern_clip ;;
+
sichern_clip
 +
programmende ;;
  
 
32) filmauswahl_clip
 
32) filmauswahl_clip
Zeile 490: Zeile 497:
 
ac3_behalten
 
ac3_behalten
 
multiplexen
 
multiplexen
sichern_clip ;;
+
sichern_clip
 +
programmende ;;
  
 
33) filmauswahl_clip
 
33) filmauswahl_clip
Zeile 496: Zeile 504:
 
mp2_behalten
 
mp2_behalten
 
multiplexen
 
multiplexen
sichern_clip ;;
+
sichern_clip
 +
programmende ;;
  
 
34) filmauswahl
 
34) filmauswahl
 
mpeg1_input
 
mpeg1_input
 
multiplexen
 
multiplexen
sichern_clip ;;
+
sichern_clip
 +
programmende ;;
  
 
37) filmauswahl_clip
 
37) filmauswahl_clip
Zeile 508: Zeile 518:
 
normalisieren
 
normalisieren
 
multiplexen
 
multiplexen
sichern_clip ;;
+
sichern_clip
 +
programmende ;;
  
 
38) filmauswahl
 
38) filmauswahl
Zeile 514: Zeile 525:
 
normalisieren
 
normalisieren
 
multiplexen
 
multiplexen
sichern_clip ;;
+
sichern_clip
 +
programmende ;;
  
 
esac
 
esac
Zeile 522: Zeile 534:
 
case $was_tun in
 
case $was_tun in
  
81) oodraw -o $direktdruck_pfad/videodvd.odg ;;
+
81) oodraw -o $direktdruck_pfad/videodvd.odg
82) oodraw -o $direktdruck_pfad/datendvd.odg ;;
+
programmende ;;
 +
 
 +
82) oodraw -o $direktdruck_pfad/datendvd.odg
 +
programmende ;;
  
 
esac
 
esac
  
programmende
 
 
</pre>
 
</pre>

Version vom 15. Oktober 2008, 18:14 Uhr

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


Höhe=24px
Achtung dieser Artikel ist noch in Arbeit und dient vorläufig nur als Vorlage. Dieser Beitrag zu Linux oder der Abschnitt ist in Bearbeitung. Weitere Informationen findest du hier. Der Ersteller arbeitet an dem Beitrag oder Abschnitt und entsorgt den Wartungsbaustein spätestens 3 Tage nach der letzten Bearbeitung. Änderungen außer Rechtschreibkorrekturen ohne Absprache mit dem Urspungsautor sind möglichst zu vermeiden, solange dieser Baustein noch innerhalb der genannten Frist aktiviert ist.


#!/bin/bash
#was_tun=`echo @Self.item(0)`
was_tun=$1
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++BESCHREIBUNG ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

#Name: dvb_script_gui_arbeitsscript
#Version: 0.0.3
#Erstellungsdatum: 15.10.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. Es ist nur zusammen mit dem Installationsscript und dem GUI-Script lauffähig.

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

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Vorbereitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

installation_erfolgt ()
{
if [ ! -s ~/.dvb_script_gui.ini/pfad_hauptverzeichnis ]
then
	kdialog --error "Bitte zuerst Installation starten"
	exit
fi
}

voreinstellungen ()
{
brenngeschwindigkeit=8 #maximale Brenngeschwindigkeit
maxgroesse=4600000000 #DVD-Größe (für das Requantisieren)
}

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

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

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Kommanderfenster °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

fenster1 ()
{
echo "$1" > ~/.dvb_script_gui.ini/fortschrittfenster
}

fenster1_mehr ()
{
echo "$1" >> ~/.dvb_script_gui.ini/fortschrittfenster
}

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Abbruch °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

benutzerabbruch ()
{
fenster1_mehr ""
fenster1_mehr "Abbruch durch den Benutzer."
programmende
}

funktionsabbruch ()
{
fenster1_mehr ""
fenster1_mehr "$1"
programmende
}

programmende ()
{
fenster1_mehr ""
fenster1_mehr "Ende"
kdialog --passivepopup "Programmende" 1000
fenster1 ""
exit
}


variablen ()
{
hauptverzeichnis=`cat ~/.dvb_script_gui.ini/pfad_hauptverzeichnis`

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

pfad[0]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[0]`
pfad[1]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[1]`
pfad[2]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[2]`
pfad[3]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[3]`
pfad[4]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[4]`
pfad[5]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[5]`
pfad[6]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[6]`
pfad[7]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[7]`

mplex=${pfad[0]}/${name[0]}
tcrequant=${pfad[1]}/${name[1]}
dvdauthor=${pfad[2]}/${name[2]}
pjx=${pfad[3]}/${name[3]}
normalize=${pfad[4]}/${name[4]}
ffmpeg=${pfad[5]}/${name[5]}
growisofs=${pfad[6]}/${name[6]}
vlc=${pfad[7]}/${name[7]}

x_ini=~/.dvb_script_gui.ini/X.ini.film

tmp_pfad1=${hauptverzeichnis}/temp/tmp1
tmp_pfad2=${hauptverzeichnis}/temp/tmp2
dvdstruktur_pfad=${hauptverzeichnis}/temp/struktur

sicherungs_pfad=${hauptverzeichnis}/save
screenshot_pfad=${hauptverzeichnis}/screenshot

aufnahme_pfad=`cat ~/.dvb_script_gui.ini/aufnahmeordner`
direktdruck_pfad=`cat ~/.dvb_script_gui.ini/schablonenordner`
clip_pfad=`cat ~/.dvb_script_gui.ini/clipordner`
}

playlist_aktualisieren ()
{
find $clip_pfad/* > ~/.mplayer/playlist
}

loeschen_tmp ()
{
fenster1_mehr "Löschen tmp, kann etwas dauern ..."
rm -r ${hauptverzeichnis}/temp/tmp1/*
rm -r ${hauptverzeichnis}/temp/tmp2/*
rm -r ${hauptverzeichnis}/temp/struktur/*
}

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

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

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

filmauswahl_clip ()
{
filmauswahl
}

filmauswahl ()
{
fenster1_mehr "Quelldatei auswählen ..."
quelldatei=`kdialog --caption "Filmauswahl" --geometry 600x500-0+0 --getopenfilename "${aufnahme_pfad}"`
if [ $? != 0 ]
then
	benutzerabbruch
fi
}

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

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

verzeichnisauswahl ()
{
fenster1_mehr "Quelldatei auswählem ..."
anzahl_der_sicherungen=`find $sicherungs_pfad/$verzeichnistyp -maxdepth 0 -type d | wc -l`
hilfsverzeichnis=`find $sicherungs_pfad/$verzeichnistyp -maxdepth 0 -type d`
case $anzahl_der_sicherungen in
	0)	funktionsabbruch "Es gibt nichts passendes zum Brennen. Das Script wird nun beendet." ;;
	1)	fenster1_mehr "Folgende Sicherung wird gebrannt: $hilfsverzeichnis"
		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 ()
{
fenster1_mehr "ProjectX: Schneiden und demultiplexen"
java -jar ${pjx} -demux -gui -ini $x_ini -out ${tmp_pfad1} -name film "$quelldatei"
}

#-----Schneiden und Wandeln nach TS-----
pjx_ts_gui ()
{
fenster1_mehr "ProjectX: Schneiden und demultiplexen"
java -jar ${pjx} -tots -gui -split 4300 -ini $x_ini -out ${tmp_pfad1} -name film "$quelldatei"
}

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

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

requantisieren ()
{
videogroesse=`du -bc ${tmp_pfad1}/*.m2v | cut -f1 | tail -n 1` #Berechnung des Requantisierungsfaktors
audio_summe=`du -bc ${tmp_pfad1}/*.ac3 ${tmp_pfad1}/*.mp2 | cut -f1 | tail -n 1`
audio_video_summe=`du -bc ${tmp_pfad1}/*.ac3 ${tmp_pfad1}/*.mp2 ${tmp_pfad1}/*.m2v | cut -f1 | tail -n 1`
requantisierungsfaktor=`echo "scale=8 ; ${videogroesse}/$((maxgroesse-audio_summe))*1.04" | bc`

if [ $audio_video_summe -ge $maxgroesse ] #Wenn der Film zu gross für eine einzige DVD ist, Requantisierung anstossen
then
	fenster1_mehr "tcrequant: Requantisieren mit Faktor ${requantisierungsfaktor}"
	${tcrequant} -d2 -i ${tmp_pfad1}/film.m2v -o ${tmp_pfad1}/film.requant -f ${requantisierungsfaktor}
	mv ${tmp_pfad1}/film.requant ${tmp_pfad1}/film.m2v
fi
}

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

fenster1_mehr "ffmpeg: Ton decodieren"
${ffmpeg} -i ${tmp_pfad2}/film.mp2 ${tmp_pfad2}/film.mp2.wav

fenster1_mehr "normalize: Ton normalisieren"
${normalize} ${tmp_pfad2}/film.mp2.wav 2>~/.DVB_Script/fenster/Konsolenausgabe

fenster1_mehr "ffmpeg: Ton encodieren"
${ffmpeg} -i ${tmp_pfad2}/film.mp2.wav -acodec mp2 -ab 192k ${tmp_pfad1}/film.mp2

rm ${hauptverzeichnis}/initialisierung/temp/tmp2/*
}

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

rm ${hauptverzeichnis}/initialisierung/temp/tmp1/*.mp2
}

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

rm ${hauptverzeichnis}/initialisierung/temp/tmp1/*.ac3
}

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

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

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

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

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

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

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

#°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Screenshots°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

screenshot ()
{
fenster1_mehr "vlc: Screenshot"
${vlc} --no-audio --snapshot-path ${screenshot_pfad} dvd://${brenn_pfad}
}

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

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

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

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

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

loop_brennen_ts ()
{
daten_dvd_bereit
kdialog --msgbox "Bitte DVD Nr.: $i einlegen"
if [ $? = 0 ]
then
	fenster_mehr ""
	fenster_mehr "Brennvorgang gestartet"
	${growisofs} -speed=${brenngeschwindigkeit} -Z /dev/dvd -allow-limited-size -R -J ${brenn_pfad}/"film($((i-1)))[remux].ts"
else
	benutzerabbruch
fi
}

daten_dvd_bereit ()
{
${growisofs} -dry-run -speed=${brenngeschwindigkeit} -Z /dev/dvd -allow-limited-size -R -J ${brenn_pfad}/"film($((i-1)))[remux].ts"
if [ $? = 0 ]
then
	return
else
	kdialog --warningcontinuecancel "DVD nicht bereit"
	if [ $? = 0 ]
	then
		loop_brennen_ts
	else
		benutzerabbruch
	fi
fi
}

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

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

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

sichern_clip ()
{
fenster1_mehr "Speichern des Videoclips"
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${clip_pfad}`
if [ $? != 0 ]
then
	benutzerabbruch
fi
mv ${tmp_pfad1}/film.mpg "${clipspeicher}"
playlist_aktualisieren
funktionsabbruch "Videoclip gespeichert: ${clipspeicher}"
}

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

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

installation_erfolgt

exec 2> ~/.dvb_script_gui.ini/debugfenster

voreinstellungen
variablen
playlist_aktualisieren
loeschen_tmp

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

case $was_tun in

	11)	filmauswahl_dvd
		pjx_demux_gui
		requantisieren
		multiplexen
		authoring_ohne_menue
		screenshot
		brennen_video_dvd
		programmende ;;

	12)	filmauswahl_dvd
		pjx_demux_gui
		requantisieren
		multiplexen
		authoring_ohne_menue
		sichern_dvd_struktur
		programmende ;;

	13)	verzeichnisauswahl_dvd
		screenshot
		brennen_video_dvd
		programmende ;;
esac

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

case $was_tun in

	21)	filmauswahl_ts
		pjx_ts_gui
		brennen_ts
		programmende ;;

	22)	filmauswahl_ts
		pjx_ts_gui
		sichern_ts
		programmende ;;

	23)	verzeichnisauswahl_ts
		brennen_ts
		programmende ;;
esac

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

case $was_tun in

	31)	filmauswahl_clip
		pjx_demux_gui
		multiplexen
		sichern_clip
		programmende ;;

	32)	filmauswahl_clip
		pjx_demux_gui
		ac3_behalten
		multiplexen
		sichern_clip
		programmende ;;

	33)	filmauswahl_clip
		pjx_demux_gui
		mp2_behalten
		multiplexen
		sichern_clip
		programmende ;;

	34)	filmauswahl
		mpeg1_input
		multiplexen
		sichern_clip
		programmende ;;

	37)	filmauswahl_clip
		pjx_demux_gui
		mp2_behalten
		normalisieren
		multiplexen
		sichern_clip
		programmende ;;

	38)	filmauswahl
		mpeg1_input
		normalisieren
		multiplexen
		sichern_clip
		programmende ;;

esac

#----untermenue_direktdruck

case $was_tun in

	81)	oodraw -o $direktdruck_pfad/videodvd.odg
		programmende ;;

	82)	oodraw -o $direktdruck_pfad/datendvd.odg
		programmende ;;

esac