Dvb wiki script/Script: Unterschied zwischen den Versionen
Escho (Diskussion | Beiträge) (kdialog: Abbrechen klappt nun) |
Escho (Diskussion | Beiträge) (ü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. | + | #Version: 0.6.0 |
| − | #Erstellungsdatum: | + | #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 | ||
| − | #++++++++++++++++++++++++++++++++++++++++ | + | #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++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[0]=mplex | ||
| Zeile 49: | Zeile 86: | ||
name[6]=growisofs | name[6]=growisofs | ||
name[7]=kdialog | name[7]=kdialog | ||
| − | name[8]= | + | name[8]=kaffeine |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
for ((i=0 ; i<9 ; i++)) | for ((i=0 ; i<9 ; i++)) | ||
do | do | ||
| − | pfad[i]=`cat $basisverzeichnis/ | + | 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 | + | 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 -- | + | 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/ | + | echo $gefundene_pfade > $basisverzeichnis/dvd_default/pfad[$i].txt ;; |
| − | *) kdialog --combobox " | + | *) 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 () | |
| + | { | ||
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[7]}/${name[7]} | |
| − | + | kaffeine=${pfad[8]}/${name[8]} | |
| − | |||
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_pfad=$basisverzeichnis/dvd_screenshot |
| − | default_pfad=${basisverzeichnis}/ | + | default_pfad=${basisverzeichnis}/dvd_default |
clip_pfad=~/Videoclips | clip_pfad=~/Videoclips | ||
| + | } | ||
| − | + | #-----Vorbereiten der X.ini's für ProjectX---- | |
| − | |||
| − | #----- | ||
| + | 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 | ||
| − | #------ | + | #---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 | then | ||
| − | + | kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3 | |
| − | kdialog -- | ||
exit | exit | ||
fi | fi | ||
} | } | ||
| − | + | untermenue_ts () | |
| − | |||
| − | |||
| − | |||
{ | { | ||
| − | was_tun=`kdialog --caption " | + | 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 ] | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | if [ $? = 0 ] | ||
then | then | ||
| − | + | kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3 | |
| − | |||
| − | kdialog -- | ||
exit | exit | ||
fi | fi | ||
} | } | ||
| − | + | untermenue_videoclip () | |
| − | |||
{ | { | ||
| − | + | 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 | ||
| − | + | kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3 | |
| − | |||
| − | kdialog -- | ||
exit | exit | ||
fi | 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 ] | + | if [ $? != 0 ] |
then | then | ||
| − | + | kdialog --passivepopup "Abbruch durch den Benutzer. Das Script wird nun beendet." 3 | |
| − | |||
| − | kdialog -- | ||
exit | exit | ||
fi | 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 () | pjx_demux_gui () | ||
{ | { | ||
| Zeile 234: | Zeile 308: | ||
} | } | ||
| − | # | + | #-----Schneiden und Wandeln nach TS----- |
pjx_ts_gui () | pjx_ts_gui () | ||
{ | { | ||
| Zeile 242: | Zeile 316: | ||
} | } | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
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 | + | ${ffmpeg} -i "${quelldatei}" ${tmp_pfad}/film.mp2 -vcodec copy ${tmp_pfad}/film.m1v |
| − | |||
echo "*** erledigt" ; echo | echo "*** erledigt" ; echo | ||
} | } | ||
| + | #°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Bearbeitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° | ||
| − | |||
| − | |||
| − | |||
requantisieren () | requantisieren () | ||
{ | { | ||
| Zeile 273: | Zeile 335: | ||
then | then | ||
echo "*** Requantisieren ***" | echo "*** Requantisieren ***" | ||
| − | kdialog -- | + | 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: | ||
} | } | ||
| − | + | #........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 ${ | + | ${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 | ||
} | } | ||
| − | + | 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 | rm ${basisverzeichnis}/dvd_tmp/*.ac3 | ||
| − | |||
} | } | ||
| − | # | + | #°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°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 | ||
| − | + | echo "*** erledigt" ; echo | |
| − | |||
| − | |||
| − | |||
| − | echo "*** erledigt" | ||
} | } | ||
| + | #°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Author'n°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° | ||
| − | |||
| − | |||
| − | |||
| − | |||
authoring_ohne_menue () | authoring_ohne_menue () | ||
{ | { | ||
| Zeile 337: | Zeile 422: | ||
} | } | ||
| + | #°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°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 () | brennen_video_dvd () | ||
{ | { | ||
| Zeile 350: | Zeile 448: | ||
} | } | ||
| − | |||
brennen_ts () | brennen_ts () | ||
{ | { | ||
| Zeile 368: | Zeile 465: | ||
} | } | ||
| − | # | + | #°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Sichern°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° |
| − | + | sichern_dvd_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: | ||
} | } | ||
| − | |||
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: | ||
} | } | ||
| − | + | sichern_clip () | |
| − | |||
{ | { | ||
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${clip_pfad}` | clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${clip_pfad}` | ||
| − | |||
mv ${tmp_pfad}/film.mpg "${clipspeicher}" | 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 | case $was_tun in | ||
| − | + | 11) filmauswahl_dvd #Fernsehaufnahme schneiden und als Video-DVD brennen | |
| − | |||
pjx_demux_gui | pjx_demux_gui | ||
requantisieren | requantisieren | ||
multiplexen | multiplexen | ||
| − | |||
authoring_ohne_menue | authoring_ohne_menue | ||
abspielen | abspielen | ||
brennen_video_dvd ;; | brennen_video_dvd ;; | ||
| − | + | 12) filmauswahl_dvd #Fernsehaufnahme schneiden und DVD-Struktur in Datei sichern | |
| − | |||
pjx_demux_gui | pjx_demux_gui | ||
requantisieren | requantisieren | ||
multiplexen | multiplexen | ||
| − | |||
authoring_ohne_menue | authoring_ohne_menue | ||
| − | + | abspielen | |
| + | sichern_dvd_struktur ;; | ||
| − | + | 13) verzeichnisauswahl_dvd #DVD-Struktur brennen | |
| − | |||
abspielen | abspielen | ||
brennen_video_dvd ;; | brennen_video_dvd ;; | ||
| + | esac | ||
| − | + | #-----untermenue_ts----- | |
| − | + | ||
| + | case $was_tun in | ||
| + | |||
| + | 21) filmauswahl_ts #Fernsehaufnahme schneiden, TS als Daten-DVD brennen | ||
pjx_ts_gui | pjx_ts_gui | ||
brennen_ts ;; | brennen_ts ;; | ||
| − | + | 22) filmauswahl_ts #Fernsehaufnahme schneiden, TS und sichern | |
pjx_ts_gui | pjx_ts_gui | ||
sichern_ts ;; | sichern_ts ;; | ||
| − | + | 23) verzeichnisauswahl_ts #gesichertes TS-file als Daten-DVD brennen | |
| − | |||
brennen_ts ;; | 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 | normalisieren | ||
| − | |||
multiplexen | 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 | mpeg1_input | ||
normalisieren | normalisieren | ||
| − | |||
multiplexen | multiplexen | ||
| − | + | sichern_clip ;; | |
| − | |||
esac | esac | ||
| − | + | exit | |
| + | |||
| + | |||
| + | </pre> | ||
| − | + | {{Dvbscript navigationsbox}} | |
| − | + | [[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 |