Dvb wiki script/Script

Aus Linupedia.org
Wechseln zu: Navigation, Suche
  1. !/bin/bash
  1. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++BESCHREIBUNG ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1. Name: DVB_Wiki_Buch_Script
  2. Version: 0.5.7
  3. Erstellungsdatum: 10.7.2008
  4. Autor: escho (www.linux-club.de)
  5. Benutzung auf eigene Gefahr


  1. Dieses Shell Script automatisiert weitgehend die Vorgänge, die nötig sind, um aus einer DVB-Aufnahme
  2. eine abspielbare Video-DVD zu erzeugen
  1. ++++++++++++++++++++++++++++++++++++++++Evt. vom Benutzer anzupassen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++


  1. -------------Basisverzeichnis---------------

basisverzeichnis=~/filme #ausschließlich im Heimatverzeichnis vorgesehen

  1. ----------------DVD-Grösse------------------

maxgroesse=4600000000 #für DVD5

  1. ------------Brenngeschwindigkeit------------

brenngeschwindigkeit=8 #maximal

  1. ------Pfade, in denen nach den Helferprogrammen gesucht wird-------

suchpfade="/bin $HOME /opt /usr"

  1. +++++++++++++++++++++++++++++++++++++++++++++++++++++Fehlermeldungen abschalten+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

exec 2>/dev/null

  1. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++Installationsroutine+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1. ------------- Programmnamen --------------

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]=mplayer


  1. -----------Anlegen der notwendigen Verzeichnisse------------------

mkdir ${basisverzeichnis}

mkdir ${basisverzeichnis}/dvd_aufnahme mkdir ${basisverzeichnis}/dvd_tmp mkdir ${basisverzeichnis}/dvd_struktur mkdir ${basisverzeichnis}/dvd_sicherung mkdir $basisverzeichnis/default mkdir $basisverzeichnis/screenshot

  1. --------Überprüfung, ob die Programme vorhanden sind und Anlegen der Programmpfade---------

echo "*** Programmerkennung ***" for ((i=0 ; i<9 ; i++)) do pfad[i]=`cat $basisverzeichnis/default/pfad[$i].txt` if [ ! -e ${pfad[i]}/${name[i]} ] then echo "${name[i]}: Datei wird gesucht" gefundene_pfade=`find ${suchpfade} -type f -name ${name[i]} -printf "%h "` pfadanzahl=`echo "$gefundene_pfade" | wc -w`

case "$pfadanzahl" in 0) kdialog --msgbox "Programm kann nicht gefunden werden" exit ;; 1) echo "${name[i]}: Datei gefunden" echo $gefundene_pfade > $basisverzeichnis/default/pfad[$i].txt;; *) kdialog --combobox "Welcher Pfad" $gefundene_pfade > $basisverzeichnis/default/pfad[$i].txt echo "${name[i]}: Datei gefunden" esac fi done echo "*** erledigt" ; echo

  1. ----------------------Variablenzuweisungen zur besseren Lesbarkeit des Scriptes-------------------------
  1. ---Programme---

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=${pfad[7]}/${name[7]} mplayer_pfad=${pfad[8]}/${name[8]}

  1. ---Pfade---

aufnahme_pfad=${basisverzeichnis}/dvd_aufnahme tmp_pfad=${basisverzeichnis}/dvd_tmp dvdstruktur_pfad=${basisverzeichnis}/dvd_struktur sicherungs_pfad=${basisverzeichnis}/dvd_sicherung screenshot_pfad=$basisverzeichnis/screenshot default_pfad=${basisverzeichnis}/default clip_pfad=~/Videoclips

  1. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Konfiguration PJX ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1. -------------X.ini für Filmbearbeitung----------------

echo \ "# Application Application.Agreement=1 Application.Language=de

  1. WindowPosition

WindowPosition.Main.Height=670 WindowPosition.Main.Width=866 WindowPosition.Main.X=500 WindowPosition.Main.Y=0

  1. OptionPanel

OptionPanel.NormalLog=0 OptionPanel.closeOnEnd=1" > ${default_pfad}/X.ini.film

  1. -------------X.ini für Videoclips (Ton decodieren)----------------

echo \ "# Application Application.Agreement=1 Application.Language=de

  1. WindowPosition

WindowPosition.Main.Height=670 WindowPosition.Main.Width=866 WindowPosition.Main.X=500 WindowPosition.Main.Y=0

  1. OptionPanel

