Dvb script gui/scriptcode: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
(Neuanlage)
(lauffähig)
Zeile 3: Zeile 3:
  
 
<pre>
 
<pre>
 
 
#!/bin/bash
 
#!/bin/bash
 
#was_tun=`echo @Self.item(0)`
 
#was_tun=`echo @Self.item(0)`
Zeile 10: Zeile 9:
  
 
#Name: dvb_script_gui_arbeitsscript
 
#Name: dvb_script_gui_arbeitsscript
#Version: 0.0.1
+
#Version: 0.0.2
#Erstellungsdatum: 12.10.2008
+
#Erstellungsdatum: 13.10.2008
 
#Autor: escho (www.linux-club.de)
 
#Autor: escho (www.linux-club.de)
 
#Benutzung auf eigene Gefahr
 
#Benutzung auf eigene Gefahr
Zeile 86: Zeile 85:
 
{
 
{
 
hauptverzeichnis=`cat ~/.dvb_script_gui.ini/pfad_hauptverzeichnis`
 
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]}
 
mplex=${pfad[0]}/${name[0]}
Zeile 510: Zeile 528:
  
 
programmende
 
programmende
 
 
</pre>
 
</pre>

Version vom 13. Oktober 2008, 21:17 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.2
#Erstellungsdatum: 13.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" 60
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 ;;

	12)	filmauswahl_dvd
		pjx_demux_gui
		requantisieren
		multiplexen
		authoring_ohne_menue
		sichern_dvd_struktur ;;

	13)	verzeichnisauswahl_dvd
		screenshot
		brennen_video_dvd ;;
esac

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

case $was_tun in

	21)	filmauswahl_ts
		pjx_ts_gui
		brennen_ts ;;

	22)	filmauswahl_ts
		pjx_ts_gui
		sichern_ts ;;

	23)	verzeichnisauswahl_ts
		brennen_ts ;;
esac

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

case $was_tun in

	31)	filmauswahl_clip
		pjx_demux_gui
		multiplexen
		sichern_clip ;;

	32)	filmauswahl_clip
		pjx_demux_gui
		ac3_behalten
		multiplexen
		sichern_clip ;;

	33)	filmauswahl_clip
		pjx_demux_gui
		mp2_behalten
		multiplexen
		sichern_clip ;;

	34)	filmauswahl
		mpeg1_input
		multiplexen
		sichern_clip ;;

	37)	filmauswahl_clip
		pjx_demux_gui
		mp2_behalten
		normalisieren
		multiplexen
		sichern_clip ;;

	38)	filmauswahl
		mpeg1_input
		normalisieren
		multiplexen
		sichern_clip ;;

esac

#----untermenue_direktdruck

case $was_tun in

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

esac

programmende