Diskussion:Dvb wiki script/Script

Aus Linupedia.org
Version vom 10. Juni 2008, 00:17 Uhr von Robi (Diskussion | Beiträge) (Damit man sieht wer hier meckert ;-))
Wechseln zu: Navigation, Suche

Kritik und Verbesserungsvorschläge für das Script

Vorgeschichte

Hatte Probleme eine teilweise defekte und schlecht lesbare (privat) DVD zu kopieren. Das Ergebnis war zwar eine mit xine sauber abspielbare Mpeg-Datei mit optimaler Qualität, allerdings ließ sich diese Datei nicht mit dvdauthor bearbeiten, bekannter Fehler:

 ERR:  SCR moves backwards, remultiplex input.

viele Versuche mit diversen Tools und Howtos aus dem Internet brachten nicht den gewünschten Erfolg, entweder liefen auf der fertigen DVD Video und Ton völlig unsyncron oder sie ließen sich gar nicht muxen. getestet ua. Programme wie transcode, mencoder, ffmpeg mit den verschiedensten erfolgversprechenen Optionen und Varianten, ohne komplettes umcodieren und damit entsprechenden Qualitätsverlust, bestand keine Chance. Also hab ich mal dieses Script hier ausprobiert, und damit gleich mal ausführlich Howto und Script getestet.


Kritik am Script

  • Bei Installation von ProjectX als fertiges Paket für 10.3 war das Script nicht arbeitsfähig. Als Problem stellte sich die X.ini-Datei heraus, die im Verzeichnis /usr/share/java geschrieben werden sollte. Dort ist natürlich schreiben für User verboten, ohne diese Datei jedoch keine Gui. Also habe ich die gesamte X.ini Verwaltung verändert.
  • Wenig schön finde ich das komplette abschalten der kompletten Fehlerausgabe, damit sind Fehler und damit Programabbruch nur äußerst schwer einzukreisen und zu beheben.
  • die "Programmerkennung" über find vom Rootverzeichnis aus ist etwas zu primitiv gelöst und wenn wie bei mir find vor /usr noch ein TByte großes Raid durchnuddelt, dann wirds zeitkritisch. Hier währe wohl eine Lösung mit which oder mit weitaus kürzeren möglichen Verzeichnisspfaden zum durchsuchen, angesagt.
  • das "Anlegen der notwendigen Verzeichnisse" oder Wenn und Aber ist auch nicht besonders schön, könnte man eventuell über if test .... then ; mkdir besser machen.
  • Die gesammte x.ini-Geschichte habe ich für mich umbauen müssen, damit benutzerdefinierte Einstellungen auch dauerhaft erhalten bleiben.
  • "multiplexen mpeg2-Video, AC3- oder/und mp2-Audio" berücksichtigt überhautp nicht, dass da nur eine AC3 ist und keine mp2 . Genau das brauchte ich aber. Das Script an dieser Stelle vollkommen unschön wenn man dort flexibel sein will. Ich musste dort dann auch gleich mal größere Anpassungen machen.
  • irgendwo fehlt mir noch eine Überprüfung auf voraussichtlich genügend Speicherplatz. Da die Fehlerausgabe abgeschaltet ist, muss man bei vollgelaufenen Filesystem erst mal erkennen, was da los ist, und dann geht sowieso nicht mehr viel, da KDE sofort rumzickt und sich beendet, wenn hier als nächstes ein etwas dickeres Programm gestart wird.
  • Das Menufenster war bei mir zu klein, die Zeilen haben nicht alle hineingepasst, dafür war in der Installationsanweisung bei Optimierung für das Ausgabefenster gleich mal 1000x1000 (Vollbild) vorgeschlagen, für die paar Ausgaben die da kommen, absolut überzogen, zumal man damit ja die Installationshinweise verdeckt die man da aber bestimmt noch weiterlesen möchte.


