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 |