Dvb wiki script/Script: Unterschied zwischen den Versionen
Escho (Diskussion | Beiträge) (Als Code sieht es besser aus) |
Escho (Diskussion | Beiträge) (kdialog: Abbrechen klappt nun) |
||
| Zeile 5: | Zeile 5: | ||
#Name: DVB_Wiki_Buch_Script | #Name: DVB_Wiki_Buch_Script | ||
| − | #Version: 0.5. | + | #Version: 0.5.8 |
| − | #Erstellungsdatum: | + | #Erstellungsdatum: 19.7.2008 |
#Autor: escho (www.linux-club.de) | #Autor: escho (www.linux-club.de) | ||
#Benutzung auf eigene Gefahr | #Benutzung auf eigene Gefahr | ||
| Zeile 171: | Zeile 171: | ||
echo "*** Fehler *** Error ***Fehler ***" | echo "*** Fehler *** Error ***Fehler ***" | ||
kdialog --error "Es konnte keine Datei multiplext werden!" | kdialog --error "Es konnte keine Datei multiplext werden!" | ||
| − | exit | + | exit |
fi | fi | ||
} | } | ||
| Zeile 189: | Zeile 189: | ||
7 "Videoclip.............DVB-Clip schneiden, Ton normalisieren, speichern" off \ | 7 "Videoclip.............DVB-Clip schneiden, Ton normalisieren, speichern" off \ | ||
8 "Videoclip.............Mpeg1-Clip Ton normalisieren, speichern" off` | 8 "Videoclip.............Mpeg1-Clip Ton normalisieren, speichern" off` | ||
| − | echo $was_tun | + | if [ $? = 0 ] |
| + | then | ||
| + | echo $was_tun | ||
| + | else | ||
| + | kdialog --msgbox "Programm vom Benutzer abgebrochen" | ||
| + | exit | ||
| + | fi | ||
} | } | ||
| Zeile 196: | Zeile 202: | ||
{ | { | ||
quelldatei=`kdialog --caption "Filmauswahl" --geometry 500x500-0+0 --getopenfilename ${aufnahme_pfad}` | quelldatei=`kdialog --caption "Filmauswahl" --geometry 500x500-0+0 --getopenfilename ${aufnahme_pfad}` | ||
| − | + | if [ $? = 0 ] | |
| − | if [ $? | ||
then | then | ||
| + | echo $quelldatei | ||
| + | else | ||
| + | kdialog --msgbox "Programm vom Benutzer abgebrochen" | ||
exit | exit | ||
fi | fi | ||
| Zeile 207: | Zeile 215: | ||
{ | { | ||
verzeichnis=`kdialog --caption "Verzeichnisauswahl" --geometry 500x500-0+0 --getexistingdirectory ${sicherungs_pfad}` | verzeichnis=`kdialog --caption "Verzeichnisauswahl" --geometry 500x500-0+0 --getexistingdirectory ${sicherungs_pfad}` | ||
| − | + | if [ $? = 0 ] | |
| − | if [ $? | ||
then | then | ||
| + | echo $verzeichnis | ||
| + | else | ||
| + | kdialog --msgbox "Programm vom Benutzer abgebrochen" | ||
exit | exit | ||
fi | fi | ||
| − | |||
} | } | ||
| Zeile 314: | Zeile 323: | ||
echo "*** erledigt" | echo "*** erledigt" | ||
} | } | ||
| + | |||
| + | |||
#----------------------------------DVD-Authoring---------------------------------------- | #----------------------------------DVD-Authoring---------------------------------------- | ||
| Zeile 410: | Zeile 421: | ||
del_ordner | del_ordner | ||
| − | + | aktionenauswahl | |
case $was_tun in | case $was_tun in | ||
| − | 1) | + | 1) filmauswahl #---------- Fernsehaufnahme schneiden und als Video-DVD brennen ------------------- |
| − | + | brenn_pfad=${dvdstruktur_pfad} | |
pjx_demux_gui | pjx_demux_gui | ||
requantisieren | requantisieren | ||
| Zeile 423: | Zeile 434: | ||
brennen_video_dvd ;; | brennen_video_dvd ;; | ||
| − | 2) | + | 2) filmauswahl #---------- Fernsehaufnahme schneiden und DVD-Struktur in Datei sichern ------ |
| − | + | brenn_pfad=${dvdstruktur_pfad} | |
pjx_demux_gui | pjx_demux_gui | ||
requantisieren | requantisieren | ||
| Zeile 432: | Zeile 443: | ||
sichern_struktur ;; | sichern_struktur ;; | ||
| − | 3) | + | 3) verzeichnisauswahl #------------ DVD-Struktur brennen ----------------------- |
| + | brenn_pfad=${verzeichnis} | ||
abspielen | abspielen | ||
brennen_video_dvd ;; | brennen_video_dvd ;; | ||
| − | 4) | + | 4) filmauswahl #----Fernsehaufnahme schneiden, TS als Daten-DVD brennen------ |
| − | + | brenn_pfad=${tmp_pfad} | |
pjx_ts_gui | pjx_ts_gui | ||
brennen_ts ;; | brennen_ts ;; | ||
| Zeile 445: | Zeile 457: | ||
sichern_ts ;; | sichern_ts ;; | ||
| − | 6) | + | 6) verzeichnisauswahl #---------gesichertes TS-file als Daten-DVD brennen --------------- |
| + | brenn_pfad=${verzeichnis} | ||
brennen_ts ;; | brennen_ts ;; | ||
| Zeile 468: | Zeile 481: | ||
exit 0 #programmende | exit 0 #programmende | ||
| − | </ | + | <pre/> |
Version vom 20. Juli 2008, 08:28 Uhr
#!/bin/bash
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++BESCHREIBUNG ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#Name: DVB_Wiki_Buch_Script
#Version: 0.5.8
#Erstellungsdatum: 19.7.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
#++++++++++++++++++++++++++++++++++++++++Evt. vom Benutzer anzupassen +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#-------------Basisverzeichnis---------------
basisverzeichnis=~/filme #ausschließlich im Heimatverzeichnis vorgesehen
#----------------DVD-Grösse------------------
maxgroesse=4600000000 #für DVD5
#------------Brenngeschwindigkeit------------
brenngeschwindigkeit=8 #maximal
#------Pfade, in denen nach den Helferprogrammen gesucht wird-------
suchpfade="/bin $HOME /opt /usr"
#+++++++++++++++++++++++++++++++++++++++++++++++++++++Fehlermeldungen abschalten+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
exec 2>/dev/null
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++Installationsroutine+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#------------- 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
#-----------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
#--------Ü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
#----------------------Variablenzuweisungen zur besseren Lesbarkeit des Scriptes-------------------------
#---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]}
#---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
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Konfiguration PJX ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#-------------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
#-------------X.ini für Videoclips (Ton decodieren)----------------
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
# AudioPanel
AudioPanel.decodeMpgAudio=1" > ${default_pfad}/X.ini.clip
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Funktionen ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#--------------------Vorbereitungen / Fehlerbehandlung------------------------------------
#............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
}
#..........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
fi
}
#----------------------------Auswahlmenues----------------------------------------
#..................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`
if [ $? = 0 ]
then
echo $was_tun
else
kdialog --msgbox "Programm vom Benutzer abgebrochen"
exit
fi
}
#...........Welcher Film / Clip...................
filmauswahl ()
{
quelldatei=`kdialog --caption "Filmauswahl" --geometry 500x500-0+0 --getopenfilename ${aufnahme_pfad}`
if [ $? = 0 ]
then
echo $quelldatei
else
kdialog --msgbox "Programm vom Benutzer abgebrochen"
exit
fi
}
#............Welches Verzeichnis..................
verzeichnisauswahl ()
{
verzeichnis=`kdialog --caption "Verzeichnisauswahl" --geometry 500x500-0+0 --getexistingdirectory ${sicherungs_pfad}`
if [ $? = 0 ]
then
echo $verzeichnis
else
kdialog --msgbox "Programm vom Benutzer abgebrochen"
exit
fi
}
#------------------------------Input / Demux / Cut------------------------------------
#......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
}
#......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
}
#.....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
}
#..................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
}
#----------------------------Film zu lang für 1 DVD-------------------------------------
#..............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
}
#----------------------------encodieren / bearbeiten-------------------------------------
#........Ton auf einheitliche Lautstärke bringen (-12dBfs)..........
normalisieren ()
{
echo "*** Ton normalisieren ***"
${normalize} -v ${tmp_pfad}/film.mp2.wav 2>&1
echo "*** erledigt" ; echo
}
#.............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
}
#.....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"
}
#----------------------------------DVD-Authoring----------------------------------------
#.........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
}
#---------------------------------DVD brennen--------------------------------------------
#..............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
}
#.............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
}
#--------------------------Filme / Clips auf Festplatte sichern--------------------------
#............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
}
#..................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
}
#................Clip...................
clip_speichern ()
{
clipspeicher=`kdialog --title "$quelldatei" --getsavefilename ${clip_pfad}`
echo $clipspeicher
mv ${tmp_pfad}/film.mpg "${clipspeicher}"
}
#---------------------------- Ergebnis bearbeiten ------------------------
#....................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"
}
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Hauptprogramm ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
del_ordner
aktionenauswahl
case $was_tun in
1) filmauswahl #---------- Fernsehaufnahme schneiden und als Video-DVD brennen -------------------
brenn_pfad=${dvdstruktur_pfad}
pjx_demux_gui
requantisieren
multiplexen
fehler
authoring_ohne_menue
abspielen
brennen_video_dvd ;;
2) filmauswahl #---------- Fernsehaufnahme schneiden und DVD-Struktur in Datei sichern ------
brenn_pfad=${dvdstruktur_pfad}
pjx_demux_gui
requantisieren
multiplexen
fehler
authoring_ohne_menue
sichern_struktur ;;
3) verzeichnisauswahl #------------ DVD-Struktur brennen -----------------------
brenn_pfad=${verzeichnis}
abspielen
brennen_video_dvd ;;
4) filmauswahl #----Fernsehaufnahme schneiden, TS als Daten-DVD brennen------
brenn_pfad=${tmp_pfad}
pjx_ts_gui
brennen_ts ;;
5) filmauswahl #--------Fernsehaufnahme schneiden, TS und sichern --------------
pjx_ts_gui
sichern_ts ;;
6) verzeichnisauswahl #---------gesichertes TS-file als Daten-DVD brennen ---------------
brenn_pfad=${verzeichnis}
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