jetzt aber genug gemeckert

  • das wichtigste zuerst, das Script hat das für unmöglich gehaltene einwandfrei geschafft. Eine DVD aus meiner MPEG-Datei mit fehlender oder total fehlerhafter Zeitsyncronisation zu basteln, und das ohne umcodieren. Hat problemlos das gemacht was ffmpeg mit -vsync nicht geschafft hat, und die Videospur zeitlich sauber angepasst. Zwar muss ich es selbst noch mal per Hand multiplexen und authoren, da ich noch Kanäle und Untertitel sowie Menüs hineinbauen möchte, aber immerhin. Hut ab.
  • mit dem richtigen Server (und einigen Tricks (Links)) beim Aufteilen der temporären Dateien auf verschiedene Raids) geht das auch noch recht zügig. (Hatte gleich mal 2 Dualcore Prozessoren, 12GB Speicher und 2 mal Hardwareraid 5 auf das Script angesetzt)
  • Das Ganze macht einen recht guten Eindruck von der Gesamterscheinung, und ist gut und einfach zu bedienen, (mal von ProjectX abgesehen). Das Wikibuch dazu ist jetzt schon Spitze. Mit noch ein paar kleinen Verbesserungen zB der oben angesprochenen Mängel und Unschönheiten am Script, könnte daraus durchaus mal ein sehr universell einsetzbares Paket werden.
  • Gute Arbeit, schöne Wiki-Artikel, weiter so.


meine Änderungen

Ich lege mal hier meine Änderungen als Patch mit ab, alles was ich gebraucht oder gemacht habe. Sie sind nicht 100% ausgetestet. Aber eventuell helfen sie mal bei der nächsten Verbesserung des Scriptes.

--- dvbscript.sh.old    2008-06-09 23:54:58.000000000 +0200
+++ dvbscript.sh        2008-06-09 23:54:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash

 #++++++++++++++++++++++++++++++++++++++++++++++++++++++++BESCHREIBUNG ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@@ -17,7 +17,8 @@

 #-------------Basisverzeichnis---------------

-basisverzeichnis=~/filme #ausschließlich im Heimatverzeichnis vorgesehen
+#basisverzeichnis=~/filme #ausschließlich im Heimatverzeichnis vorgesehen
+basisverzeichnis=/mnt/video/neu/filme # kein Heimatverzeichnis auf ausreichende Rechte achten

 #----------------DVD-Grösse------------------

@@ -51,7 +52,7 @@
 mkdir ${basisverzeichnis}

 mkdir ${basisverzeichnis}/dvd_aufnahme
-mkdir ${basisverzeichnis}/ dvd_tmp
+mkdir ${basisverzeichnis}/dvd_tmp
 mkdir ${basisverzeichnis}/dvd_struktur
 mkdir ${basisverzeichnis}/dvd_sicherung
 mkdir ${basisverzeichnis}/dvd_log
@@ -93,9 +94,9 @@
 growisofs=${pfad[6]}/${name[6]}
 kdialog_pfad=${pfad[7]}/${name[7]}
 mplayer_pfad=${pfad[8]}/${name[8]}
-
+default_pfad=${basisverzeichnis}/default
 inst_pfad_pjx=${pfad[3]}
-
+init_pfad_pjx=${basisverzeichnis}
 aufnahme_pfad=${basisverzeichnis}/dvd_aufnahme
 tmp_pfad=${basisverzeichnis}/dvd_tmp
 dvdstruktur_pfad=${basisverzeichnis}/dvd_struktur
@@ -114,12 +115,12 @@
 # WindowPosition
 WindowPosition.Main.Height=670
 WindowPosition.Main.Width=866
-WindowPosition.Main.X=500
+WindowPosition.Main.X=0
 WindowPosition.Main.Y=0

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

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

@@ -131,7 +132,7 @@
 # WindowPosition
 WindowPosition.Main.Height=670
 WindowPosition.Main.Width=866
-WindowPosition.Main.X=500
+WindowPosition.Main.X=0
 WindowPosition.Main.Y=0

 # OptionPanel
@@ -139,7 +140,7 @@
 OptionPanel.closeOnEnd=1

 # AudioPanel
-AudioPanel.decodeMpgAudio=1" > ${inst_pfad_pjx}/X.ini.clip
+AudioPanel.decodeMpgAudio=1" > ${default_pfad}/X.ini.clip

 #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Funktionen ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@@ -215,8 +216,8 @@
 pjx_demux_gui ()
 {
 echo "*** DVB mit PJX ***"
-cp ${inst_pfad_pjx}/X.ini.film ${inst_pfad_pjx}/X.ini
-java -jar ${pjx} -demux -gui  -ini ${inst_pfad_pjx}/X.ini -out ${tmp_pfad} -name film "$quelldatei" 1>/dev/null
+if [ ! -f X.ini ] ; then cp ${default_pfad}/X.ini.film ${init_pfad_pjx}/X.ini ; fi
+java -jar ${pjx} -demux -gui  -ini ${init_pfad_pjx}/X.ini -out ${tmp_pfad} -name film $quelldatei 1>/dev/null
 echo "*** erledigt" ; echo
 }

@@ -224,8 +225,8 @@
 pjx_ts_gui ()
 {
 echo "*** TS mit PJX ***"
-cp ${inst_pfad_pjx}/X.ini.film ${pfad[3]}/X.ini
-java -jar ${pjx} -tots -gui -split 4300 -ini ${inst_pfad_pjx}/X.ini -out ${tmp_pfad} -name film "$quelldatei" 1>/dev/null
+if [ ! -f X.ini ] ; then cp ${default_pfad}/X.ini.film ${init_pfad_pjx}/X.ini ; fi
+java -jar ${pjx} -tots -gui -split 4300 -ini ${init_pfad_pjx}/X.ini -out ${tmp_pfad} -name film "$quelldatei" 1>/dev/null
 echo "*** erledigt" ; echo
 }

@@ -233,8 +234,8 @@
 pjx_clip ()
 {
 echo "*** Ton --> wav mit PJX"
-cp ${inst_pfad_pjx}/X.ini.clip ${inst_pfad_pjx}/X.ini
-java -jar ${pjx} -demux -gui  -ini ${inst_pfad_pjx}/X.ini -out ${tmp_pfad} -name film "$quelldatei" 1>/dev/null
+if [ ! -f X.ini.c ] ; then cp ${default_pfad}/X.ini.clip ${init_pfad_pjx}/X.ini.c ; fi
+java -jar ${pjx} -demux -gui  -ini ${init_pfad_pjx}/X.ini.c -out ${tmp_pfad} -name film "$quelldatei" 1>/dev/null
 echo "*** erledigt" ; echo
 }

@@ -291,19 +292,28 @@
 {
 echo "*** Multiplexen ***"
 echo "***Bearbeitung läuft"
-if [ -e ${tmp_pfad}/film.mp2 -a -e ${tmp_pfad}/film.ac3 ] #Erkennung der Tonformate
-then
-       tondat="ac3 und mp2"
-else   tondat="mp2"
-fi
-
-case $tondat in #multiplexen in Abhängigkeit der vorhandenen Tonformate
-       "ac3 und mp2")  ${mplex} -v1 -f8 -o ${tmp_pfad}/film.mpg ${tmp_pfad}/film.m2v ${tmp_pfad}/*.mp2 ${tmp_pfad}/*.ac3;;
-       "mp2")          ${mplex} -v0 -f8 -o ${tmp_pfad}/film.mpg ${tmp_pfad}/film.m2v ${tmp_pfad}/*.mp2;;
-esac
+VIDEOFILE=
+AC3_AUDIO=
+MP2_AUDIO=
+VIDEOFILE=`file ${tmp_pfad}/film.* | grep "video" | cut -d: -f1`
+AC3_AUDIO=`file ${tmp_pfad}/film.* | grep "AC-3" | cut -d: -f1`
+MP2_AUDIO=`file ${tmp_pfad}/film.* | grep "MPEG-1 Layer" | cut -d: -f1`
+
+#if [ -e ${tmp_pfad}/film.mp2 -a -e ${tmp_pfad}/film.ac3 ] #Erkennung der Tonformate
+#then
+#      tondat="ac3 und mp2"
+#else  tondat="mp2"
+#fi
+
+#case $tondat in #multiplexen in Abhängigkeit der vorhandenen Tonformate
+#      "ac3 und mp2")  ${mplex} -v1 -f8 -o ${tmp_pfad}/film.mpg ${tmp_pfad}/film.m2v ${tmp_pfad}/*.mp2 ${tmp_pfad}/*.ac3;;
+#      "mp2")          ${mplex} -v0 -f8 -o ${tmp_pfad}/film.mpg ${tmp_pfad}/film.m2v ${tmp_pfad}/*.mp2;;
+#esac
+${mplex} -v1 -f8 -o ${tmp_pfad}/film.mpg ${VIDEOFILE} ${MP2_AUDIO} ${AC3_AUDIO}
 echo "*** erledigt" ; echo
 }

+
 #.........multiplexen mpeg1-Video, mp2-Audio.................
 mplex_mpeg1 ()
 {
@@ -466,3 +476,4 @@
 kdialog --msgbox "Bearbeitung beendet"

 exit 0 #programmende
+

Robi 02:17, 10. Jun. 2008 (CEST)