grab.sh und vdrconvert

  • Nachdem so ca. seit vdrdevel 1.3.38 das Grabben der Background-Bilder aus dem OSD heraus für vdrconvert nicht mehr funktioniert, wünsche ich mir baldige Besserung.


    Eins vorab, mit Skripten kenne ich mich nicht aus, ich habe jedoch folgenden Versuch gemacht, die für den o.g. Job zuständige


    /usr/lib/vdrconvert/bin/grab.sh umzuschreiben, damit das Grabben wieder funktionert. Sie sieht jetzt so aus:


    #!/bin/sh


    # $1 ist 'background' oder 'subbackground' , je nachdem, welches Bild mit VDRCONVERT im Menue angefordert wird.
    # $2 ist das Verzeichnis der Aufnahme, z.B. /var/lib/video.00/name_der_aufzeichnung/...rec
    # sicherheitshalber alte Bilder in /tmp löschen :
    echo "rm -f /tmp/$1" | at now
    # background.pnm oder subbackground.pnm mittels grab in /tmp erzeugen :
    echo "/usr/lib/vdrdevel/svdrpsend.pl grab $1" | at now
    # Hintergrundbild aus /tmp ins Aufnahmeverzeichnis verschieben:
    mv "/tmp/$1" --target-directory="$2/" &



    Das Grabben funktioniert damit, und es landet ein Bild Namens background.pnm oder subbackground.pnm in /tmp . Das Verschieben des Bildes ins jeweilige Aufnahmeverzeichnis will partout nicht aus dem OSD heraus klappen. Starte ich die grab.sh handisch von der Konsole mit


    ./grab.sh background /pfad/zum/aufnahmeverzeichnis , funktioniert das.


    Ich habe die grab.sh schon mal rausschreiben lassen, als welcher User sie läuft, und der ist bei mit root.


    Wer weiß, woran es liegen könnte ?


    Gruß


    Mein VDR: ctvdr4, vdrdevel 1.3.40.

    HW: ASRock J4105M / Silverstone Gehäuse / Digital Devices Cine S2 DVB S2 TWINSAT Low Profile PCIe REV. V6.5 / Samsung UE46B6000.


    SW: yaVDR ansible als Server, KODI 19 (auf Fire TV Cube).

  • Wirst da eine Pause setzen müssen (zwischen grab und mv), weil at nicht so fix ist, oder.


    Code
    (
        $SVDRPSEND GRAB $1 100 $RES
        cp -v /tmp/$1 "$2"
        logger -t ${0##*/} -f /tmp/vdrgrab
    ) \
    >/tmp/vdrgrab 2>&1 &


    MFG Ronny

  • funktioniert es bei Euch mittlerweile ?


    wie stelle ich fest, wann grab fertig ist ? bzw. wann der Befehl überhaupt ausgeführt wird ?

    ASRock K7S41, Geode 1750+, 512 MB, 1xNexus-S + 1xNova-S, SP1614, ND3550A, 2.6.15, Tobi experimental (1.4.45), NVRAM wakeup, LCD Display.

  • Hi,


    Folgendes funktioniert bestens ...
    das ganze läuft ohne den VDR mit -g .... starten zu müssen.


    Code
    PICFILE="$(date +%FT%X).jpg"
    TEMPFILE="/dev/shm/$PICFILE"
    
    
    SVDRPSENDOPT="-d localhost -p 2001"
    
    
    svdrpsend.pl $SVDRPSENDOPT "grab -" | sed -n -e "s/^216-//p" -e "1ibegin-base64 644 -" -e "\$a====" | uudecode > $TEMPFILE


    HTH,
    Andreas

  • Hallo Hulk,


    sehr schnelle Antwort, echte Rekordzeit, aber ich fürchte, ich als Linux Neuling was weiß gar nicht, wo ich den Codeschnipsel hinschreiben soll.


    Ich habe ct VDR 4.5 sarge-experimental, also VDR Version 1.3.41

    ASRock K7S41, Geode 1750+, 512 MB, 1xNexus-S + 1xNova-S, SP1614, ND3550A, 2.6.15, Tobi experimental (1.4.45), NVRAM wakeup, LCD Display.

    Einmal editiert, zuletzt von Schlitz ()

  • Hallo !
    ja hat denn keiner von den Profis eine Lösung ?
    ich habe es leider nicht hingebracht eine Schleife zu prog. in der so lange gewartet wird, bis die background.pnm in /tmp/ liegt:



    #!/bin/sh


    # $1 ist 'background' oder 'subbackground' , je nachdem, welches Bild mit VDRCONVERT im Menue angefordert wird.
    # $2 ist das Verzeichnis der Aufnahme, z.B. /var/lib/video.00/name_der_aufzeichnung/...rec
    # sicherheitshalber alte Bilder in /tmp löschen :
    echo "rm -f /tmp/$1" | at now


    # background.pnm oder subbackground.pnm mittels grab in /tmp erzeugen :
    echo "/usr/lib/vdr/svdrpsend.pl grab $1 &" | at now


    # Hintergrundbild aus /tmp ins Aufnahmeverzeichnis kopieren:


    cd /tmp
    while [ test -e background.pnm ]; do
    echo "waiting"
    sleep 1
    done
    cp /tmp/$1 --target-directory="$2/"



    das warten auf die Datei funktioniert nicht. ich bekomme eine Fehlermeldung, daß für "test -e background.pnm" ein binärer Parameter erwartet wird.

    ASRock K7S41, Geode 1750+, 512 MB, 1xNexus-S + 1xNova-S, SP1614, ND3550A, 2.6.15, Tobi experimental (1.4.45), NVRAM wakeup, LCD Display.

  • Dein Test müsste lt mir so aussehen:

    Code
    while [ ! -e /tmp/background.pnm ]; do
    echo "waiting"
    sleep 1
    done


    -e sagt die Datei existiert, und die [] steht schon für test
    ! kehrt die Bedingung um.

  • danke Dir, wilderigel für Deine schnelle Hilfe.


    hiermit:


    echo "rm -f /tmp/$1" | at now
    echo "/usr/lib/vdr/svdrpsend.pl grab $1 &" | at now


    while [ ! -e /tmp/background.pnm ]; do
    echo "waiting"
    sleep 1
    done
    cp /tmp/$1 --target-directory="$2/"


    hängt er in der while Schleife fest, weil das Bild nie in die datei /tmp/background.pnm geschrieben wird. Nur ich weiß nicht, warum, denn wenn ich die While Schleife auskommentiere, dann liegt das gegrabte Bild immer in /tmp drin. Die Schleife scheint das Grabben zu blockieren, oder ?


    als endgültige Lösung habe ich die in Deinem Beitrag genommen:
    http://www.vdr-portal.de/board…?postid=425610#post425610

    ASRock K7S41, Geode 1750+, 512 MB, 1xNexus-S + 1xNova-S, SP1614, ND3550A, 2.6.15, Tobi experimental (1.4.45), NVRAM wakeup, LCD Display.

    Einmal editiert, zuletzt von Schlitz ()

  • Also nochmals leicht überarbeitet, und auch Variablen wieder gesetzt:

    Bash
    #!/bin/sh
    rm -f /tmp/$1
    echo "/usr/lib/vdr/svdrpsend.pl grab $1" | at now
    
    
    while [ ! -e /tmp/$1 ]; do
    echo "waiting"
    sleep 1
    done
    mv /tmp/$1 --target-directory="$2/"


    Hat auf der Kommandozeile jetzt immer funktioniert.

Jetzt mitmachen!

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