Brauche Hilfe für Script zur OTR-Batchdekodierung

Der Uli

Benutzer
Mitglied seit
28. Nov 2013
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Hi Stephan,

beim Arbeiten mit Cutlisten bin ich noch gar nicht angekommen, schon gar nicht automatisiert. Aber da werde ich sicher auch noch hinkommen, erst mal bin ich froh, dass das hier funktioniert.
Richtig, jetzt wissen die mit einer DS214play auch wie sie vorgehen müssen, gut das es solche Foren gibt... ;-)
Wie gesagt, noch mal Danke für Deine Mühen, durch den produzierten Fehler bin ich erst zur Möglichkeit gekommen die Lösung zu suchen. Etwas um die Ecke gedacht, "Mut zur Lücke" und etwas Glück, schon funktionierts... :D
Vielleicht gibt es ja noch jemanden, der Dir bei dem Problem mit dem Schneiden helfen kann, ich würde gern, aber das ist weit von meinen Möglichkeiten entfernt... :-( Aber wer weiß, nächstes mal kann ich mich vielleicht bei Dir revanchieren...

Dir noch einen schönen Tag!

Viele Grüße,
Patrick
 

geimist

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
3.381
Punkte für Reaktionen
148
Punkte
129
Bist du ein 'neuer' OTR-Nutzer?
Auf welchen Betriebssystem bist du denn zu Hause?
Es gibt ja einige fertige Programme für Desktopumgebungen, um die dekodierten Filme automatisch zu schneiden. Probier's mal aus ;)
 

Der Uli

Benutzer
Mitglied seit
28. Nov 2013
Beiträge
4
Punkte für Reaktionen
0
Punkte
0
Hallo Stephan,

ja ich bin neu bei OTR und nutze einen Mac. Bin jetzt gerade dabei mit Hilfe von Parallels Desktop unter Windows selber das aufgenommene zu schneiden, funktioniert auch recht gut. Werde dann sicher auch mal ein paar Cutlisten hochladen wenn es so einfach geht wie ich es mir vorstelle. :)

Gruß, Patrick
 

geimist

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
3.381
Punkte für Reaktionen
148
Punkte
129
Es gibt auch eine schöne native MAC AllInOne-Lösung: SuperOTR [KLICK]
Die kann downloaden, decodieren, in kompatible .mp4's umwandeln, Cutten und Cutlisten erstellen und zu cutlist.at hochladen. Ich bin damit sehr zufrieden. Anregungen und Ideen werden vom Entwickler gerne umgesetzt.

Zum downloaden und decodieren brauch ich das Programm zwar nicht, aber für den ganzen Rest :eek:

P.S.: Lass dich nicht von der 'Beta-Bezeichnung' irritieren. Die Grundfunktionen laufen schon seit Jahren stabil. Und obwohl ich es permanent verwende, wüsste ich nicht, was nicht funktionieren würde …
 

Sohle

Benutzer
Mitglied seit
16. Okt 2013
Beiträge
23
Punkte für Reaktionen
1
Punkte
1
N'Abend.

Ich glaube, ich weiß jetzt warum das OTR Skript manchmal abstürzt. Und zwar hängt es sich bei mir immer auf, wenn eine Cutlist umgerechnet werden muss.
Rich (BBCode):
Es wurden folgende Cutlists gefunden:

Lade die Cutlist mit der besten User-Bewertung herunter.
Die beste Bewertung ist: 5
Lade XXX_XX.XX.XX_XX-XX_XXX_XX_TVOON_DE.mpg.HQ.avi.cutlist -->okay
Überprüfe um welches Format es sich handelt --> Zeit
Ermittles Bildrate --> 50
#####Auflistung der Cuts#####
Es müssen 3 Cuts umgerechnet werden

Es gibt scheinbar Cutlisten, die nach Frames und welche die nach Zeit erstellt wurden. Wenn eine solche Cutlist als "Frame-Cutlist" vorhanden ist, dann lief das Skript nach meinen Tests bisher immer durch. Wenn es nach der Zeit erstellt wurde, schafft das Skript die Umwandlung in Frames nicht.

Meines Erachtens verursacht folgende Funktion den Fehler: function time2 (). Ich kenn mich da zu wenig aus, als das ich jetzt schon mehr wüsste. Aber vielleicht hat jemand anderes ja eine Ahnung.

Ich werde als nächstes versuchen, nur cutlists zu laden, die auf Frames basieren. Denn dann sollte ja zumindest das Skript erstmal nicht hängen bleiben.
 

Sohle

