Dvb script gui/scriptcode
Version vom 31. Dezember 2008, 13:17 Uhr von Escho (Diskussion | Beiträge) (Fehler in Funktion normalisieren () beseitigt)
Diese Beschreibung wurde mit folgenden Distributionen getestet: |
OpenSuse 11.0 (32Bit) mit KDE 3.9.x |
Vom DVB zur DVD, die GUI: Anleitungen - Installation - GUI-Kommanderscript - Arbeitsscript - Dokumentation |
#!/bin/bash #was_tun=`echo @Self.item(0)` was_tun=$1 #++++++++++++++++++++++++++++++++++++++++++++++++++++++++BESCHREIBUNG ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #Name: dvb_script_gui_arbeitsscript #Version: 0.0.6 #Erstellungsdatum: 31.12.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. #Neu in dieser Version: #Fehler in Funktion normalisieren () beseitigt #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Funktionen++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# #°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°Vorbereitung°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° installation_erfolgt () { if [ ! -s ~/.dvb_script_gui.ini/pfad_hauptverzeichnis ] then kdialog --error "Bitte zuerst Installation starten" exit fi } string_hauptverzeichnis_testen () { grep -e " " -e "*" -e "~" ~/.dvb_script_gui.ini/pfad_hauptverzeichnis if [ $? = 0 ] then kdialog --error "Hauptverzeichnis enthält unerlaubte Zeichen. Bitte Installation überprüfen!" 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" 1000 fenster1 "" exit } variablen () { hauptverzeichnis=`cat ~/.dvb_script_gui.ini/pfad_hauptverzeichnis` name[0]=mplex name[1]=tcrequant name[2]=dvdauthor name[3]=ProjectX.jar name[4]=normalize name[5]=ffmpeg name[6]=growisofs name[7]=vlc name[8]=mplayer pfad[0]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[0]` pfad[1]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[1]` pfad[2]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[2]` pfad[3]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[3]` pfad[4]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[4]` pfad[5]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[5]` pfad[6]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[6]` pfad[7]=`cat ~/.dvb_script_gui.ini/hilfsprogramme/pfad[7]` mplex=${pfad[0]}/${name[0]} tcrequant=${pfad[1]}/${name[1]} dvdauthor=${pfad[2]}/${name[2]} pjx=${pfad[3]}/${name[3]} normalize=${pfad[4]}/${name[4]} ffmpeg=${pfad[5]}/${name[5]} growisofs=${pfad[6]}/${name[6]} vlc=${pfad[7]}/${name[7]} x_ini=~/.dvb_script_gui.ini/X.ini.film tmp_pfad1=${hauptverzeichnis}/temp/tmp1 tmp_pfad2=${hauptverzeichnis}/temp/tmp2 dvdstruktur_pfad=${hauptverzeichnis}/temp/struktur sicherungs_pfad=${hauptverzeichnis}/save screenshot_pfad=${hauptverzeichnis}/screenshot aufnahme_pfad=`cat ~/.dvb_script_gui.ini/aufnahmeordner` direktdruck_pfad=`cat ~/.dvb_script_gui.ini/schablonenordner` clip_pfad=`cat ~/.dvb_script_gui.ini/clipordner` } playlist_aktualisieren () { find $clip_pfad/* > ~/.mplayer/playlist } loeschen_tmp () { fenster1_mehr "Löschen tmp, kann etwas dauern ..." rm -r -- ${hauptverzeichnis}/temp/tmp1/* 2>/dev/null rm -r -- ${hauptverzeichnis}/temp/tmp2/* 2>/dev/null rm -r -- ${hauptverzeichnis}/temp/struktur/* 2>/dev/null } #°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°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}/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 fenster1_mehr "ffmpeg: Ton encodieren" ${ffmpeg} -i ${tmp_pfad2}/film.mp2.wav -acodec mp2 -ab 192k ${tmp_pfad1}/film.mp2 rm -- ${hauptverzeichnis}/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" rm -- ${hauptverzeichnis}/screenshot/* 2>/dev/null ${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 fenster1_mehr "" fenster1_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 if [ -e "${clipspeicher}" ] then kdialog --yesno "Dieser Clip ist schon gespeichert. Überschreiben?" if [ $? = 0 ] then sichern_clip_ausfuehren fi sichern_clip fi sichern_clip_ausfuehren } sichern_clip_ausfuehren () { mv ${tmp_pfad1}/film.mpg "${clipspeicher}" playlist_aktualisieren funktionsabbruch "Videoclip gespeichert: ${clipspeicher}" } #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Hauptprogramm++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #-----Initialisierung----- installation_erfolgt string_hauptverzeichnis_testen 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 programmende ;; 12) filmauswahl_dvd pjx_demux_gui requantisieren multiplexen authoring_ohne_menue sichern_dvd_struktur programmende ;; 13) verzeichnisauswahl_dvd screenshot brennen_video_dvd programmende ;; esac #-----untermenue_ts----- case $was_tun in 21) filmauswahl_ts pjx_ts_gui brennen_ts programmende ;; 22) filmauswahl_ts pjx_ts_gui sichern_ts programmende ;; 23) verzeichnisauswahl_ts brennen_ts programmende ;; esac #-----untermenue_videoclip----- case $was_tun in 31) filmauswahl_clip pjx_demux_gui multiplexen sichern_clip programmende ;; 32) filmauswahl_clip pjx_demux_gui ac3_behalten multiplexen sichern_clip programmende ;; 33) filmauswahl_clip pjx_demux_gui mp2_behalten multiplexen sichern_clip programmende ;; 34) filmauswahl mpeg1_input multiplexen sichern_clip programmende ;; 37) filmauswahl_clip pjx_demux_gui mp2_behalten normalisieren multiplexen sichern_clip programmende ;; 38) filmauswahl mpeg1_input normalisieren multiplexen sichern_clip programmende ;; esac #----untermenue_direktdruck case $was_tun in 81) oodraw -o $direktdruck_pfad/videodvd.odg ;; 82) oodraw -o $direktdruck_pfad/datendvd.odg ;; esac
Vom DVB zur DVD, die GUI: Anleitungen - Installation - GUI-Kommanderscript - Arbeitsscript - Dokumentation |