Brauche Hilfe für Script zur OTR-Batchdekodierung

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84
Hallo Zusammen,

ich bin Nutzer von OnlineTVrecorder. Die verschlüsselten aufgenommenen Sendungen (Fileextension .otrkey) bekomme ich via FTP-Push auf meine DS. Bisher musste ich die verfschlüsselten Files erst auf meinen Rechner übertragen, dort mit dem OTR-Dekoder dekodieren und dann wieder auf die DS zurückschieben. Glücklicherweise läuft der Dekoder aber auch auf meiner Intel-DS.
Mit diesem Befehl kann ich eine einzelne Sendung dekodieren:
Rich (BBCode):
/volume1/downloads/OTR/otrdecoder_static/otrdecoder -q -i /volume1/downloads/OTR/Sendungsname_.avi.otrkey -o /volume1/downloads/OTR -e Benutzername -p Kennwort
Der Befehl funktioniert sowohl über die Konsole, als auch über eine Scriptdatei.

Natürlich möchte ich den Befehl nicht immer wieder für jede neue Sendung ändern müssen, sondern es sollen alle *.otrkey-Dateien im Ordner /volume1/downloads/OTR dekodiert werden. Dafür soll wohl dieses Script von HIER (ziemlich in der Mitte) dienen:
Rich (BBCode):
#!/bin/sh
# otrmultidecoder
# Usage: otrmd files
stat=1 # DEFAULT EXIT STATUS; RESET TO 0 BEFORE NORMAL EXIT
email=deine@email-adresse.de
pass=passwort

for arg
do
         /pfad/zu/deinem/otrdecoder -i "$arg" -e "$email" -p "$pass"
done
stat=0
Wenn ich das Script aber über die Konsole so aufrufe:
Rich (BBCode):
/volume1/downloads/OTR/OTRbatchdecodieren.sh *.otrkey
kommt die Meldung: Could not open input file.

Das Script liegt im Ordner mit den zu dekodierenden Dateien.

Leider habe ich von Scripten keinerlei Ahnung.
Kann mir jemand helfen?
 

jahlives

Super-Moderator
Mitglied seit
19. August 2008
Beiträge
18.275
Punkte für Reaktionen
0
Punkte
0
Website
911-research.info
*.otrkey als Argument dürfte kaum gehen
Da würde ich so was in der Art probieren
Code:
for i in $(find /volume1/downloads/OTR/ -name "*.otrkey" -type f) ; do
 /pfad/zu/deinem/otrdecoder -i "$i" -e "$email" -p "$pass"
done
 

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84
Da kommt dann lediglich die Befehlsübersicht, die man auch mit /volume1/downloads/OTR/otrdecoder_static/otrdecoder -h erhält:
Rich (BBCode):
DS> /volume1/downloads/OTR/OTRbatchdecodieren.sh
Decoder for otrkey files.
Usage: /volume1/downloads/OTR/otrdecoder_static/otrdecoder [-h] [-v] [-i FILE|URL -e EMAIL -p PASSWORD] [-S STARTTIME] [-E ENDTIME] [-C CUTLIST] [-o DIRECTORY] [-c DIRECTORY] [-b BUFFERSIZE] [-f] [-q]
  -h            prints this screen
  -v            prints version
  -i FILE       use FILE as input file
  -e EMAIL      use EMAIL to fetch the key directly from otr
  -p PASSWORD   use PASSWORD to fetch the key directly from otr
  -o DIRECTORY  use DIRECTORY as output directory (default: .)
  -b BUFFERSIZE use BUFFERSIZE*blocksize as size for the IO buffer.
                0 disables IO buffering. (default: 1024)
  -q            don't verify input file before processing.
                If this is turned off, it is possible to decode partially downloaded
                otrkeys in the new format
  -f            force overwriting of output file

Additional parameters supported by new format:
  -i URL        use URL to fetch input from
  -S STARTTIME  decode file from STARTTIME on
  -E ENDTIME    decode file until ENDTIME
  -C CUTLIST    decode and cut file corresponding to the information in CUTLIST
  -c DIRECTORY  use DIRECTORY as cache directory for http downloads (default: .)
Die Dateien mit dem Argument *.otrkey aufzurufen war nicht meine Idee. Das hatte ich wie das Script aus dem OTR-Wiki (LINK) entnommen.
 

jahlives

Super-Moderator
Mitglied seit
19. August 2008
Beiträge
18.275
Punkte für Reaktionen
0
Punkte
0
Website
911-research.info
Du hast aber schon den Rest des Codes belassen? Die Definition der Variabeln habe ich weggelassen, die brauchst du aber natürlich schon: )
 

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84
So sieht's komplett aus:

Rich (BBCode):
#!/bin/sh
# otrmultidecoder
# Usage: otrmd files
stat=1 # DEFAULT EXIT STATUS; RESET TO 0 BEFORE NORMAL EXIT
email=meineEmail
pass=meinpasswort

for i in $(find /volume1/downloads/OTR/ -name "*.otrkey" -type f)
do
         /volume1/downloads/OTR/otrdecoder_static/otrdecoder -i "$arg" -e "$email" -p "$pass"
done
stat=0
 

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84
Klappt!

Sorry, ich hat "$i" unterschlagen. Mein Fehler.

Vielen Dank für deine Hilfe
 

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84
Ich hätte da noch eine anschließende Frage:

Wenn ich jetzt das Script starte und im Hintergrund wird gerade noch eine otrkey-Datei per ftp geladen, so kommt sich das Ganze in die Quere.
Daher möchte ich noch eine Abfrage für das Dateiänderungsdatum einfügen, frei nach dem Schema:
Rich (BBCode):
if (test $dateimodifydatum + 10 Minuten < $aktdatum) ; then
Es sollen also nur Dateien abgearbeitet werden, deren Änderungsdatum älter als 10 Minuten ist.

Geht das einfach zu bewerkstelligen?
 

jahlives

Super-Moderator
Mitglied seit
19. August 2008
Beiträge
18.275
Punkte für Reaktionen
0
Punkte
0
Website
911-research.info
das ist eigentlich nicht unbedingt nötig. find gibt eine Liste von Filenamen zurück und zwar zum Zeitpunkt des Aufrufs von find. Also nur einmal. Alles was nachher dazukommt arbeitet das Script nicht ab
**edit**
ist schon spät :)
Könnte natürlich passieren, dass find einen Filenamen erwischt der gerade am Upload ist. Da hast du recht.
Wenn der Upload nicht fertig ist wenn dieses File drankommt gibts natürlich Ärger
**edit**
 

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84
Das Problem ist, dass die Datei ja so lange 'wächst', bis die Übertragung fertig ist. Mit find würde sie sicherlich auch gefunden, wenn sie erst wenige MB groß ist …, oder?
Das Dateiänderungsdatum ändert sich natürlich stetig während der Übertragung. Erst nach dem FTP-Push bleibt es konstant.

Ich hatte jetzt dieses hier gefunden:
Rich (BBCode):
DateTime=$(stat  %y "$i")
Das gibt dann für jede Datei ungefähr so etwas aus:
Rich (BBCode):
stat: can't stat '%y': No such file or directory
  File: "/volume1/downloads/OTRkeys/Dateiname.otrkey"
  Size: 663655024       Blocks: 1296216    IO Block: 4096   regular file
Device: fd02h/64770d    Inode: 3671372     Links: 1    
Access: (0666/-rw-rw-rw-)  Uid: ( 1026/ftppublic)   Gid: (  100/   users)
Access: 2013-03-19 22:23:01.000000000
Modify: 2013-03-19 22:33:49.000000000
Change: 2013-03-19 22:33:49.000000000
Aber wie ich jetzt nur an das Modify komme und noch eine gewisse Sicherheitsdifferens von ca. 10' hinzurechne und das Ganze dann mit der aktuellen Zeit vergleiche …???


**edit**
ich sehe, du hast meinen Gedanken schon erkannt :)
**edit**
 

jahlives

Super-Moderator
Mitglied seit
19. August 2008
Beiträge
18.275
Punkte für Reaktionen
0
Punkte
0
Website
911-research.info
du musst dann nicht unbedingt ein if machen. find kann auch nach Zeitkriterien suchen
Code:
[COLOR=#333333]for i in $(find /volume1/downloads/OTR/ -name "*.otrkey" -mmin +10 -type f)[/COLOR]
 

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84
Hier noch einmal für die Nachwelt die ganze Anleitung um OTRKEYs von OnlineTVrecorder auf einer Intel-DS per Script zu decodieren (für alle die, die so wenig Ahnung haben wie ich :eek:)

1. Von dieser Seite den Decoder auf die DS laden und entpacken (Standard Decoder / Linux / statisch gelinkt). Der Speicherort ist egal, muss lediglich im Script richtig eingetragen werden.
2. Eine Textdatei anlegen (ich habe sie "OTRbachdecodieren.sh" genannt) und diesen Code einfügen und natürlich die Werte der Variablen zwischen den Anführungszeichen anpassen:
Rich (BBCode):
#!/bin/sh
# otrdecoder
# Usage: otrkey files


#------------------------- Variablen:
#OTR Benutzername:
email=""

#OTR Kennwort:
pass=""

#Pfad zu dem Decoder (die Datei "otrdecoder"):
decoder="/volume1/downloads/OTRkeys/otrdecoder_static/otrdecoder"

#Verzeichnis mit den OTRKEY-Dateien:
infolder="/volume1/downloads/OTRkeys/"

#Ausgabeverzeichnis:
outfolder="/volume1/video"

#Löschverzeichnis der Quelldateien:
delfolder="/volume1/downloads/#recycle"

#Abweichung der Dateiänderungszeit in Minuten um laufende FTP-Pushaufträge nicht zu decodieren:
timediff="10"  


#------------------------- decodieren:

for i in $(find "$infolder" -name "*.otrkey" -mmin +"$timediff" -type f)
    do
         "$decoder" -i "$i" -o "$outfolder" -e "$email" -p "$pass"
         mv "$i" "$delfolder"
    done
Die Datei habe ich gleich mit in den Ordner vom Decoder gespeichert.

3. Auf dem Rechner eine Telnet-/ SSH-Verbindung zur Diskstation aufbauen und die Scriptdatei ausführbar machen:
Rich (BBCode):
chmod +x /volume1/…Pfad/zur/OTRbachdecodieren.sh
4. Mit der neuen (DSM 4.2) Aufgabenplanung habe ich jetzt noch eine neue Scriptaufgabe angelegt (/volume1/…Pfad/zur/OTRbachdecodieren.sh), die mir stündlich alle neuen Filme automatisch decodiert

5. VIELEN DANK jahlives FÜR DIE HILFE :)


