Jump to content

Interesse an Auto-Encoder Tool für DVB Media Server?


Spiritreader

Recommended Posts

Mir fiel gerade auf dass dieser Post wahrscheinlich im Plugin/Addon Forum besser aufgehoben wäre. Ist es möglich diesen nachträglich noch zu verschieben?

 

Hallo liebe DVB Community,

 

In den vergangenen 3 Jahren habe ich eine Software geschrieben (damals noch mit DVB Recording Service) die sich um die Weiterverabeitung von Videofiles kümmert. Dabei handelte es sich um mein erstes eigenes Software Projekt im Rahmen meines Informatikstudiums und hat somit einige Re-Writes hinter sich. Jetzt habe ich das Gefühl, dass die Software genug Funktionalität bereitstellt um sie vorstellen zu können. Hätte ich es damals besser gewusst wäre das Projekt komplett mit C# geschrieben , allerdings ist der wesentliche Teil mit Java 7/8 entstanden.

 

Der DVB Media Server kann logfiles schreiben, in denen viele relevante Informationen für Videofiles zu finden sind.

So steht dort zum Beispiel die Auflösung sowie das Audioformat, welches sich einigermaßen sicher bestimmen lässt.

Zudem ist Media Server in der Lage nach Abschluss einer Aufnahme eine Applikation zur Weiterverabeitung aufzurufen.

Dieses Konzept habe ich genutzt um besagte Software zu entwickeln.

 

Um dessen Funktionalität zu kurz wie möglich zusammenzufassen:

Sie besteht aus zwei Teilen. Einem Parser der sich um das Erstellen von Jobs kümmert (jedes Mal wenn Media Server eine Aufnahme beendet hat) und einen "Dienst" der die Informationen des Parsers verarbeitet.

 

Im Grunde kann die Software ein von DVB Media Server aufgezeichnetes unkomprimiertes File mit angeschalteten Logfiles auf die richtige Länge und Auflösung überprüfen, mit einem Encoder Wrapper (Handbrake oder FFMPEG) automatisch umwandeln, in einem Verzeichnis eurer Wahl ablegen und automatisch den Titel des Files festlegen.

 

Dabei ist es möglich überall (im lokalen Netzwerk oder lokal) auf Duplikate zu überprüfen um ein teures und zeitaufwändiges neu-encoden zu verhindern.

 

Des weiteren werden dann noch hilfreiche Funktionen wie

  • Audioformatvergleich für Neu-Encode,
  • Whitelists und Blacklists für Logfile Strings zum Neu-Enkodieren vorhandener Dateien,
  • Prävention von Neu-enkodierung wenn ein File gerade eben erst umgewandelt wurde,
  • Abschätzung von enkodierten Dateigrößen für Neu-Encode
  • Datenbank support für Jobs (um z.B load balancing auf mehreren Maschinen durchzuführen bei langsamen Presets).

bereitgestellt.

 

Zur Zuverlässigkeit der Software: Ich konnte diese natürlich nur selbst testen und enge Bekannte/Familie die auch den DVB Media Server benutzen miteinbeziehen.

Sie lief bisher auf 3 Rechnern über Monate hinweg reibungslos ohne feststellbare Ressource-Leaks. Ist aber so ne Sache, weil ich ja weiß wie man sie bedient und man sich nur so viele Szenarien einfallen lassen kann was alles schiefgehen könnte und sie momentan noch aktiv entwickelt wird.

 

Laut der mir vorliegenden Statistik hat diese Software in diesen 3 jahren 9969 files verarbeitet, also ist sie long-term getestet und funktional wenn sie richtig eingestellt ist.

 

Das Ganze ist enstanden weil ich es nicht mehr mit ansehen konnte dass mein Dad Batch Scripts genutzt hat um die Aufnahmen in x264 zu kodieren.

Die Software ist allerdings als faire Vorwarnung mehr für Power User gedacht und die (immer noch unvollständige) Dokumentation dafür ist recht technisch. Außerdem ist das Interface an einigen Stellen noch nicht so ganz ausgereift , lässt sich aber benutzen. Ich würde selbstverständlich auch versuchen diverse Fragen zu klären die bei der Benutzung aufkommen, kann aber keine Gewähl leisten. Ein bisschen Einarbeitung ist jedoch gefragt.

 

Da ich furchtbar schlecht im Erklären von Dingen bin hier ein paar Bilder:

https://imgur.com/a/LO2RQgX

 

Nun meine Frage: Braucht das außer mir noch irgendwer? Wenn genug Interesse da ist, würde ich das ganze hier kostenlos zur Verfügung stellen.

 