Benutzer
Mitglied seit
16. Okt 2013
Beiträge
23
Punkte für Reaktionen
1
Punkte
1
Gleich noch ein Fehler oder eine Frage...

Was macht diese Funktion und vorallem diese Zeile: "date_var=$(date -u -d @120 +%T)"?
Rich (BBCode):
#Hier wird überprüft ob date zum umrechnen der Zeit benutzt werden kann
echo -n "Überprüfe welche Methode zum Umrechnen der Zeit benutzt wird --> "
date_var=$(date -u -d @120 +%T)
if [ "$date_var" == "00:02:00" ]; then
echo -e "${blau}date${normal}"
date_okay=yes
else
echo -e "${gelb}intern${normal}"
date_okay=no
fi

Ergebnis ist bei mir immer: "Überprüfe welche Methode zum Umrechnen der Zeit benutzt wird --> date: invalid date '@120'
intern".

Vielleicht kann das Skript die Zeiten nicht umrechnen, weil die eigene Zeit nicht richtig gesetzt ist... meine Hoffnung/Vermutung.

Jemand eine Idee?
 

geimist

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
3.381
Punkte für Reaktionen
148
Punkte
129
Hallo Sohle,

super, dass du dich etwas näher damit beschäftigst und schon das Problem etwas näher eingrenzen konntest.
Ich habe leider auch keine Ahnung davon. Ich bin froh, wenn ich die Scripte 'nutzen' kann :)

Wie schon in diesem Beitrag geschrieben, habe ich das Script von hier. Eine nähere Beschreibung / Hilfe bekommt man am ehesten im OTR-Forum.

Ich suche auch noch mal nach dem Python-Script
 

Sohle

Benutzer
Mitglied seit
16. Okt 2013
Beiträge
23
Punkte für Reaktionen
1
Punkte
1
Hallo Stephan und an alle anderen User,

ich habe das Problem mithilfe von zwei "Cracks" aus dem OTR-Forum lösen können.
Fehler war, dass Zeit-Cutlisten nicht korrekt umgerechnet wurden. In der function time2 ist ein Fehler. Dort fehlen schlichtweg zwei Zeilen Code.

Hier die Funktion time2:
Rich (BBCode):
#Hier wird nun die Zeit ins richtige Format für avisplit umgerechnet, falls die date-Variante nicht funktioniert
function time2 ()
{
time=""
let cut_anzahl=$(cat "$tmp/$CUTLIST" | grep "NoOfCuts" | cut -d= -f2 | /opt/bin/tr -d "\r")
echo "#####Auflistung der Cuts#####"
if [ $format == "zeit" ]; then
let head1=1
    echo "Es müssen $cut_anzahl Cuts umgerechnet werden"
    while [ $cut_anzahl -gt 0 ]; do
#Die Sekunde in der der Cut startet
       let time_seconds_start=$(cat "$tmp/$CUTLIST" | grep "Start=" | cut -d= -f2 | head -n$head1 | tail -n1 | cut -d"." -f1 | /opt/bin/tr -d "\r")
       let ss=$time_seconds_start	#Setze die Skunden auf $time_seconds_start
       let mm=0 #Setze die Minuten auf 0
       let hh=0 #Setze die Stunden auf 0
       while [ $ss -ge "60" ]; do	#Wenn die Sekunden >= 60 sind
          let mm++ #Zähle Minuten um 1 hoch
          let ss=$ss-60 #Zähle Sekunden um 60 runter
          while [ $mm -ge "60" ]; do	#Wenn die Minuten >= 60 sind
             let hh++ #Zähle Stunden um 1 hoch
             let mm=$mm-60 #Zähle Minuten um 60 runter
          done
done
time2_start=$hh:$mm:$ss	#Bringe die Zeit ins richtige Format
       echo "Startcut= $time2_start"
       time="${time}${time2_start}-"	#Auflistung aller Zeiten
#Sekunden wie lange der Cut dauert
       let time_seconds_ende=$(cat "$tmp/$CUTLIST" | grep "Duration=" | cut -d= -f2 | head -n$head1 | tail -n1 | cut -d"." -f1 | /opt/bin/tr -d "\r")
       let time_seconds_ende=$time_seconds_ende+$time_seconds_start	#Die Sekunde in der der Cut endet
       let ss=$time_seconds_ende	#Setze die Sekunden auf $time_seconds_ende
       let mm=0 #Setze die Minuten auf 0
       let hh=0 #Setze die Stunden auf 0
       while [ $ss -ge "60" ]; do	#Wenn die Sekunden >= 60 sind
         let mm++ #Zähle Minuten um 1 hoch
let ss=$ss-60 #Zähle Sekunden um 60 runter
          while [ $mm -ge "60" ]; do	#Wenn die Minuten >= 60 sind
             let hh++ #Zähle Stunden um 1 hoch
             let mm=$mm-60 #Z#hle Minuten um 60 runter
          done
done
time2_ende=$hh:$mm:$ss	#Bringe die Zeit ins richtige Format
       echo "Endcut= $time2_ende"
       time="${time}${time2_ende},"	#Auflistung alles Zeiten
        let head1++ #neu
        let cut_anzahl-- #neu
    done
elif [ $format == "frames" ]; then
let head1=1
     echo "Es müssen $cut_anzahl Cuts umgerechnet werden"
     while [ $cut_anzahl -gt 0 ]; do
#Der Frame bei dem der Cut beginnt
let startframe=$(cat "$tmp/$CUTLIST" | grep "StartFrame=" | cut -d= -f2 | head -n$head1 | tail -n1 | /opt/bin/tr -d "\r")
           echo "Startframe= $startframe"
           time="${time}$startframe-"	#Auflistung der Cuts
#Die Frames wie lange der Cut dauert
let stopframe=$(cat "$tmp/$CUTLIST" | grep "DurationFrames=" | cut -d= -f2 | head -n$head1 | tail -n1 | /opt/bin/tr -d "\r")
           let stopframe=$stopframe+$startframe	#Der Frame bei dem der Cut endet
           echo "Endframe= $stopframe"
           time="${time}$stopframe,"	#Auflistung der Cuts
           let head1++
           let cut_anzahl--
     done
fi
echo "#####ENDE#####"
sleep 1
}