Das Schneiden anhand von Cutlists habe ich noch nicht versucht. Ich vermute, dass das nur mit dem EasyDecoder funktioniert, den ich noch nicht erfolgreich testen konnte. Evtl. ginge auch etwas mit den Scripten von HIER oder HIER. Wäre sicherlich spannend, wenn da etwas ginge (ipkg ???).
 
Zuletzt bearbeitet:

homolka

Benutzer
Mitglied seit
12. Juli 2008
Beiträge
121
Punkte für Reaktionen
0
Punkte
0
Dank Dir. Genau so was werde ich jetzt auch versuchen. Die dekodierten und vorgeschnittenen Aufnahmen wollen nicht per FTP Push kommen. Dauern die so viel länger als die anderen? Wie ist die Qualität am Ende?
 

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84
… Die dekodierten und vorgeschnittenen Aufnahmen wollen nicht per FTP Push kommen. Dauern die so viel länger als die anderen? Wie ist die Qualität am Ende?
Sorry, aber ich verstehe deine Frage nicht ganz.
Ich bekomme die *.otrkey Dateien in der Regel von dem Mirror OTR-files.de wo ich einen Spendenaccount habe. Die kommen, sobald diese auf dem Mirror sind (im Druchschnitt ca. 6-12h nach der Austrahlung - abhängig vom Format [HQ / HD]). Was meinst du mit Qualität und vorgeschnitten? Meinst du die Funktion, dass man sich die Dateien schon auf dem Mirror decodieren lassen kann? In dem Fall brauchst du meine Vorgehensweise ja gar nicht (weil ja hier direkt auf dem NAS decodiert wird). Auch das Schneiden selbst (was in meiner Methode noch nicht eingebaut ist) ändert ja nichts an der Qualtiät, da ja das Video nicht recodiert wird, sondern es werden 'nur' die nicht gewünschten Stellen in der Videodatei entfernt.
 

Schakal

Benutzer
Mitglied seit
20. April 2011
Beiträge
391
Punkte für Reaktionen
0
Punkte
0
@geimist
Mit dem Link aus 1) lande ich "nur" auf der Startseite. War das so gewollt?
 

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84

Schakal

Benutzer
Mitglied seit
20. April 2011
Beiträge
391
Punkte für Reaktionen
0
Punkte
0

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84
geh mal ein 2. Mal auf den Link - das hängt wirklich mit dem LogIn zusammen. Beim 1. klicken kommt bei mir auch die Startseite. Navigiere ansonsten über die OTR-Startseite im grauen Fußbereich der Seite zu Dekoder / Linux
 
Zuletzt bearbeitet:

geimist

Benutzer
Mitglied seit
04. Januar 2012
Beiträge
2.745
Punkte für Reaktionen
10
Punkte
84
Es liegt wahrscheinlich auch daran, dass mein Link der Website-Version "V1" entstammt. Hier der Link für die Website-Version "V2" KLICK
 
Zuletzt bearbeitet:

Kohjinsha

Benutzer
Mitglied seit
26. Februar 2013
Beiträge
89
Punkte für Reaktionen
0
Punkte
0
Hey, das ist ja eine sehr interessante Angelegenheit :)
Allerdings meine Frage: Ist die Vorgehensweise auch mit dem Easy-Decoder möglich?
Diese "statisch gelinkte"-Linux Version finde ich nur beim "normalen" Decoder..
Danke für die Antwort!