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