Diesen Code einfach in Zeile 929 packen und die alte function dort löschen.

Ich konnte mittlerweile gut 15 Dateien problemlos schneiden, obwohl alle mit "Zeit-Cutlisten" arbeiteten. Das oben genannte Problem scheint also gelöst. Was natürlich noch nicht funktioniert ist das framegenaue schneiden, weil kein Avidemux installiert werden kann.

Gruß Sohle
 

geimist

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
3.381
Punkte für Reaktionen
148
Punkte
129
Hallo Sohle,

das ist echt genial! Bis jetzt läuft alles fehlerfrei.
Ich habe mir jetzt noch ein Script für die automatische Umbenennung gebastelt und jetzt ist der gesamte Workflow komplett. Serien kommen per Abo mit FTP-Push auf die DS, werden da komplett bearbeitet und stehen dann als werbefreie Filme zur Verfügung.

Vielen dank, dass du auf Fehlersuche gegangen bist (das OTRcut-Script ist mir doch sehr komplex … :eek:).
 

Sohle

Benutzer
Mitglied seit
16. Okt 2013
Beiträge
23
Punkte für Reaktionen
1
Punkte
1
Gerne. Ich arbeite jetzt auch noch an einem Skript, welches mir die Dateien umbenennt. Und eines welches mir dir Dateien in die richtigen Ordner packt. Stoße da aber noch auf Schwierigkeiten, weil ich noch nicht genau weiß wie ich meine Ablage einrichten soll... Mal sehen.
 

geimist

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
3.381
Punkte für Reaktionen
148
Punkte
129

webjogi73

Benutzer
Mitglied seit
12. Mai 2010
Beiträge
81
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich versuche nach dieser Anleitung meine OTRfiles automatisch dekodiert zu bekommen. Fürs erste würde ich mich auch ohne die Berücksichtigung von cutlisten zufrieden geben. Ich denke, dass ich alles wie dort steht gemacht habe, aber nichts passiert ???? Problem ist, ich habe im Grunde keine Ahnung.....

Also, gehen wir es durch:

1. Ich habe den linux Decoder auf meine DS geladen und das Verzeichnis entpackt. Aber sonst nichts. Ist das so richtig ? Muss ich den Decoder nicht irgendwie installieren oder so ?
2. Die sh-Datei habe ich so angelegt und mehrfach kontrolliert. Diese liegt im selben Verzeichnis wie der Dekoder.....
3. Dann habe ich mit dem Terminal (ich nutze ein MacBook) eine ssh Verbindung aufgebaut und den Code
/volume1/Z_TV_Aufnahmen/otrdecoder_static/OTRbachdecodieren.sh

eingegeben und mit ENTER bestätigt. Es erschien keine Meldung oder so. Ist das richtig ?

Tja, dann habe ich die Aufgabe angelegt und gehofft, dass die itr-files dekodiert werden. Aber leider passierte nichts. Kann wer bereits aus den obogen Angaben meinen Fehler erkennen ?

Vielen Dank




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 ???).
 

geimist

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
3.381
Punkte für Reaktionen
148
Punkte
129
Hallo webjogi73,

zunächst muss natürlich der Dekoder zu deiner DS passen!
Hast du eine Atom-DS?

Ob der Dekoder funktioniert, kannst du via ssh so testen:
Rich (BBCode):
/Pfad/zum/decoder -h

Wenn jetzt nachstehende Informationen erscheinen, so ist das gut und wir schauen weiter. Welche Meldung kommt bei dir?
Rich (BBCode):
DS> /volume1/downloads/OTRkeys/otrdecoder_static/otrdecoder -h
Decoder for otrkey files.
Usage: /volume1/downloads/OTRkeys/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: .)

DS>
 

webjogi73

Benutzer
Mitglied seit
12. Mai 2010
Beiträge
81
Punkte für Reaktionen
0
Punkte
0
Hallo Stephan,

das ging ja flott und direkt Treffer versenkt. Ich bekomme ein File not Found als Antwort. Ich habe eine Diskstation DS 209 +II mit der neusten 4.2 drauf. Die 5er läuft bei mir nicht mehr....

Was bedeutet dies. Welchen Fehler mache ich da bereits ?
 

geimist

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
3.381
Punkte für Reaktionen
148
Punkte
129
Was ich dir jetzt schreibe wird dir jetzt bestimmt nicht gefallen (falls du heute einen schlechten Tag hast, einfach nicht weiterlesen …;)): Du hast in deiner DS einen PPC Prozessor. Der Decoder läuft aber mit den DSen nur auf einer Intel-CPU (Atom). Sorry, da kannst du nichts machen. Es sei denn, du hast jetzt endlich eine Ausrede, dir eine neue DS zu zulegen :D
 

webjogi73

Benutzer
Mitglied seit
12. Mai 2010
Beiträge
81
Punkte für Reaktionen
0
Punkte
0
hmmm, also ich brauche eine neue DS-Generation um in den Genuss zu kommen ? Das ist ärgerlich. Aber gut. Dann brauch ich mich jetzt erst mal nicht mit der kompletten Automatisierung zu beschäftigen und mal sehen irgendwann demnächst kommt sicher eine neue DS.

VIELEN DANK.
 

geimist

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
3.381
Punkte für Reaktionen
148
Punkte
129
Das hat weniger mit der Generation als mit der Architektur zu tun. Es gibt im groben 3 CPU-Varianten bei den DSen: ARM, PPC und x86. Der einzige Dekoder, der auf einer DS funktioniert, ist halt der für die x86 (also Atom, bzw. Core i CPUs). Es gibt auch ältere Intel-DS. Z.B. DS1010+ oder DS710+ worauf der OTRdecoder läuft. Es würde dir also nichts bringen, einfach eine neue zu kaufen - die CPU muss passen. Die 'günstigste' aktuelle dürfte die DS214play sein. Ein paar Beiträge weiter oben wurden wohl positive Erfahrungen mit dem OTRdecoder gemacht. Welche CPU verbaut ist, kann man auch hier nachlesen: http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have
 
Zuletzt bearbeitet:

webjogi73

Benutzer
Mitglied seit
12. Mai 2010
Beiträge
81
Punkte für Reaktionen
0
Punkte
0
Vielen Dank
 

Computerboss

Benutzer
Mitglied seit
10. Apr 2013
Beiträge
137
Punkte für Reaktionen
0
Punkte
0
Guten Abend,

Wie auf Seite 2 habe ich es versucht nach Anleitung alles zu machen.
Rechte wurden auch übernommen und Aufgabe Mehrmals ausgeführt jedoch passiert nichts :(
Hat jemand einen Rat für mich?
DS ist eine 412+ mit DSM 5.0 Beta

Ich habe auf Volume 3 einen gemeinsamen ordner erstellt in diesem einen Decoder unterordner einen ausgabe ordner.
Nur den Papierkorb ordner das habe ich nicht ganz verstanden.
Die CPU geht auch nicht auf über 3 % nach ausführen des Batchs per aufgaben Planung.

Hoffe jemand kann mir helfen.
 

geimist

Benutzer
Mitglied seit
04. Jan 2012
Beiträge
3.381
Punkte für Reaktionen
148
Punkte
129
log dich mal bitte via SSH auf die DS und teste das Script über die Konsole. Nur so erhältst du Fehlermeldungen mit denen wir weiterkommen.
Rich (BBCode):
/Pfad/zum/Scrip.sh