Beste Grüße,

Sam

 

Edited by Spiritreader
Link to comment

Klar an sowas besteht immer Interesse. :)

Ich hab hier auch schon genug Nerd-Kram bereitgestellt für den sich kaum einer interessiert, aber vielleicht lässt sich aus deinen Gedanken und Umsetzung ja was für den DMS/DVBViewer ableiten? Und ansonsten erfreuen sich bestimmt ein paar Benutzer daran ... ;)

Link to comment

Alles klar!

 

https://github.com/Spiritreader/Avior/releases/tag/021

 

Dann hier ein paar Setup-Instructions

Java 8 installieren (egal welches update) für Avior

mindestens dotnet 4.6.1 installieren für den Infuser

 

Software in einen beliebigen Ordner entpacken. Diesen nenne ich ab jetzt Avior Verzeichnis

 

64 bit ffmpeg binaries herunterladen und die ffmpeg.exe in den selben Ordner kopieren

https://ffmpeg.zeranoe.com/builds/

HandbrakeCLI für Windows herunterladen, in einen beliebigen Ordner kopieren und Umgebungsvariable erstellen.

https://handbrake.fr/downloads2.php

https://i.imgur.com/Qfp3uwV.png

 

Dann im DMS:

Hier "Log Dateien schreiben" aktivieren.

https://i.imgur.com/gukIAci.png

 

Eine Aufgabe erstellen und das Arbeitsverzeichnis des Ordners angeben in das extrahiert wurde angeben.

Die Infuser Executable auswählen und mit den Parametern "{SOURCE_FILE}" "{TITLE}" "{SUBTITLE}" aufrufen.

https://i.imgur.com/T76aSgM.png

 

Daraufhin kann Avior gestartet werden.

In der Hauptkonfiguration gibt es mehrere Unterpunkte die in der beiliegenden Dokumentation oder auf Github genauer erklärt werden.

 

Ich werde ein Beispiel für folgende Konfiguration bringen:

Avior soll nach Übergabe einer Aufnahme einen Encode durchführen wenn die Datei noch nicht existiert.

Avior soll nach Übergabe einer Aufnahme nach existierenden Dateien suchen, das Audioformat vergleichen und bei einem besseren Audioformat einen Re-Encode vornehmen.

Ist kein besseres Audioformat vorhanden, soll eine Schätzung durchgeführt werden ob die neue Datei kleiner wäre, würde sie kodiert werden.

Dies soll nur eintreten wenn eine Datei bereits länger als 180 Tage existiert.

Ziel-Dateien mit dem falschen Logfile Format (haben keine .log und .txt im selben Verzeichnis wie die Videodatei) sollen dabei nicht überschrieben werden.

 

Im Avior Verzeichnis können nun in der directories.cfg Ordner hinzugefügt werden in denen Videodateien liegen. Das sind die eben genannten Ziel-Dateien. Dies wird dazu verwendet um existierende Dateien zu erkennen. 

Darüber hinaus sollte ein Obsolete Parent Directory gesetzt werden. Das ist der Ordner in dem Duplikate landen wenn sie neu enkodiert wurden.

Auch das Setzen des bevorzugten Encoders ist einigermaßen wichtig wenn man Wert darauf legt.

 

Unter General kann eine maximale Dateigröße für eine Aufnahme festgelegt werden. Wird diese überschritten, findet kein Encode statt.

Maximum File Length Deviation verhindert einen Re-Encode wenn eine Film 60 Minuten lang sein sollte, aber nur 20 Minuten aufgenommen wurden.

 

Dann sollte der "Intelligent Re-Encode Mechanismus" aktiviert werden.

  • File Size Difference ist der Anteil um wie viel kleiner eine Dateigrößen Schätzung sein muss um einen Neu-Encode zu erlauben
  • IAC Accuracy ist die Genaugkeit der Audioformat Erkennung. Diese ist auf medium normalerweise recht zuverlässig, mehr Infos wie immer in der Dokumentation
  • Encoding Estimation Sample Count ist wie viele Teilabschnitte für die Dateigrößenschätzung vorgenommen werden sollen. Ich empfehle 2
  • Encoding Estimation File % ist welcher Prozentteil der Datei für Encoding verwendet werden soll. Ich empfehle 5 bei CPU encoding und 10 bei GPU encoding.
  • File Age before re-encode in days sollte auf 180 stehen, wie vorher erwähnt
  • Full-text logfile search for re-encode durchsucht logfiles von Zieldateien nach bestimmten Textabschnitten die im entsprechenden Interface Tab hinzugefügt werden können. Dies ist für die Beispielkonfiguration nicht erforderlich, aber der Vollständigkeit halber hab ich's hier mal mit angefügt
  • Enable legacy logfile handling ist für den Zweck gut, um alte Logfiles die im .filetype.log format des alten DVB Recording Service erstellt wurden lesen zu können.
  • Auto Overwrite files using legacy logs macht etwas mehr als das. Da Avior davon ausgeht dass die Logfiles bei den Zieldateien vorhanden sind, bevorzugt dies bei einer bereits existierenden Datei die neue Aufnahme

Hier noch ein Beispiel wie die Konfiguration dann aussehen könnte: https://i.imgur.com/iq1flct.png

Dann auf Apply klicken um zu speichern.

 

Im Resolutions Tab wird es nun interessant. Hier liegen die Encoder Konfigurationsdateien und werden einer Auflösung zugeordnet. Mit Add kann eine neue hinzugefügt werden. Wählt euren preferred Encoder aus und gebt eine Auflösung und einen beliebigen Tag an.

Zum Beispiel hd mit der Auflösung 1280x720 für den Encoder ffmpeg.

Danach müsste der Tag in der Liste auftauchen. Mit Apply speichert ihr diese Auflösung und eine Konfigurationsdatei wird erstellt.

 

Mit einem Klick auf "show" wird ein Editor für diese geöffnet (wenn Apply gedrückt wurde) und diese enthält basic instructions für das Setzen der Konfiguration.

Im Prinzip muss ein enc_path gesetzt werden.

Für einen Zielordner für Encodes zum beispiel

enc_path D:\Videos\

Das format ist hierbei wichtig, vor allem der Backlash (\) am Ende.

 

Darunter könnte ihr dann eure ganz normale ffmpeg (oder wenn ihr handbrake verwendet habt eben das) Konfiguration platzieren.

Ein Hashtag wird ignoriert. z.B für unsere Beispielkonfiguration

-c:v hevc_nvenc
#-filter:v hqdn3d=1:1:1:1
-level 4.1
-r 25
-rc vbr_hq
-qmin 16
-qmax 23
#-rc constqp
#-qp 21
-tier main
-acodec copy

ffmpeg verfügbt über Input und Output Optionen. Wenn ihr wisst was das bedeutet, ist es hilfreich zu wissen dass mit dem PI Schlüssel ein Parameter vor -i aufgerufen wird.

z.B

PI -r 30

ruft dann ffmpeg -r 30 -i <path> <parameters> auf.

 

Sobald die Encoder Konfiguration gespeichert wurde funktioniert Avior bereits.

 

Der Database Tab ist für Load Balancing da. Wenn euch eine MongoDB zur Verfügung steht, habt könnt ihr mit der Connection URL die Adresse (ohne Mongodb protokoll, nur die Adresse) angeben. Mehr Info dazu in der Dokumentation.

Vorteile die entstehen wenn die Datenbank genutzt wird ist einfaches Job Management in der Job Liste sowie die Möglichkeit Jobs zwischen Rechnern hin und herschieben zu lassen sowie umzuverteilen. Infuser unterstützt ebenfalls Database Jobs und verteilt dann gleichmäßig nach Priorität und Auslastung Jobs auf mehrere PCs.

 

Das erfordert natürlich, dass die Netzwerkpfade in Windows auf dem DMS Rechner und den Clients entsprechend konfiguriert (Netzwerklaufwerk) wurde oder Symlinks auf Network Shares gesetzt werden, dass der Zugriff auf jene Dateien dann auch von jedem Rechner aus funktoniert.

Zum Beispiel ist bei mir das Laufwerk I: in Windows auf eine Netzwerkfestplatte gemappt die im Server steckt auf dem DMS läuft. Avior enkodiert dann wiederum ins Netzwerk auf den Server zurück. Es gibt da allerdings mehrere Möglichkeiten das zum Laufen zu bringen die ich nennen kann wenn erwünscht. In den Screenshots die ich in meinem Original Posts gezeigt habe ist auch zu sehen wie mehrer Jobs in der Datenbank auf verschiedenen Rechnern aktiv waren.

 

Das war's soweit mit der Konfiguration.

So sieht dann der Output von Avior aus am Ende: https://i.imgur.com/whNxUR3.png

Ich kann nur nahelegen sich die Dokumentation zu lesen. Ich kann keine Gewähr leisten oder Support garantieren.

Ich werde aber mein bestes tun um aufkommende Fragen zu beantworten.

Edited by Spiritreader
Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...