synOTR synOTR - scriptsammlung für OTR-Workflow auf Synology Diskstation

jensb

Benutzer
Mitglied seit
30. Dez 2016
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Ok, kurzes Update von mir. Erstens: Es gibt seit gestern oder so eine aktualisiertes Makefile im avcut Repository, welches auch Optionen für Cross Compiling und statisches Kompilieren beinhaltet. (vllt. liest der Autor des Scripts ja mit? :))

Ich bin jetzt etwa genauso weit per Cross Compiling gekommen wie du auf der DS direkt. Habe direkt das DSM Toolchain von Synology verwendet. Ne einfache Hello-World Anwendung ging damit auch recht einfach über die Bühne :)

x264 + FFMPEG habe ich auch hinbekommen. Mein Code (der wichtige config Part):

Rich (BBCode):
#x264
export CCPREFIX="/usr/local/arm-unknown-linux-gnueabi/bin/arm-unknown-linux-gnueabi-"
./configure --host=arm-none-linux-gnueabi --target=arm-none-linux-gnueabi --build=i686-pc-linux --enable-static --cross-prefix=${CCPREFIX} --prefix=/Desktop/testcc/build 

#ffmpeg
pkg_config=$(which pkg-config) PKG_CONFIG_PATH=../../build/lib/pkgconfig ./configure --enable-cross-compile --cross-prefix=${CCPREFIX} --arch=armel --target-os=linux --disable-programs --disable-hwaccels --disable-indevs --disable-outdevs --disable-devices --enable-static --disable-zlib --disable-xlib --disable-sdl --disable-libxcb --disable-bzlib --disable-libxcb-shm --disable-libxcb-xfixes --disable-libxcb-shape --disable-iconv --enable-gpl --enable-libx264 --disable-encoder=tiff --disable-decoder=tiff --prefix=../../build --extra-cflags="-I../../build/include" --extra-ldflags="-L../../build/lib" --extra-libs=-ldl

Beim kompilieren von avcut kam auch erst die Meldung dass er die lib..datei nicht finden konnte. Mit CPPFLAGS und LDFLAGS ging es dann aber.

Aufruf:
Rich (BBCode):
parallels@ubuntu:~/Desktop/testcc/src/avcut$ export CPPFLAGS="-I../../build/include/libavcodec -I../../build/include/libavdevice -I../../build/include/libavfilter -I../../build/include/libavformat -I../../build/include/libavutil -I../../build/include/libpostproc -I../../build/include/libwresample -I../../build/include/libswscale -I../../build/include"

parallels@ubuntu:~/Desktop/testcc/src/avcut$ export LDFLAGS="-L../../build/lib"

parallels@ubuntu:~/Desktop/testcc/src/avcut$ make static

Den Fehlercode habe ich mal in einen Gist kopiert: https://gist.github.com/anonymous/3fab054c86be8266ddab1c57e232547d

Ab da wird's kompliziert :D
Und weiter bin ich bisher leider auch nicht gekommen :(
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.526
Punkte für Reaktionen
1.363
Punkte
234
Bei mir erzeugte es auf meiner DS214 "Illegal instruction". Der Entwickler weiß Bescheid, aber auf seinem Raspi war der Test erfolgreich. Interessant wäre ein Test auf deiner DS116.

Ich hatte mich schon riesig über die Mail von Mario mit dem ARM-avcut gefreut …
 

jensb

Benutzer
Mitglied seit
30. Dez 2016
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Werde ich gleich mal probieren :)
 

jensb

Benutzer
Mitglied seit
30. Dez 2016
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Hab es probiert. Scheint nicht zu funktionieren.

Wenn ich avcut direkt aufrufe über ssh bekomme ich auch "illegal instruction"
Rich (BBCode):
jens@JENS_DS116:~/test/synOTR23/app/binARMv7l$ ./avcut --version
Illegal instruction

Wenn ich das ganze Skript laufen lassen hagelt es aber weitere Fehlermeldungen (Probelme mit bc?) ...habe vorher immer version 2.1 benutzt da ging es eigtl...:

Rich (BBCode):
	SCHNEIDE: ==> Frequency__The_Edison_Effect_17.01.04_21-00_uswpix_60_TVOON_DE.mpg.HQ.avi

./synOTR.sh: line 591: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Führe Suchanfrage anhand der Dateigröße bei "cutlist.at" durch ---> okay
	1 Cutlist/s gefunden.

Die beste Bewertung ist: 5
Lade Frequency__The_Edison_Effect_17.01.04_21-00_uswpix_60_TVOON_DE.mpg.HQ.avi.cutlist --> okay
Überprüfe um welches Format es sich handelt --> Zeit
Überprüfe die Framerate des Films --> Ermittelte Bildrate [aus ffprobe]:  30000
####Auflistung der Cuts####
Es müssen 6 Cuts für avcut umgerechnet werden.
./synOTR.sh: line 942: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Startcut:  Sekunden
./synOTR.sh: line 946: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
./synOTR.sh: line 947: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Endcut:  Sekunden
./synOTR.sh: line 942: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Startcut:  Sekunden
./synOTR.sh: line 946: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
./synOTR.sh: line 947: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Endcut:  Sekunden
./synOTR.sh: line 942: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Startcut:  Sekunden
./synOTR.sh: line 946: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
./synOTR.sh: line 947: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Endcut:  Sekunden
./synOTR.sh: line 942: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Startcut:  Sekunden
./synOTR.sh: line 946: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
./synOTR.sh: line 947: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Endcut:  Sekunden
./synOTR.sh: line 942: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Startcut:  Sekunden
./synOTR.sh: line 946: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
./synOTR.sh: line 947: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Endcut:  Sekunden
./synOTR.sh: line 942: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Startcut:  Sekunden
./synOTR.sh: line 946: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
./synOTR.sh: line 947: /var/services/homes/jens/test/synOTR23/app/binARMv7l/bc: No such file or directory
Endcut:  Sekunden
####ENDE####

Übergebe die Cuts an avcut

	Die Schnittpunkte befinden sich

avcut muss einen Fehler verursacht haben.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.526
Punkte für Reaktionen
1.363
Punkte
234
Ja, mit bc hatte ich auch schon so meine Probleme. Ich weiß nicht nach welchem Update, da kam es beim Aufruf von bc zu einem "Segmentation fault". Da habe ich es mir auf der DS214 selbst kompiliert. Nach dem Update auf DSM6.1RC kommt es jetzt mit der Version zu einem "Segmentation fault". Ich weiß nicht, was ich da falsch mache, oder wie man das umgehen kann …

Anbei mal beide Version (Endung .pdf entfernen und entpacken).
Anhang anzeigen bc_DSM6.1.zip.pdf
Anhang anzeigen bc_DSM6.0.zip.pdf
 

jensb

Benutzer
Mitglied seit
30. Dez 2016
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
ok, danke, werde ich morgen oder übermorgen mal ändern und sehen ob es dann geht. Heute schaffe ich es nicht mehr.

Bin übrigens beim kompilieren noch weitergekommen :D
Die Lösung war die Datei time.h im build-Ordner von libavutils in time_.h umzubennnen, sodass die nicht verwendet wird. Dann ging es mit "PCFLAGS='--static' CFLAGS='-static' LDFLAGS='-static' make static" (wobei CFLAGS z.b. auch im makefile schon gesetzt sind).
Endete bei mir dann mit Fehlern wie:

"/usr/local/arm-unknown-linux-gnueabi/bin/../lib/gcc/arm-unknown-linux-gnueabi/4.9.3/../../../../arm-unknown-linux-gnueabi/bin/ld.bfd: cannot find -lavcodec"

Und der Fehler ist auf den cross compiler zurückzuführen. Müsste auf deiner DS also direkt durchlaufen. *Müsste* ... :D Aber vllt. hilft uns ja Mario noch durch eine neue avcut arm Version das Problem direkt zu lösen :)
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.526
Punkte für Reaktionen
1.363
Punkte
234
Ich habe dir ein PN geschickt.

Mario hat mir auch nochmal geschrieben:
Ich benutze Gentoo Linux, das nimmt einem da viel Arbeit schon ab,
daher wird das mit einem Guide wieder schwierig.

Bei den CPUs fällt mir erstmal kein wesentlicher Unterschied auf.
Die haben ja i.d.R. mehr Features als ein RPi. Habt ihr auf den
Maschinen irgendwelche Debugging-Möglichkeiten? GDB vielleicht?
Steht eventuell noch was im Kernel-Log zu dem Instruktionsfehler?

Der erste Fehler bei jensb sieht nach nem Problem mit der Toolchain
aus:

/usr/local/arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi/sysroot/usr/include/bits/stat.h:72:21: error: field ‘st_atim’ has incomplete type
struct timespec st_atim; /* Time of last access. */

struct timespec wird in time.h bereitgestellt und sollte von der stat.h
selbst eingebunden werden. Das liegt nicht an avcut. Danach kommen nur
Warnings, die an einer zu neuen ffmpeg-Version liegen könnten. Ich
benutze noch ffmpeg-2.8.6 sowie x264-0.0.20160712. Eine der früheren
ffmpeg-3 Versionen müsste auch noch gehen, neuere hab ich nicht
getestet.

Gruß,
Mario
 

jensb

Benutzer
Mitglied seit
30. Dez 2016
Beiträge
10
Punkte für Reaktionen
0
Punkte
1
Gute Neuigkeiten, nach fast einer Woche Cross-Compiler Crashkurs habe ich es endlich hinbekommen :cool:

Habe jetzt die von monarc gepachte Version von avcut genommen und ffmpeg 2.8.6 (weil auch Mario diese Version benutzt)
Damit läuft der Code durch und die avcut funktioniert auch auf meiner DS 116.
Beim Compilieren gibt es noch zwei Warnungen, denke aber die kann man ignorieren, heißt wohl nur dass spezifische Dateien auf der DS vorhanden sein müssen:
Rich (BBCode):
../../build/lib/libx264.a(opencl.o): In function `x264_opencl_load_library':
opencl.c:(.text+0x7c): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
../../build/lib/libavformat.a(rtpproto.o): In function `rtp_resolve_host':
/src/ffmpeg/libavformat/rtpproto.c:138: warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

Habe den Fork von monarc nochmal geforkt :rolleyes: und noch eine Anleitung hinzugefügt, wie ich es gemacht habe. Siehe hier:
https://github.com/jensb89/avcut/blob/master/HOWTO_Compile_for_Synology_NAS.MD

Damit soltle es auch für zukünftige Versionen und auch für andere Arhcitekturen funktionieren.
Die ersten Tests mit neuster ffmpeg Version + neuster avcut Versionen führten zu Videos mit Bildfehlern. Ob das jetzt an den Versionen lag oder irgendwas anderes beim Ausprobieren schief gegangen ist kann ich nicht sagen, ist aber ja auch erstmal egal :D
Mit der ffmpeg 2.8.6 und der avcut Version von monarc ging es zumindest

EIne typische Folge mit 45 Minuten zu schneiden dauert übrigens eta 15-20 Minuten.

Ich habe allerdgins noch große Probleme mit bc. Deine Version zeigt einen "segmentation fault" error. Und damit das Schneiden überhaupt ging habe ich bc komplett rausgenommen. Wofür genau braucht man das? Nur zum runden der Zahlen oder? Kann man das nicht auch anders machen? Habe jetzt z.B. Zeile 942 geändert in:
Rich (BBCode):
time_seconds_start=$(cat "$tmp/$CUTLIST" | grep "Start=" | cut -d"=" -f2 | head -n$head1 | tail -n1 | cut -d"." -f1 | /usr/bin/tr -d "\r")
Damit geht es erstmal, keine Ahnung wie ungenau der Schnitt dabei wird? Jedenfalls weniger als eine Sekunde denke ich mal :)

@Stephan: ich schicke dir gleich noch die avcut Datei zum testen per PM
 

toller

Benutzer
Mitglied seit
06. Feb 2014
Beiträge
172
Punkte für Reaktionen
8
Punkte
18
Gibt es eigentlich eine Möglichkeit, Synotr bei Bedarf mit einer anderen Cutliste schneiden zu lassen?
Hintergrund: Doppelfolgen von Serien werden meistens mit Cutlisten geschnitten, die nach Teil 1 abschneiden. Bei cutlist.at liegen aber auch andere bereit.

Im Script habe ich dazu nichts gefunden.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.526
Punkte für Reaktionen
1.363
Punkte
234
In den aktuell veröffentlichten Releases gibt es dafür noch keine Möglichkeit. In der nächsten Version ist es aber schon eingebaut. Ich schicke dir noch eine PN.

Hier die Releasenotes für synOTR 2.4 Beta (sobald avcut auf ARMv7 läuft):
# 2.4
# IMPLEMENTIERUNGEN:
# - manuelle lokale Cutlists verwendbar (gelegt in den Decodierordner […/_decodiert/ ] und gleicher Titel / Dateiname wie Film mit zusätzlicher Dateiendung *.cutlist - Cutlisten findet ihr hier: http://cutlist.at)
# - Cutlist-Infos erscheinen im LOG (Fehler [Ende fehlt, EPG-Error] …)
# - Es erfolgt jetzt ein Reindexing des Zielordners für die VideoStation / Mediaserver, sofern mindestens ein Film erstellt wurde
# - Der Titel für Serien wurde für die VideoStation optimiert (Serienname.Season.Episode Episodentitel …)
# - optionales endgültige Löschen der Quelldateien möglich (benötigt die Variable endgueltigloeschen="on" oder ="off" in der Konfiguration.txt)
# BUGFIXES:
# - Korrektur der FPS-Berechnung (z.B: 29.97 bei englischsprachigen Sendern [NTSC-Format])
# - Korrektur der Berechnung der Zeitstempel für avcut (Schnitt war immer um 1 Frame verschoben)
# - dank JensB und Mario Kicherer jetzt mit Smartrendering (framegenaues schneiden) für ARMv7
 

toller

Benutzer
Mitglied seit
06. Feb 2014
Beiträge
172
Punkte für Reaktionen
8
Punkte
18
Vielen herzlichen Dank für die PN, Stephan!

Ich bin immer wieder fasziniert, wie du das alles so super hin bekommst. Die 2.4 Beta läuft auf meiner 716+II wunderbar, auch wenn die CPU manchmal auf 90% hochschnellt...
Ein kleiner Film mit ursprünglich 900MB wird in 15-20 Minuten decodiert, auf ein anderes Volumeverschoben, umbenannt, geschnitten und von .avi in .mp4 Format umgewandelt.

Die neue Möglichkeit, alternative Cutlisten zu benützen, läuft wunderbar. Wichtig dabei vielleicht noch, dass nicht nur der Dateiname, sondern auch die Endung (avi...) in den neuen Dateinamen "*.cutlist" angegeben werden muss:
"Film_16.05.04_22-25_ZDF_145_TVOON_DE.mpg.HQ.avi.cutlist"


Grüßle
Jürgen
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.526
Punkte für Reaktionen
1.363
Punkte
234
Ja, ich meinte den vollständigen Dateinamen. Sollte ich vielleicht noch extra dazuschreiben.
Das framegenaue schneiden mit avcut benötigt (aufgrund der Multicore-CPU-Auslastung für die h264 Encodierung) sehr viel Rechenleistung. Hier könnte man beim Kompilieren von avcut sicherlich auch die Hardwarebeschleunigung nutzen, aber wir wäre ja ersmal froh, wenn es überhaupt mal auf ARMv7 funktioniert…
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.526
Punkte für Reaktionen
1.363
Punkte
234
Hallo Leute,

JensB aus dem Forum und Mario Kicherer (Entwickler von avcut) haben sich die letzten Tage ins Zeug gelegt um eine (bzw. mehrere) avcut-Version für ARMv7 Geräte zur Verfügung stellen zu können.
Auf den Geräten DS214 und DS116 konnten wir die Versionen nur mit gemischten Erfolg testen.
Daher wäre es jetzt wichtig zu wissen, auf welchen Geräten welche Version funktioniert.

Kurze Rede: Ich brauche eure Hilfe.

Wer hat eine ARMv7 DS (das sind die aktuellen ARM-Geräte ab ca. 2014) und Lust, das Smartrendering / framegenaue Schneiden auf seinem Gerät auszuprobieren?

Ladet euch bitte das Archiv herunter: synOTR_2.3_BETA_ARMv7_Smartrendering_TEST.7z
Eine Anleitung / Instruktionen sind in einer Textdatei enthalten. DSM 6.0 ist sicherlich die Mindestversion (oder ein expliziter Aufruf über eine nachinstallierte bash "bash /pfad/synOTR.sh" geht wahrscheinlich auch mit DSM 5.2).


Zeitaufwand ca. 5-10 Minuten (ohne Schnittzeit)


Vielen Dank :eek:
 
Zuletzt bearbeitet:

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.526
Punkte für Reaktionen
1.363
Punkte
234
Hallo zusammen!

bzgl. framegenauen Schneiden auf ARM-Geräten kann ich endlich Vollzug melden. Vielen Dank an jensb und Mario Kicherer!
Bitte testet und meldet Fehler (besonders auf ARM- und i686-Geräten). Von framegenauen Schneiden auf i686-Geräten (z.B. DS214play) habe ich noch keine Rückmeldung.

Version 2.4 UNIVERSAL [AC3-RC] für 32/64bit x86 & ARMv7 [2017-01-21]

Verbesserung der Version 2.4:
  • dank JensB und Mario Kicherer jetzt mit Smartrendering (framegenaues schneiden) für ARMv7 sowie i686 (also alle Plattformen, die synOTR unterstützt)
  • manuelle lokale Cutlists verwendbar (gelegt in den Decodierordner […/_decodiert/ ] und gleicher Titel / Dateiname wie Film mit zusätzlicher (zu ….avi) Dateiendung *.cutlist - Cutlisten findet ihr hier: http://cutlist.at)
  • Cutlist-Infos erscheinen im LOG (Fehler [Ende fehlt, EPG-Error] …)
  • Es erfolgt jetzt ein Reindexing des Zielordners für die VideoStation / Mediaserver, sofern mindestens ein Film erstellt wurde
  • Der Titel für Serien wurde für die VideoStation optimiert (Serienname.Season.Episode Episodentitel …)
  • optionales endgültige Löschen der Quelldateien möglich (benötigt die Variable endgueltigloeschen="on" oder ="off" in der Konfiguration.txt)
  • Korrektur der Berechnung der Zeitstempel für avcut (Schnitt war immer um 1 Frame verschoben)
  • Korrektur der FPS-Berechnung (z.B: 29.97 bei englischsprachigen Sendern [NTSC-Format] / betrifft nur die MP4-Konvertierung)

Geänderte Dateien:
  • synOTR.sh
  • app/binARMv7l/avcut

Eure angepasste Konfiguration.txt könnt ihr behalten. Für die volle Funktionalität könnt ihr aber die folgende Zeile ergänzen:
endgueltigloeschen="off" # on => alle Quelldateien endgültig löschen / off => Papierkorb verwenden (Pfad siehe oben: OTRkeydeldir)


! ! ! ACHTUNG ! ! !
Auf schwachen DSen kann das Schneiden sehr lange dauern.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.526
Punkte für Reaktionen
1.363
Punkte
234
Noch ein Nachtrag:

  • Auf Geräten mit ARM Armada 370 CPU (z.B. DS214se, DS115j …) funktioniert das Decodieren laut Rückmeldung offensichtlich nicht. Vermutlich liegt es an einer inkompatiblen libcurl.so
  • zum framegenauen Schneiden werden für HQ-Filme mindestens 512 MB installierter RAM benötigt, für HD-Filme 1 GB. Diese Anforderung werde ich in der nächsten Version mit einem Fallback auf die alte Schnittmethode fest implementieren. Das Ganze machst sonst keinen Sinn, da die ganze DS ausgebremst wird. (Ich habe auf der DS214 mit 512 MB RAM einen HD-Film zu schneiden versucht. Avcut musste ich dann nach 2 Stunden per Shell beenden, weil die DS kaum noch bedienbar war).
 

hvkls

Benutzer
Mitglied seit
23. Dez 2012
Beiträge
463
Punkte für Reaktionen
0
Punkte
22
Probier mal "nice -n 19 /pfad/zu/befehl"; aber das macht das Ganze natürlich auch langsamer.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.526
Punkte für Reaktionen
1.363
Punkte
234
Danke für den Tipp. Kann ich versuchen.
Es war halt so, dass die DS214 einen vollen RAM hatte, und das Schnittprogramm avcut gerade mal mit ca. 3-5% CPU-Leistung zum rechnen kam. Der Rest war Wartezeit. Avcut benötigt gerade bei höheren Auflösungen mehrere hundert MB RAM.

EDIT:
avcut läuft schon nur mit nice -n 15

EDIT2:
Nochmal mit nice -n 19 versucht, aber es bringt leider nichts. Auf meiner DS716+ benötigt der avcut-Prozess bei einem 720p HD-Video ca. 400 MB RAM.
 
Zuletzt bearbeitet:

neuer

Benutzer
Mitglied seit
10. Jun 2011
Beiträge
13
Punkte für Reaktionen
1
Punkte
1
Hi Stefan,

coole Sache hast du da am Laufen. Ich bin gerade dabei OTR für mich auszutesten, da kommt mir das hier wie gerufen.
FTP Push ist schon eingerichtet, und die Tage werde ich dann dein Skript an meiner DS116 ausprobieren.
Liegt die Anleitung in jedem deiner geposteten Zipfiles bei?

Gruß Markus
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat