Diskussion:Dvb wiki script/Script

Aus Linupedia.org
Version vom 11. Juni 2008, 01:38 Uhr von Robi (Diskussion | Beiträge) (Patch noch mal neu eingestellt)
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-11 03:22:32.000000000 +0200
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash

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

@@ -18,6 +18,7 @@
 #-------------Basisverzeichnis---------------

 basisverzeichnis=~/filme #ausschließlich im Heimatverzeichnis vorgesehen
+#basisverzeichnis=/home/VM/test/filme # Achtung ! 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 ${init_pfad_pjx}/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 ${init_pfad_pjx}/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 ${init_pfad_pjx}/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,18 @@
 {
 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
+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`

-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 +466,4 @@
 kdialog --msgbox "Bearbeitung beendet"

 exit 0 #programmende
+

(edit 03:38, 11. Jun. 2008 (CEST) nach nochmaligem Test auf jungfräulichem Rechner, patch noch mal neu eingestellt, hatte selber ein paar Verwurschtelungen eingebaut ;-)))

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


Erste Reaktionen

zur Kritik

  • PJX und X.ini: Fehler erkannt heißt, ihn schon fast beseitigt zu haben
  • Fehlerabschaltung: Ist absichtlich so gemacht, da ich bei der Anwendung nur die Fortschrittsmeldungen sehen will. Für Installation und Fehlersuche habe ich diese Zeile schön auskommentiert.
  • find: wird nur dann zeitkritisch, wenn (beim ersten Scriptstart) notwendige Programme noch fehlen. ab dem zweiten Start ist es kein Problem mehr. Ich werde aber which mal austesten.
  • X.ini Inhalte erhalten: Aber doch wohl nur bei der Standarrdversion von PJX. Bei der CVS Version klappt es, wenigstens bei mir.
  • AC3: Stimmt. Dazu muß ich aber sagen, ich habe nur immer das eingebaut, was sich mir irgendwie in den Weg gestellt hat. Ein alleiniges AC3 war da noch nicht dabei.
  • Speicherplatz: An so etwas habe noch nicht einmal gedacht.
  • Fenstergrössen: Das Konsolefenster habe ich mit Absicht zum Vollbild erklärt. Mir gefällt es einfach so. Die Menuefenster habe ich etwas knapp gehalten. Das werde ich wohl noch ändern. Schade, daß kdialog hier keine automatishe Grössenanpassung vorsieht.

zum genug gemeckert

Danke für die Blumen.
Und das mit den DVD-Menues habe schon im Hinterkopf, so als todo!

zum Patch

Das muß ich mir noch genau ansehen und ausprobieren. Da scheinen aber einige interesante Sachen drin zu sein

Zusammenfassung

Ich werde an der Behebung von Fehlern und an Ergänzungen arbeiten. Laßt mir aber etwas Zeit damit. Denn wenn robi hier sagt, which ist schneller, dann bedeutet das für mich, zunächst eine Konsole zu öffnen und "man which" einzutippen. Aber ich bin ja lernfähig (auch wenn ich in diesem jahr noch das halbe Jahrhundert vollmachen werde). Und ich möchte auch verstehen, was ich da tue.

--Escho 21:06, 10. Jun. 2008 (CEST)