Dvb script gui/scriptcode: Unterschied zwischen den Versionen
Escho (Diskussion | Beiträge) (Die Seite wurde neu angelegt: {{dvb_script_gui_navibox}}) |
Escho (Diskussion | Beiträge) (Neuanlage) |
||
| Zeile 1: | Zeile 1: | ||
{{dvb_script_gui_navibox}} | {{dvb_script_gui_navibox}} | ||
| + | {{UnderConstruction}} | ||
| + | |||
| + | <pre> | ||
| + | |||
| + | #!/bin/bash | ||
| + | #was_tun=`echo @Self.item(0)` | ||
| + | was_tun=$1 | ||
| + | #++++++++++++++++++++++++++++++++++++++++++++++++++++++++BESCHREIBUNG ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
| + | |||
| + | #Name: dvb_script_gui_arbeitsscript | ||
| + | #Version: 0.0.1 | ||
| + | #Erstellungsdatum: 12.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` | ||
| + | |||
| + | 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 | ||
| + | |||
| + | </pre> | ||
Version vom 12. Oktober 2008, 16:14 Uhr
| Vom DVB zur DVD, die GUI: Anleitungen - Installation - GUI-Kommanderscript - Arbeitsscript - Dokumentation |
| 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.1
#Erstellungsdatum: 12.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`
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
