Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Scriptexperten gesucht!!!
#1
Hallo zusammen,

Hab mir dieses Script gebastelt:

Zitat:#!/bin/bash
svdrpsend.pl MESG Gestartet!;
projectx -ini ./X.ini ${1}/*.vdr -out /media/convert;
svdrpsend.pl MESG Demuxed!;
svdrpsend.pl MESG Video wird erstellt...;
tcmplex -m d -i /media/convert/001.mpv -p /media/convert/001.mpa -s /media/convert/001.ac3 -o /media/convert/video.mpg;
cd /media/convert;
rm *.mpa;
rm *.mpv;
rm *.ac3;
rm *.txt;
svdrpsend.pl MESG Video fertig!!!;
exit 0



ich starte das Script und geb ihm den Pfad zur Aufnahme mit.

Also z.B. so:
Zitat:demux.pl /video0/%Der_Teufel_trägt_Prada/2009-03-01.20.14.99.99.rec

Danach hab ich dann ein Video mit 2 Tonspuren, das auf der PS3 und AUCH auf einem stinknormalen DVD-Player (Getestet mit irgendeinem Cyberhome) abspielbar ist.

Was ich noch gerne hätte:
1. den Befehl aus der reccmds.conf ausführen
---Das funktioniert zwar, nur hab ich das Menü offen, bis alles fertig ist,
---printf und at now funktioniert leider nicht, bringt:
Zitat:syntax error. Last token seen: /
Garbled time
2. das outputfile automatisch richtig benennen
---Auf Basis des Pfades, den ich ihm als Parameter mit auf den Weg gebe.

Diese 2 Sachen wärens noch, dann bin ich glücklich!!! :-)

Kann da jemand behilflich sein???
Ich wäre auch für Anhaltspunkte sehr dankbar...

Grüße
McDreamy
Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren
#2
Also als generelle Regel:

- bash Befehle haben kein Semikolon am Ende
- Strings sollten mit Anführungsstrichen umschlossen werden: "DEIN TEXT" oder 'DEIN TEXT'
- Befehle die nicht direkt zur shell gehören sollten mit Pfad Angabe gestartet werden, da innerhalb von shell scripten PATH anders definiert ist

Also würde ich etwas umbauen und erst dann Fehler suchen:
Code:
#!/bin/bash

SVDRP=$(which svdrpsend.pl)
PX=$(which projectx)
MPLEX=$(which tcmplex)
CONV_PATH="/media/convert"

$SVDRP MESG "Gestartet!"
$PX -ini "./X.ini" "${1}/*.vdr" -out "/media/convert"
$SVDRP MESG "Demuxed!"
$SVDRP MESG "Video wird erstellt..."
$MPLEX -m d -i "$CONV_PATH/001.mpv" -p "$CONV_PATH/001.mpa" -s "$CONV_PATH/001.ac3" -o "$CONV_PATH/video.mpg"
cd $CONV_PATH
rm -f "*.{mp{a,v},ac3,txt}"
$(SVDRP) "MESG Video fertig!!!"
Zitieren
#3
Hallo und danke erstmal für die Antwort!

Ich hab das Script jetzt so geändert, wie du vorgeschlagen hast!
Sieht auch gut aus, also es läuft durch wie es soll!

Nur wie kann ich das starten, ohne dass das Menü die ganze Zeit offen ist?
Und wie kann ich den Ausgabenamen für das fertige .mpg vom Parameter ableiten?
:-) Bin eben eine Linux-Null...

Grüße
McDreamy
Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren
#4
So ein script sollte generell auch per atd oder crond gestartet werden können, ich denke mit ein wenig Fehlersuche wirds klappen.

Was aber nicht gehen wird ist ein "./X.ini"

Der Punkt steht für dein aktuelles Verzeichnis, das aber wird im script anders sein. Hier muss der volle Pfad rein, ansonsten wird X.ini nicht gefunden.

Auch noch ändern..
Code:
$PX -ini "./X.ini" "${1}/*.vdr" -out "/media/convert"

in

Code:
$PX -ini "/VOLLER/PFAD/ZU/X.ini" "${1}/*.vdr" -out "$CONV_PATH"
Zitieren
#5
Moin,

an sowas baue ich auch gerade, finde diese Lösung sehr schön.
Möchte noch Erweiterung einbauen, dass projectx auch das Schneiden beim demuxen mit übernimmt, damit ich nicht immer erst Schneiden und dann mpg'en muss.

Was haltet Ihr hiervon?
(Eigene px, da ich immer gerne neueste Version nehme)
(eigener Pfad fuer tmp-dir (dann kann man evt. rm * einbauen)
(dann Behandlung, ob schon geschnitten oder nicht über % im Namen, finde nur grep unelegant, geht es auch bash intern?)
(ACHTUNG: Was passiert bei mehreren mpa-Tonspuren? Man müsste die "grösste" nehmen, da bei mir manchmal mono-Spur die erste ist ( = 001.mpa), gibt es dafür einen Befehl in der bash? (Groessenvergleich von Dateien?)

Code:
#!/bin/bash

# Aufrufen in reccmds.conf ODER commands.conf mit
# printf "/root/bin/myvdr2mpg.sh"|at now
#
# ACHTUNG: Behandlung des Inputs! mit at: Uebergibt VDR das REC_DIR????
#
# ACHTUNG: Was ist bei mehreren MPA?
#

SVDRP=$(which svdrpsend.pl)
PX=$(which projectx)
PX="java -jar /root/px/PX.jar"
MPLEX=$(which tcmplex)
CONV_PATH="/media/convert/mpg"
TMP_PATH="media/convert/tmp"
XINI_FILE="/root/px/PX.INI"

# hier noch Abfrage, ob Dir-Name % enthaelt, wenn ja => nix machen, wenn Nein => suche marks.vdr, die in Bytepos, dann noch XOPT dazu
if [ $(echo ${1}|grep '%') ] ; then
  /root/bin/marks2bytepos.pl ${1} > ${1}/marks.xcl
  XOPTS="-cut ${1}/marks.xcl"
else
  XOPTS=""
fi

$SVDRP MESG "myvdr2mpg: Demuxing!"
#$PX -ini "./X.ini" "${1}/*.vdr" -out "/media/convert"
#$PX -ini "./X.ini" "${1}/*.vdr" -out $TMP_PATH
$PX $XOPTS -ini $XINI_FILE "${1}/*.vdr" -out $TMP_PATH
$SVDRP MESG "myvdr2mpg: Demuxed!"
$SVDRP MESG "myvdr2mpg: Video wird erstellt..."
$MPLEX -m d -i "$TMP_PATH/001.mpv" -p "$TMP_PATH/001.mpa" -s "$TMP_PATH/001.ac3" -o "$CONV_PATH/video.mpg"
cd $TMP_PATH
rm -f "*.{mp{a,v},ac3,txt}"
$(SVDRP) MESG "myvdr2mpg: Video fertig!!!"

PS: Ungetestet, da vdr zu Hause noch schlummert, versuche ich am WE mal.

Freue mich auf Eure Beiträge!
Frank
vdr: Silverstone GD01 MRX mit ImonLCD, Asus M4V78 ATI-Graka Board, AMD 4850e,  FF Technotrand S2300 modded, LG, 40GB IDE 2,5", 500GB SATA, Samsung DVD-Brenner (easyvdr 0.806 mit lirc-0.8.6

Zalman MS1000-2 mit 6 Swap-Bays für 3,5" Platten, Core i3-2120, ASUS P8P67, 4GB Kongston, Zotac GT430 passiv, LG DVD Brenner, TBS 6981 Dual DVB-S2, easyvdr 096-B1 mit linux-media-tbs-dkms
Zitieren
#6
Morgen,

Hab jetzt den kompletten Pfad zur X.ini eingetragen, Skript funktioniert!

Find ich auch nicht schlecht, die Idee mit dem Größenvergleich der .mpa´s.
Schneiden werd ich dann eventuell auch noch mit einbauen.

Ich muss aber erstmal das Script richtig gestartet bekommen.
Hab immer noch den Syntax error.

Werd mich damit morgen mal genauer beschäftigen.

Grüße
McDreamy
Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren
#7
Hi,

hab mal ein wenig getestet und erweitert.
Läuft bei mir prima durch (mit Schnittmarken, ohne vorher per vdr geschnitten zu haben).
Man kann jetzt den Ablauf verfolgen durch logread, da Meldungen per "logger" ins syslog erfolgen (Auch wenn es vielleicht etwas vermessen ist, sich der Profi-Mechanismen zu bedienen, wenn man nur autodidaktischer Diletant ist ;-)

Code:
#!/bin/bash

# Aufrufen in reccmds.conf ODER commands.conf mit
# printf "/root/bin/myvdr2mpg.sh"|at now"
#
# ACHTUNG: Behandlung des Inputs! mit at: Uebergibt VDR das REC_DIR????
#
# ACHTUNG: Was ist bei mehreren MPA?
#
# Nutze logger fuer Mitschrift der Ablaeufe
# siehe "logread"
#
# FJE, 07.03.2009
#

SVDRP=$(which svdrpsend.pl)
PX="java -jar /root/px/PX.jar"
MPLEX=$(which tcmplex)
CONV_PATH="/media/convert/mpg"
TMP_PATH="/media/convert/tmp"
XINI_FILE="/root/px/PX.ini"
LGGRCMD="logger -t myvdr2mpg: "

# hier noch Abfrage, ob Dir-Name % enthaelt, wenn ja => nix machen, wenn Nein => suche marks.vdr, die in Bytepos, dann noch XOPT dazu

$LGGRCMD "behandle ${1}"

if [ $(echo ${1}|grep -c '%') ] ; then
    /root/marks2bytepos.pl ${1} > ${1}/marks.xcl
    XOPTS="-cut ${1}/marks.xcl"
    $LGGRCMD "Schnittliste gefunden und konvertiert"
else
    XOPTS=""
    $LGGRCMD "KEINE Schnittliste gefunden"
fi

#ls -1 ${1}/00?.vdr
#echo " "

#
# jetzt mit projectx in streams zerlegen
#

$SVDRP MESG "myvdr2mpg: Demuxing"
$LGGRCMD "$PX $XOPTS -ini $XINI_FILE ${1}/00?.vdr -out $TMP_PATH"

$PX $XOPTS -ini $XINI_FILE ${1}/00?.vdr -out $TMP_PATH
$SVDRP MESG "myvdr2mpg: Demuxed: Video wird erstellt..."

#
# jetzt demuxen
#

if [ -f "$TMP_PATH/001.ac3" ] ; then
    $MPLEX -m d -i "$TMP_PATH/001.mpv" -p "$TMP_PATH/001.mpa" -s "$TMP_PATH/001.ac3" -o "$CONV_PATH/video.mpg"
        $LGGRCMD "plexe MIT  ac3"
else
    $MPLEX -m d -i "$TMP_PATH/001.mpv" -p "$TMP_PATH/001.mpa" -o "$CONV_PATH/video.mpg"
        $LGGRCMD "plexe OHNE ac3"
fi

$SVDRP MESG "myvdr2mpg: Video fertig."

#exit

#
# Aufraeumen
#

cd $TMP_PATH
rm -f *.{mp{a,v},ac3,txt}
$LGGRCMD "$TMP_PATH aufgeraeumt"
$SVDRP MESG "myvdr2mpg: Streams entfernt"

Es fehlt meines Erachtens noch:
Check, ob Dir's existieren
Check, ob Files existieren (wie PX.ini)
Check nach jedem Schritt, ob der Prozess richtig lief und ggf. abbrechen (was ist bei voller Platte usw.)

Außerdem fehlt noch die Behandlung der multiplen mpa's (evt. ls -1 *.mpa |head -1 mit Sortieren nach Groesse). (ac3 Abfrage ist drin).

Bye
Frank
vdr: Silverstone GD01 MRX mit ImonLCD, Asus M4V78 ATI-Graka Board, AMD 4850e,  FF Technotrand S2300 modded, LG, 40GB IDE 2,5", 500GB SATA, Samsung DVD-Brenner (easyvdr 0.806 mit lirc-0.8.6

Zalman MS1000-2 mit 6 Swap-Bays für 3,5" Platten, Core i3-2120, ASUS P8P67, 4GB Kongston, Zotac GT430 passiv, LG DVD Brenner, TBS 6981 Dual DVB-S2, easyvdr 096-B1 mit linux-media-tbs-dkms
Zitieren
#8
Da sieht doch schon richtig gut aus.
Zitieren
#9
Hab Probleme mit "marks2bytepos.pl".
Das Skript gibts bei mir nicht, was muss da denn rein???
Ich hab aber marks2pts gefunden. Solls damit laufen?

Und der Aufruf muss ja aus der reccmds.conf heraus folgen, weil da dem Skript der Pfad mitgegeben wird!
Nur sieht das dann in der Ausgabe so aus:
Zitat:printf "/usr/bin/myvdr2mpg.sh" |at now "/video0/%Pushing_Daisies/2009-02-25.22.01.99.99.rec"

Und so funktioniert das leider nicht, weil:
Zitat:syntax error. Last token seen: /
Garbled time

Grüße
McDreamy
Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren
#10
Ich habs!!!

hab noch ein kleines Skript demux.pl eingefügt, mit dem dann das myvdr2mpg gestartet wird:
Zitat:#!/bin/bash
printf "/usr/bin/myvdr2mpg.sh ${1}" |at now
exit 0

Der Aufruf in der reccmds.conf sieht so aus:
Zitat:-Als .mpg exportieren: /usr/bin/demux.pl

Klappt jetzt also endlich auch direkt aus dem OSD heraus das Ganze!!!
Jetzt nur noch das outputfile richtig benennen, mit Name und evtl. Datum, dann ist gut!

Grüße
McDreamy
Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren
#11
Nach 3 Stunden intensiver Recherche zum Thema "Variable teilen, teilweise ausgeben"
geb ich jetzt auf!
"tr" hat mich zwar fast schon in die Richtung gebracht, aber leider kann ich damit nur bestimmte Zeichen wegschneiden und nicht den kompletten Pfad vor und nach dem Namen der Aufnahme...
Keine Chance!!!

In Verzweiflung
McDreamy

Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren
#12
Das % im Pfad der geschnittenen Aufnahme ist jetzt noch ein Problem, weil printf anscheinend nicht damit umgehen kann.
Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren
#13
versuch mal cut und sed.
Zitieren
#14
Jetzt blick ich gar nicht mehr durch!!! :-)
Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren
#15
Noch ein Stück weiter gekommen:
Zitat:#!/bin/bash
A="/video0/Die_Legende_des_Zorro/2009-03-07.20.05.99.99.rec"
echo $A
B=$(echo ${A}|cut -b9-60)
C=$(echo ${B}|tr -d "/ . - ")
echo $B
echo $C

ergibt:
Zitat:/video0/Die_Legende_des_Zorro/2009-03-07.20.05.99.99.rec
Die_Legende_des_Zorro/2009-03-07.20.05.99.99.rec
Die_Legende_des_Zorro2009030720059999rec

Nur kann ich anscheinend mit cut nur von links nach rechts schneiden.
Ich werds mal dabei belassen...
Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren
#16
Da is sie, die Lösung:

Zitat:#!/bin/bash
A="/video0/Die_Legende_des_Zorro/2009-03-07.20.05.99.99.rec"
echo $A
B=$(echo ${A}|wc -m)
echo $B
C=`expr $B - 17`
echo $C
D=$(echo ${A}|cut -b9-${C})
echo $D
E=$(echo ${D}|tr '/' -)
echo $E
Die Buchstaben vom variablen Pfad werden gezählt, die fixen Zeichen, die immer hinten dran stehen und man nicht braucht, werden von der Gesamtzahl der Zeichen subtrahiert.
Dann wird mit cut noch das /video0/ am Anfang des Pfades abgeschnitten und mit tr der / durch ein - ersetzt!

Wie einfach das doch alles sein kann, wenn man einen ganzen Tag Zeit hat... :-)

@Wirbel
Besten Dank für den Tip!!!
Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren
#17
Also abschließend noch eine kleine Zusammenfassung:

-Es funktioniert jetzt die Benennung des outputfiles mit dem Richtigen Dateinamen
-Auch der Aufruf mit printf aus dem Menü heraus funktioniert, solange die Aufnahme nicht geschnitten ist!!! (Wegen %)

Da würd ich gerne noch was ümbauen, am liebsten irgendwo die Option ändern, die das % davorschreibt.
Steht im printf manual irgendwo, dass das nicht klappt, und geht auch definitiv nicht!

Mit cron und atd bin ich leider nicht so recht klargekommen, vielleicht hat da jemand noch einen Tip?

Ansonsten bin ich eigentlich sehr zufrieden, klappt alles wie es soll!


Grüße
McDreamy
Siverstone LC17 - Enermax MODU82+ 525Watt - AMD Geode 1750 - ASrock K7S41GX - 512Mb DDR Kingston - TT Premium 2300 modded - Technisat Skystar2 - 250 Gb HDD - Logitech Harmony 525 - Atric IR-Einschalter - Easyvdr 0.6.04 - GraphLcd -Sony Dolby Digital Receiver
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: