Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Auch Frage zu Scripten
#1
Hallo zusammen,

ich versuche nun sein über einer Woche ein paar Video-Szenen von einer Video-Camera über Firewire einzulesen und in das VDR-Format zu konvertieren.
Aus einem Beitrag im VDR-Portal,
http://www.vdrportal.de/board/thread.php...r=0&page=1
habe ich mit meinen bescheidenen Linux-Kenntnissen folgende beiden Scripts für die Konsole (s.Anhang) zusammengebaut:
getDV3.sh liest die Daten ein uns schreibt avi-files
toVDR3.sh macht daraus ein ganzes Aufnahmeverzeichnis mit 00x.vdr.

Bei meinem Versuch die beiden Scripte nun zusammenzufassen und in den Hintergrund zu bekommen bin ich kläglich gescheitert.
Ebenfalls auf Basis des Beitrags im VDR-Bortal habe ich das Script dv3.sh zusammengebaut (s. Anhang), dass über einfache Aufrufe (DV3.sh grab_start; .. grab_stop; .. to_vdr) z.B. aus der Commands.conf das Einlesen steuert und die Convertierung startet.

Die folgenden beiden Punkte tun aber nicht (richtig):
Das Incrementieren für den Filenamen
Zitat:    FILE_NR=$[ $FILE_NR +1 ]
tut in toVDR3.sh gut, in dv3.sh wird fest der Wert 1 zugewiesen ??

Zitat:/usr/bin/dvgrab -f dv2 $PREFIX 
in getDV3.sh liest die Daten so ein, dass toVDR3.sh oder dv3.sh konvertieren können.
Zitat:      echo "$DVGRAB -f dv2 $PREFIX > /dev/null"
in DV3.sh liest zwar auch .avi Dateien ein, aber sowohl toVDR3.sh als auch dv3.sh brechen mit einer Fehlermeldung "unbekanntes Format" das konvertieren durch [lav2yuv] ab.

Wer es ausprobieren möchte braucht ggf ein Update von dvgrab siehe:
http://www.easy-vdr.de/forum/index.php?t...6#msg53556

Alle Vorschläge, die das Einlesen und Konvertieren über Befehle in der commands.conf ermöglichen sind willkommen.

Vielen Dank im Voraus
Michel
Produktiv-VDR:
msi K9N2G-Neo (nvidia 8200 onBoard) mit Athlon X2 4850e mit SamuraiZZ
2xNova-HDS2, DH102
Zitieren
#2
Hallo michel8,

also der erste Fehler mit der Dateibenennung wird wohl an dem überflüssigen Backslash vor der Variable in der if-Zeile Nr. 100 liegen. Dies ist auch der Unterschied der dv3.sh zur toVDR3.sh.

dv3.sh:
Code:
for i in *.avi
do
    FILE_NR=$[ $FILE_NR +1 ]
    if [ \$FILE_NR -lt 10 ]
      then

toVDR3.sh:
Code:
for i in *.avi
do
    FILE_NR=$[ $FILE_NR +1 ]
    if [ $FILE_NR -lt 10 ]
      then

MfG

Jörg
Hardware: Gehäuse Streacom FC9B (Fanless), MB Gigabyte GA-G41M-Combo mit P4 E5300, SDD Samsung 840 EVO 250 GB, Digital Devices Cine2 (Dual DVB-S2 Budget) low profile, Zotac GT630 ZONE Edition 1GB low profile passiv mit easyVDR 1.0, testweise mit easyVDR 2.0 Alpha
Zitieren
#3
Zum zweiten Problem:

Schreibe in der dv3.sh in der Zeile Nr. 54 anstatt
Code:
echo "$DVGRAB -f dv2 $PREFIX > /dev/null"
nur
Code:
$DVGRAB -f dv2 $PREFIX > /dev/null

Denn mit dem echo-Befehl wird nur die darauf folgende Zeichenkette ausgegeben.

MfG

Jörg
Hardware: Gehäuse Streacom FC9B (Fanless), MB Gigabyte GA-G41M-Combo mit P4 E5300, SDD Samsung 840 EVO 250 GB, Digital Devices Cine2 (Dual DVB-S2 Budget) low profile, Zotac GT630 ZONE Edition 1GB low profile passiv mit easyVDR 1.0, testweise mit easyVDR 2.0 Alpha
Zitieren
#4
Hallo Jörg,

vielen Dank für Deine Antworten.
Die Änderungsvorschläge lösen die Probleme leider auch nicht.
Das Incrementieren mit
Zitat:    FILE_NR=$[ $FILE_NR +1 ]
funktioniert gut solange es vor der Zeile
Zitat:    cat <<EOF
steht, steht es danach wird der Variablen FILE_NR nur noch die 1 zugewiesen.
Andere Stellen, an denen Variablen die nach "cat <<EOF" verwendet werden erfordern einen"\" vor dem "$" damit die Variable überhaupt verwendet wird - warum weiß ich nicht.

Das echo vor dem Befehl in
Zitat:      echo "$DVGRAB -f dv2 $PREFIX > /dev/null"
ist erforderlich, damit der Befehl im Hintergrund ausgeführt wird.
Selbst ohne echo und ohne die Umleitung auf /dev/null wird das .avi-file mit dem Script dv3.sh mit einem kleinen Fehler erzeugt, dass es nicht mehr convertiert werden kann.

Gruß
Michel
Produktiv-VDR:
msi K9N2G-Neo (nvidia 8200 onBoard) mit Athlon X2 4850e mit SamuraiZZ
2xNova-HDS2, DH102
Zitieren
#5
Hi,

ich bin kein bash / sh Profi - dein File sieht nach mehr aus als ich zuammentickern würde. Trotzdem mal zwei Ideen:

1)

Code:
        FILE_NR=$[ $FILE_NR +1 ]
tut in toVDR3.sh gut, in dv3.sh wird fest der Wert 1 zugewiesen ??

Wie Du richtig anmerkst brauchst du nach dem cat <<EOF ein \$ statt dem $ - damit die Variable nicht von ?cat? ersetzt wird. Hier ein Mini Beispiel:

Code:
  #! /bin/bash
  cat <<EOF
   while true
    do
      echo \$FILE_NR
      #FILE_NR= $[ \$FILE_NR +1 ]  ## Die Syntax kenne ich nicht - hat bei mir unter Bash nicht funktioniert.
      let FILE_NR=\$FILE_NR+1
      sleep 1
    done
  EOF

======> Ergebnis:
  ./test.sh
  while true
    do
      echo 0
      #FILE_NR= 1
      let FILE_NR=0+1  ## Ups, das Ergebnis statt der Variablen? Hier fehlt der \
      sleep 1
    done

Ich würde mal ausprobieren das \$ konsequent durchzuziehen, also eines von denen hier:
Code:
  FILE_NR=$[ \$FILE_NR +1 ]
  FILE_NR=\$[ \$FILE_NR +1 ]
  let FILE_NR=\$FILE_NR+1  ## Achtung - keine Leerzeichen einbauen!


2)
Code:
echo "$DVGRAB -f dv2 $PREFIX > /dev/null"

Den hier habe ich nicht so ganz verstanden. Von daher zwei Fragen:

- Muss der dvgrab Aufruf in einem bestimmten Verzeichnis stattfinden? Dein 'echo' führt ja wieder zu einem neuen Prozess, der steht evlt. im falschen Verzeichnis? Falls Du einen Pfad hast kannst Du so etwas mal ausprobieren:
Zitat:  echo "cd /meinPfad && $DVGRAB -f dv2 $PREFIX > /dev/null"

- Besteht die Möglichkeit das Du den output deines Scriptaufrufs mal postest? Damit würde man sehen was da wirklich ausgegeben wird. (Siehe mein Beispiel oben).

Good luck,

ItsMee
[table][tr][td][size=2][b]VDR2: EasyVDR 0.6.08 - HD-ready Smile[/td][td][/td][td][size=2][b]VDR3: EasyVDR 0.7.22 HD Smile[/td][/tr]
[tr][td][size=2]P5N7A-VM / Pentium E5200 / GeForce 9300[/td][td][/td][td]M3N78-VM / Sempron 140[/td][/tr]
[tr][td][size=2]vga2scart an Röhre / rsync gespiegeltes Foto Share[/td][td][/td][td]HDMI @ LG W2361V[/td][/tr]
[tr][td][size=2]Linux4Media Display mit HW patch gegen Geistertasten[/td][td][/td][td] [/td][/tr]
[/table][br][url=http://wiki.easy-vdr.de/index.php/Hilfe]Du brauchst Hilfe? Wir brauchen Daten!!
Zitieren
#6
Hallo itsMee,

vielen Dank fuer Deinen Rat, ein Problem ist nun geloest.
Das Incrementieren im Bereich zwischen "cat <<EOF" und "EOF"
geht mit:
Zitat:let FILE_NR="\$FILE_NR +1"

also mit zusaetzlichen Gaensefuesschen, wobei die erste Definition von "FILE_NR=0" auch im Bereich zwischen "cat <<EOF" und "EOF" liegen muss.

Fuer das 2. Problem mit dem dvgrab fehlt mir aber noch eine Idee.
So wie ich das Thema im VDR-portal verstanden habe fuehrt das Script dv3.sh selbst den Befehel dvgrab nicht aus, sondern es schreibt ein temporaere Scriptdatei, die nur 2 Befehle enthaelt:
Den, mit dvgrab, der mit dem echo geschrieben wird, und ein Komando zum loeschen dieser selbsterstellten temp. Scriptdatei.
Egal ob mit oder ohne "cd" und Pfadangabe, die temp. Scriptdatei sieht genau so aus, wie die Komandos in der Konsole selbst auch aussehen.

Bei Betrachten der entstandenen .avi-files im Hexeditor faellt aber auf, dass der Header (die ersten 0x200 Byte) mit 00 gefuellt sind, und nicht wie bei den mit getDV3.sh erstellten .avi-files Informationen enthaelt - daher auch die Fehlermeldung, dass das Format ungueltig/unbekannt sei)

Was mache ich da noch falsch ?

Gruss Michel
Produktiv-VDR:
msi K9N2G-Neo (nvidia 8200 onBoard) mit Athlon X2 4850e mit SamuraiZZ
2xNova-HDS2, DH102
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste