Suche Hilfe bei Shell-Script

  • Hallo zusammen,


    Hintergrund:
    Ich möchte nach einer VDR-Aufzeichnung die Aufnahme mit noad
    schneiden und anschließend mint vdrsync als mpg-Datei abspeichern.
    Dazu habe ich dann eine Script nach Vorbild von :


    http://www.vdr-wiki.de/wiki/index.php/Rwrapper.sh


    erzeugt.
    Das funktioniert auch schon ganz gut. Mein vdrsync Befehl geht nun so:


    ./vdrsync.pl
    "/mnt/data/video/Galileo_Extra/2006-02-05.18.32.50.99.rec" -cut -mpeg2
    -o /mnt/data/server/mpg -basename Galileo


    Auch das geht funktioniert. Nun möchte ich aus


    "/mnt/data/video/Galileo_Extra/2006-02-05.18.32.50.99.rec


    einen Dateinamen generieren , den ich für "-basname" verwenden
    kann, also zum z.B. -basename Galileo_Extra_2006-02-05
    Wie stelle ich das an ?


    Anmerkung dazu :
    "/mnt/data/video/Galileo_Extra/2006-02-05.18.32.50.99.rec
    ist das Verzeichn ist, welches VDR dem Script übergibt.


    Ich danke für Eure Hilfe :]


    gehlhajo

    VDR-1: streamdev-server | Hummingboard2| TT 3600 USB | Siemens S500 Gehäuse | Archlinux mit eigen Skripten
    VDR-2: streamdev-client | rpihddevice | Raspberry 2b | Siemens S450 Gehäuse| Remote: URC6410 | LG 42LV4500 |
    Archlinux mit eigenen Skripten


  • Hallo,
    Parameter für basename erhälst Du mit dem Programm basename :)


    z.B.


    Code
    -basename `basename $dir .rec`



    Grüße
    sundin


    my VDR: Asus AT3IONT-I deluxe, Digital Devices Cine S2 (dual DVB-S2 V5.5), yavdr 0.4, VDR 1.7.21
    OSD-Calender: PIM Plugin

  • Hallo sundin
    Ich sitze gerade nicht vor einem Linux-Rechner, aber gibt
    'basname' nicht den Dateinamen eines kompletten Pfades
    wieder ?
    Also in meinem Fall:


    basename "/mnt/data/video/Galileo_Extra/2006-02-05.18.32.50.99.rec


    ergibt
    2006-02-05.18.32.50.99.rec


    Ich brauche aber


    Galileo_Extra_2006-02-05 :]


    gehlhajo

    VDR-1: streamdev-server | Hummingboard2| TT 3600 USB | Siemens S500 Gehäuse | Archlinux mit eigen Skripten
    VDR-2: streamdev-client | rpihddevice | Raspberry 2b | Siemens S450 Gehäuse| Remote: URC6410 | LG 42LV4500 |
    Archlinux mit eigenen Skripten


  • Moin,


    ich wuerd's etwa so machen:

    Code
    ORIGNAME="/mnt/data/video/Galileo_Extra/2006-02-05.18.32.50.99.rec"
    RECID=`basename ${ORIGNAME}`
    DIRNAME=`dirname ${ORIGNAME}`
    TITLE=`basename ${DIRNAME}`
    DATE=`echo ${RECID} | awk -F\. '{print $1}'`
    BASENAME=${TITLE}_${DATE}


    Liesse sich sicher noch etwas vereinfachen/komprimieren, ist aber nur ein Quickshot.


    Gruss


    /elle

  • Moin,


    sicher kuerzer und fuer diesen Fall auch passend.


    Was aber, wenn gehlhajo sich entscheidet, sein Videoverzeichnis eine Ebene hoeher oder tiefer zu haengen und nicht daran denkt, dass er das Script anpassen muss? Dann passt der Einzeiler nicht mehr.


    Auf jeden Fall wuerde ich aber den letzten sed durch awk ersetzen:

    Code
    echo "/mnt/data/video/Galileo_Extra/2006-02-05.18.32.50.99.rec" | cut -d'/' -f5-6 | sed -e 's/\//_/' | awk -F\. '{print $1}'


    Gruss


    /elle

  • Geht auch.


    Code
    case "$1" in
        before)
    	echo "Before recording $2"
    	SL=${2//[^\/]} IFS=/ SP=($2)
    	vdrsync.pl "$2" -cut -mpeg2 -o /mnt/data/server/mpg -basename "${SP[$((${#SL}-1))]}_${2:(-26):10}"
            ;;
    esac


    ------------------
    Nachtrag...


    before ist blödsinn, ware dann after, oder edited (mußt Du ja am besten wissen)



    MFG Ronny

  • Ronny,


    das sieht ja wuest aus, beinhaltet aber haufenweise bash-builtins - kannst Du die ev. ein bisschen naeher erlaeutern?


    Gruss


    /elle


  • Hatte das mal gelesen.


    http://vdrportal.de/board/thread.php?threadid=35375


    Ist wohl besser / schneller, die Sachen die die bash hat, zu nutzen.


    Letztendlich... hauptsache das Ergebniss passt ;D


    http://www.tldp.org/LDP/abs/html


    ------------------


    Nur die '/' rest verwerfen.

    Code
    SL=${2//[^\/]}


    Feldseperator setzen, in array packen.

    Code
    IFS=/ SP=($2)


    Aus $2 wird.

    Code
    ${SP[0]}=mnt
    ${SP[1]}=data
    ${SP[2]}=video
    ${SP[3]}=Galileo_Extra
    ${SP[4]}=2006-02-05.18.32.50.99.rec


    Das vorletzte vom array (-1).

    Code
    ${SP[$((${#SL}-1))]} = ${SP[3]} = Galileo_Extra


    Datum (26 Zeichen negiert (von hinten) + 10)

    Code
    ${2:(-26):10}
    
    
    2006-02-05.18.32.50.99.rec
    ^        ^
    -26      +10
    
    
    2006-02-05


    Das geht auch.

    Code
    ${SP[${#SL}]:0:10}


    MFG Ronny

    Einmal editiert, zuletzt von ronnykornexl ()

  • [edit]Vergesst es!! Bin zu blöd und habe es mir zu schwer machen wollen!!![/edit]


    Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

    Einmal editiert, zuletzt von Toxic-Tonic ()

  • Moin,



    Stimmt, da Du keine externen Prozesse startest, faellt der ganze Overhead weg - man muss aber zugeben, dass es schon ein bisschen Einarbeitung erfordert ... ;)


    Auf jeden Fall danke fuer die Erlaeuterung.


    /elle

  • Hallo
    Erstmal vielen Dank für die vielen Vörschläge.
    Also, ich habe zuerst Ronnies Methode probiert:


    Zitat

    ./vdrsync.pl "$2" -cut -mpeg2 -o /mnt/data/server/mpg -basename "${SP[$((${#SL}-1))]}_${2:(-26):10}"


    Funktioniert bei mir leider nicht. Ich krieg da die Fehlermeldung:
    ./vdrreccmds: line 21: SP: bad array subscript


    Dann habe ich zuses Methode probiert.


    Zitat

    ./vdrsync.pl "$2" -cut -mpeg2 -o /mnt/data/server/mpg -basename `echo "$2" | sed -e 's/.*video\///g' | sed -e 's/\//_/' | cut -d'.' -f1`


    Das funktioniert bei mir. Aber ich muß zusehen,daß mein Video-Directory
    immer "video" enthält, sehe ich das richtig ?


    Aber dann kommt noch ein Fehler
    vdrsync.pl erzeugt 3 Dateien wobei eine Datei ein3 *.ac3 Datei mit 0kb Größe ist. (Ist ja auch richtig, oder gibt es über DVB-T AC3 ?)


    Wenn vdrsync dann zur der Stelle mit mplex kommt


    Zitat

    nice -n 19 /usr/local/bin/mplex -V -f 3 -r 9800 -o /mnt/data/server/mpg//Galileo_Extra_2006-02-05%d.mpg /mnt/data/server/mpg//Galileo_Extra_2006-02-05.mpv /mnt/data/server/mpg//Galileo_Extra_2006-02-05.ac3 /mnt/data/server/mpg//Galileo_Extra_2006-02-050.mpa > /dev/null 2> /dev/null '


    dann schmeist es ihn.. ;(


    Zitat

    **ERROR: [mplex] Unable to read from /mnt/data/server/mpg//Galileo_Extra_2006-02-05.ac3.


    Wenn ich jetzt einfach den AC3-Teil aus dem Aufruf lösche, also so:


    Zitat

    nice -n 19 /usr/local/bin/mplex -V -f 3 -r 9800 -o /mnt/data/server/mpg//Galileo_Extra_2006-02-05%d.mpg /mnt/data/server/mpg//Galileo_Extra_2006-02-05.mpv /mnt/data/server/mpg//Galileo_Extra_2006-02-050.mpa > /dev/null 2> /dev/null '


    dann funktionierts....


    Kann ich vdrsync irgendwie mitteilen, daß es kein AC3 File verwenden soll ?
    (hmm wahrscheinlich falschesThema hier)
    Aber vielleicht hat ja jemand den Durchblick.
    Aber wie gesagt: Nochmal vielen Dank. Ich geb ein virtuelles Bier aus 8)


    Gruß


    gehlhajo

    VDR-1: streamdev-server | Hummingboard2| TT 3600 USB | Siemens S500 Gehäuse | Archlinux mit eigen Skripten
    VDR-2: streamdev-client | rpihddevice | Raspberry 2b | Siemens S450 Gehäuse| Remote: URC6410 | LG 42LV4500 |
    Archlinux mit eigenen Skripten


  • /vdrreccmds: line 21: SP: bad array subscript


    Hatte es Nachmittag nicht testen können, aber jetzt.


    Code
    case $0 in
         *after-*)
    	exec > /video/log 2>&1
    	set -x
    	echo $1
    	echo $2
    	SL=${2//[^\/]} IFS=/ SP=($2)
    	vdrsync.pl "$2" -cut -mpeg2 -o /video0 -basename "${SP[$((${#SL}-1))]}_${2:(-26):10}"
    	;;


    Hier die Ausgabe.



    Wie Du siehst geht es seinen Gang, poste mal Deinen kompletten Schnippsel.


    MFG Ronny

  • ..hmm , also so siehts bei mir aus...



    und die Fehlermeldung dieselbe wie eben..


    Gruß


    gehlhajo

    VDR-1: streamdev-server | Hummingboard2| TT 3600 USB | Siemens S500 Gehäuse | Archlinux mit eigen Skripten
    VDR-2: streamdev-client | rpihddevice | Raspberry 2b | Siemens S450 Gehäuse| Remote: URC6410 | LG 42LV4500 |
    Archlinux mit eigenen Skripten



  • Ein wenig mehr wurde oben schon gepostet (es sind 2 Zeilen) ;D


    Code
    SL=${2//[^\/]} IFS=/ SP=($2)
    		 ./vdrsync.pl "$2" -cut -mpeg2 -o /mnt/data/server/mpg -basename "${SP[$((${#SL}-1))]}_${2:(-26):10}"


    MFG Ronny

  • oooooohhhhhhhhh Mannnnnnn......


    :deppenalarm


    Ich glaub ich geh ins Bett :rolleyes:



    Vielen Dank..


    gehlhajo

    VDR-1: streamdev-server | Hummingboard2| TT 3600 USB | Siemens S500 Gehäuse | Archlinux mit eigen Skripten
    VDR-2: streamdev-client | rpihddevice | Raspberry 2b | Siemens S450 Gehäuse| Remote: URC6410 | LG 42LV4500 |
    Archlinux mit eigenen Skripten


  • Hi,


    eieiei, da sind ja schon haufenweise Lösungen drin....
    ...Da hätte ich wohl erstmal scrollen müssen 8)


    Egal, hab was gelernt und präsentiere meinen eleganten :D Einzeiler:


    dir="/mnt/data/video/Galileo_Extra/2006-02-05.18.32.50.99.rec"


    echo $dir | awk -F/ '{print $(NF-1) "_" substr($NF,0,10) }'


    Ergebnis:


    Galileo_Extra_2006-02-05



    Natürlich ist das Ergebnis unabhängig von der Pfadlänge oder der Anzahl der Verzeichnisse.



    Grüße
    Ralf

    VDR - Die 'Killerapplikation' die mich zu Linux gebacht hat ;)

    Neues yaVDR HD-System ging am 20.12.2013 in Betrieb :)
    yaVDR 0.7-ansible im Aufbau ab Jan. 2024.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!