OptionPanel.NormalLog=0 OptionPanel.closeOnEnd=1

  1. AudioPanel

AudioPanel.decodeMpgAudio=1" > ${default_pfad}/X.ini.clip

  1. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Funktionen ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1. --------------------Vorbereitungen / Fehlerbehandlung------------------------------------
  1. ............Löschen der Arbeitsordner........................

del_ordner () { echo "*** Löschen der Arbeitsordner ***" rm ${basisverzeichnis}/dvd_tmp/* rm ${dvdstruktur_pfad}/AUDIO_TS/* rm ${dvdstruktur_pfad}/VIDEO_TS/* rmdir ${dvdstruktur_pfad}/AUDIO_TS rmdir ${dvdstruktur_pfad}/VIDEO_TS echo "*** erledigt" ; echo }

  1. ..........Fehler, da mplex nichts multiplexen kann............

fehler () { if [ ! -e ${tmp_pfad}/film.mpg ] then echo "*** Fehler *** Error ***Fehler ***" kdialog --error "Es konnte keine Datei multiplext werden!" exit 1 fi }

  1. ----------------------------Auswahlmenues----------------------------------------
  1. ..................Aufgaben.........................

aktionenauswahl () { was_tun=`kdialog --caption "Videobearbeitung" --geometry 500x300-0+0 --radiolist "Was soll also getan werden?" \ 1 "VIDEO-DVD........Fernsehaufnahme schneiden --> als Video-DVD brennen" on \ 2 "VIDEO-DVD........Fernsehaufnahme schneiden --> DVD-Struktur in Datei sichern" off \ 3 "VIDEO-DVD........DVD-Struktur brennen" off \ 4 "TS-Stream..........Fernsehaufnahme schneiden --> TS als Daten-DVD brennen" off \ 5 "TS-Stream..........Fernsehaufnahme schneiden --> TS sichern" off \ 6 "TS-Stream..........TS-file als Daten-DVD brennen" off \ 7 "Videoclip.............DVB-Clip schneiden, Ton normalisieren, speichern" off \ 8 "Videoclip.............Mpeg1-Clip Ton normalisieren, speichern" off` echo $was_tun }

  1. ...........Welcher Film / Clip...................

filmauswahl () { quelldatei=`kdialog --caption "Filmauswahl" --geometry 500x500-0+0 --getopenfilename ${aufnahme_pfad}`

if [ $? != 0 ] then exit fi }

  1. ............Welches Verzeichnis..................

verzeichnisauswahl () { verzeichnis=`kdialog --caption "Verzeichnisauswahl" --geometry 500x500-0+0 --getexistingdirectory ${sicherungs_pfad}`

if [ $? != 0 ] then exit fi echo $verzeichnis }

  1. ------------------------------Input / Demux / Cut------------------------------------
  1. ......projectx mit gui zum 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 }

  1. ......projectx mit gui zum 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 }

  1. .....projectx mit gui zum schneiden und Ton decodieren.......

pjx_clip () { echo "*** Ton --> wav mit PJX" java -jar ${pjx} -demux -gui -ini ${default_pfad}/X.ini.clip -out ${tmp_pfad} -name film "$quelldatei" 1>/dev/null echo "*** erledigt" ; echo }

  1. ..................ffmpeg für mgeg1-Video (VCD)................

mpeg1_input () { echo "*** mpeg1 demultiplexen ( Video copy, Ton --> wav) ***" ${ffmpeg} -i "${quelldatei}" ${tmp_pfad}/film.mp2.wav -vcodec copy ${tmp_pfad}/film.m1v mv "${tmp_pfad}/film.wav" "${tmp_pfad}/film.mp2.wav" echo "*** erledigt" ; echo }


  1. ----------------------------Film zu lang für 1 DVD-------------------------------------
  1. ..............Requantisieren.....................

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 --msgbox "Requantisierung mit Faktor "${requantisierungsfaktor}" notwendig" ${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 }

  1. ----------------------------encodieren / bearbeiten-------------------------------------
  1. ........Ton auf einheitliche Lautstärke bringen (-12dBfs)..........

normalisieren () { echo "*** Ton normalisieren ***" ${normalize} -v ${tmp_pfad}/film.mp2.wav 2>&1 echo "*** erledigt" ; echo }

  1. .............Ton.wav encodieren zu Ton.mp2..............

encode2mp2 () { echo "*** wav --> mp2 ***" ${ffmpeg} -i ${tmp_pfad}/film.mp2.wav -acodec mp2 -ab 192k ${tmp_pfad}/film.mp2 2>&1 rm ${basisverzeichnis}/dvd_tmp/*.wav rm ${basisverzeichnis}/dvd_tmp/*.ac3 echo "*** erledigt" ; echo }

  1. .....multiplexen

multiplexen () { echo "*** Multiplexen ***" echo "***Bearbeitung läuft" 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}

rm ${basisverzeichnis}/dvd_tmp/*.m1v rm ${basisverzeichnis}/dvd_tmp/*.m2v rm ${basisverzeichnis}/dvd_tmp/*.mp2 rm ${basisverzeichnis}/dvd_tmp/*.ac3 echo "*** erledigt" }

  1. ----------------------------------DVD-Authoring----------------------------------------
  1. .........Authoring ohne DVD-Menue...............

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 }


  1. ---------------------------------DVD brennen--------------------------------------------
  1. ..............Video-DVD...............

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 }

  1. .............Daten-DVD................

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 }

  1. --------------------------Filme / Clips auf Festplatte sichern--------------------------
  1. ............DVD-Struktur................

sichern_struktur () { echo "*** DVD-Struktur sichern ***" sicherungsordner=$(date +%Y%m%d%H%M%S) mkdir ${sicherungs_pfad}/${sicherungsordner} mv ${dvdstruktur_pfad}/* ${sicherungs_pfad}/${sicherungsordner} kdialog --msgbox "Datei gesichert nach "${sicherungs_pfad}/${sicherungsordner} echo "*** erledigt" ; echo }

  1. ..................TS...................

sichern_ts () { echo "*** TS sichern ***" sicherungsordner=$(date +%Y%m%d%H%M%S) mkdir ${sicherungs_pfad}/${sicherungsordner} mv ${tmp_pfad}/*.ts ${sicherungs_pfad}/${sicherungsordner} kdialog --msgbox "Datei gesichert nach "${sicherungs_pfad}/${sicherungsordner} echo "*** erledigt" ; echo }

  1. ................Clip...................

clip_speichern () { clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${clip_pfad}` echo $clipspeicher mv ${tmp_pfad}/film.mpg "${clipspeicher}" }

  1. ---------------------------- Ergebnis bearbeiten ------------------------
  1. ....................DVD-Struktur abspielen (Screenshot)..................

abspielen () { echo "*** DVD-Struktur abspielen ***" echo echo "*************************************************" echo "* Für Screenshots folgende Taste drücken: s *" echo "* Abspielen beenden mit Taste: esc *" echo "*************************************************"

cd ${screenshot_pfad} ${mplayer_pfad} -vf screenshot -geometry 100%:0% dvd://1 -dvd-device ${brenn_pfad} 1>/dev/null

echo "*** erledigt" }

  1. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Hauptprogramm ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

del_ordner was_tun=`aktionenauswahl` case $was_tun in

1) brenn_pfad=${dvdstruktur_pfad} #---------- Fernsehaufnahme schneiden und als Video-DVD brennen ------------------- filmauswahl pjx_demux_gui requantisieren multiplexen fehler authoring_ohne_menue abspielen brennen_video_dvd ;;

2) brenn_pfad=${dvdstruktur_pfad} #---------- Fernsehaufnahme schneiden und DVD-Struktur in Datei sichern ------ filmauswahl pjx_demux_gui requantisieren multiplexen fehler authoring_ohne_menue sichern_struktur ;;

3) brenn_pfad=`verzeichnisauswahl` #------------ DVD-Struktur brennen ----------------------- abspielen brennen_video_dvd ;;

4) brenn_pfad=${tmp_pfad} #----Fernsehaufnahme schneiden, TS als Daten-DVD brennen------ filmauswahl pjx_ts_gui brennen_ts ;;

5) filmauswahl #--------Fernsehaufnahme schneiden, TS und sichern -------------- pjx_ts_gui sichern_ts ;;

6) brenn_pfad=`verzeichnisauswahl` #---------gesichertes TS-file als Daten-DVD brennen --------------- brennen_ts ;;

7) filmauswahl #---------DVB-Clip schneiden, normalisieren, speichern pjx_clip normalisieren encode2mp2 multiplexen fehler clip_speichern;;

8) filmauswahl #-------mpeg1-Clip schneiden, normalisieren, speichern mpeg1_input normalisieren encode2mp2 multiplexen fehler clip_speichern ;; esac

kdialog --msgbox "Bearbeitung beendet"

exit 0 #programmende