Anforderungen an Filmstarter

  • Ich habe die Logik in meinen MovieManager so gekapselt, dass ich sie problemlos aus einem anderen Kontext heraus nutzen kann. Ich habe einen Prototypen entwickelt, der direkt einen Film samt Analyse und Auswertung von Metadaten starten kann. Den Prototypen könnte man also beliebig irgendwo einbinden oder ihn direkt aus dem Explorer starten, wenn er mit den Dateiendungen der Filme verknüpft ist.


    Das sind die Features bisher:

    • Analyse von Seitenverhältnis (AspectRatio-Detector), Bildrate usw. vor dem Filmstart
      • Ablegen dieser Informationen am Film für schnelleren Start in der Zukunft
    • Senden der Pan&Scan-Parameter für eine konstante Bildhöhe (CIH). Unter Berücksichtigung von:
      • Seitenverhältnis des Panels
      • Anamorphot
      • Seitenverhältnis der Leinwand
      • Verschieben, wenn das Seitenverhältnis des Films größer als das der Leinwand ist
    • Ansteuerung von Aktoren, wie z.B. einer Maskierung oder Lens Memory
    • Ändern der Refreshrate (und Auflösung) vor dem Filmstart und danach (inklusive Wartezeit für HDMI-Synchronisation des Projektors)
    • Alles über Dialog konfigurierbar, so dass bisher nur der Film als einziger Parameter notwendig ist



    Nun meine Frage: gibt es generell Interesse an sowas oder braucht das außer mir keiner? Und wenn ja, welche Anforderungen hättet ihr?

  • Wow, schickes Werkzeug! Leider habe ich das meiste schon auf anderen Wegen gelöst (ARD hat schon alle Infos abgelegt, Aktoren werden per OpenHAB angesteuert).


    D.h. Du nutzt den Player, um das Bild vorzuverzerren? Ist die Bildqualität dadurch besser, als wenn der Projektor dieses vorverzerrt?

  • Sehr cooles Tool hast du da gebaut, wie funktioniert die Einbindung anhand der Dateiendung? Anstatt des Players wird dann das Tool gestartet, führt alle möglichen Sachen aus und das Tool startet dann den Player?


    Ich starte den Film in MPC-HC immer direkt über Windows, ich mag den Umweg über z.B. Kodi nicht so gerne.

    Nach dem Filmstart warte ich dann immer, welches Format er hat und weise dann meine Alexa an, dem Lightmanager mitzuteilen welches Bildformat er dem Beamer über Infrarot (Epson 9400) geben soll.


    Dementsprechend fände ich eine Ansteuerung über einen HTTP Request interessant, dann könnte das Tool dem Lightmanager direkt darüber mitteilen, was er dem Beamer sagen soll.

    So sähe ein typischer HTTP Request für Infrarot aus, den ich im Moment über meine Smart Home Steuerung an den Lightmanager schicken kann, der hier z.B. um bei meinem AVR die Quelle auf PC zu wechseln.

    Code
    http://192.168.x.x/control?cmd=off,typ,ir,seq,1,dta,160,AC,19,13,18,3F,18,14,19,13,18,3F,19,13,18,3F,19,3F,18,3F,19,13,17,40,18,40,18,13,19,3F,18,3F,19,13,17,14,19,13,19,3F,18,3F,18,3F,19,13,19,13,18,3F,19,3F,18,3F,18,13,19,13,19,13,19,3E,19,3F,17,14,19,5E3,15F,57,18&id=56


    Ein Funk Befehl sieht z.B. so aus:

    Code
    http://192.168.x.x/control?cmd=on,typ,it,did,974500,aid,18,acmd,1,seq,6,smk,9,1&id=18


    Der Code wird so direkt fertig vom Lightmanager ausgespuckt.

    Der Lightmanager ist ja schon öfter in Heimkinos in gebrauch, könnte mir also vorstellen, dass das noch für andere interessant sein könnte.


    Falls das möglich ist, bin ich auf jeden Fall interessiert :respect:

    Gruß Jan

  • FoLLgoTT mein Interesse hast du, Nils. Ich verwende derzeit die Kombination MPC-BE mit TinyMedia an einem CIH Setup wie du weißt.

    Wie schaltest du dann den Zoom um?



    Wow, schickes Werkzeug! Leider habe ich das meiste schon auf anderen Wegen gelöst (ARD hat schon alle Infos abgelegt, Aktoren werden per OpenHAB angesteuert).

    Wie wertest du das aus und wer steuert ObenHAB an?


    OpenHab habe ich übrigens auch im Einsatz. Ist ja per REST-API leicht anzusteuern und wäre wohl problemlos für den MovieStarter machbar. :)



    Sehr cooles Tool hast du da gebaut, wie funktioniert die Einbindung anhand der Dateiendung? Anstatt des Players wird dann das Tool gestartet, führt alle möglichen Sachen aus und das Tool startet dann den Player?

    Genau. Der MovieStarter bekommt derzeit als Parameter die Filmdatei übergeben, analysiert, fährt die Maskierung an usw. und startet dann den konfigurierten Player. Nach dem Beenden setzt er wieder alles zurück.


    Dementsprechend fände ich eine Ansteuerung über einen HTTP Request interessant, dann könnte das Tool dem Lightmanager direkt darüber mitteilen, was er dem Beamer sagen soll.

    So sähe ein typischer HTTP Request für Infrarot aus, den ich im Moment über meine Smart Home Steuerung an den Lightmanager schicken kann, der hier z.B. um bei meinem AVR die Quelle auf PC zu wechseln.

    Das sollte auch machbar sein. Derzeit ist allerdings nur vorgesehen, dass das Seitenverhältnis per HTTP gesendet wird. Also z.B. die Zeichenkette "2.4:1". Was derzeit fehlt, ist, dass man die Befehle pro Seitenverhältnis vordefiniert und der MovieStarter dann den richtigen Aufruf macht. Dein Befehl enthält das Seitenverhältnis als Zahl ja gar nicht. Ich denke, das wäre für dich genau das Richtige.


    Alternativ kann der MovieStarter jetzt schon ein Event in EventGhost auslösen. Das Event sieht dann z.B. so aus:


    "HTTP.MovieManager.AR_2.40"


    Darauf kann man reagieren und im Prinzip alles machen. EventGhost unterstützt Python-Scripts, die auch HTTP, TCP oder UDP senden können. Man kann den String parsen und für verschiedene Seitenverhältnisse verschiedene Dinge auslösen. Da wäre man komplett frei. Das habe ich auch jahrelang so betrieben. :)

  • Die Frage hatte ich übersehen:

    D.h. Du nutzt den Player, um das Bild vorzuverzerren? Ist die Bildqualität dadurch besser, als wenn der Projektor dieses vorverzerrt?

    Ja, genau. Der Player (z.B. MPC-HC) übergibt die Bildposition und die Zoomfaktoren an madVR und der wendet sie dann an. Das heißt, die Qualität der Skalierung hängt von dem in madVR eingestellten Algorithmus ab. Bei MPV natürlich genauso. Also ja, im Zweifelsfall lasse ich lieber den Renderer/Player skalieren als den Projektor. Und vor allem ist es viel einfacher anzusteuern, da man beim Start nur diese Dezimalwerte übergibt und das war's. Und das eben komplett stufenlos. Alle Zwischenwerte sind möglich.


    Dazu kommt ja noch, dass die Player bei mir noch die Entzerrung der gekrümmten Leinwand vornehmen. Auch das passiert per Shader in der Grafikkarte.

  • So, der _ARxxx-Tag im Dateinamen des AspectRatio-Detectors wird jetzt auch berücksichtigt. :)


    Habt ihr Anwendungsfälle, bestimmte Dinge nur beim Start oder nur beim Beenden auszuführen?


    Ich vermute, es wird für einige notwendig sein, dass man Bedingungen formulieren können muss, z.B.

    • wenn Seitenverhältnis > 1,78 dann führe Regel aus

    Damit könnte man feste Befehle zu bestimmten Bedingungen ausführen. Also Lens Memory ansteuern, Lampenmodus bei HDR wechseln oder auch sowas wie der lange Code von wobix.

  • Zitat

    Wie wertest du das aus und wer steuert ObenHAB an?


    Die Infos von ARD habe ich mittels TinyMediaManager im Dateinamen abgelegt, also [AR***] ergänzt.


    In OpenHAB habe ich eine Regel, die auf einen Wechsel des Kodi Mediafiles reagiert, die AR im Dateinamen auswertet und Bildposition/Zoom und Verzerrung im Projektor sowie den Anamorphoten (vor den PJ fahren bzw. wegfahren) steuert.

  • Zitat

    Der Player (z.B. MPC-HC) übergibt die Bildposition und die Zoomfaktoren an madVR und der wendet sie dann an.

    Ah, okay, das ist dann nur mit Kodi natürlich nicht so ohne weiteres machbar. Dann melde ich hiermit auch Interesse an ;)

  • Ich bin gerade dabei, Bedingungen zu implementieren. Ich denke, das ist der richtige Weg.


    Hier noch mal ein umfangreiches Beispiel, was der MovieStarter machen könnte.




    Jetzt denkt man erstmal: das kann meine Scriptumgebung zum Großteil auch.

    Ja, aber eben nur zum Großteil. Denn der MovieStarter analysiert ja auch das Seitenverhältnis und somit werden sogar Multiformatfilme immer korrekt angesteuert. Und zum anderen stellen die Metadaten eine sogenannte "Single Source of Truth". Das ist ein Begriff aus der Softwaretechnik, der besagt, dass die Wahrheit genau nur an einer Stelle definiert und somit nicht redundant vorhanden ist. Es ist daher egal, aus welchem Frontend der Film gestartet und (sofern unterstützt), welcher Player benutzt wird. Man muss die Metadaten auch nicht mehr pflegen, weil das beim Start automatisch passiert (und ggf. für einen schnelleren Zugriff abgelegt wird). Und ganz wichtig: alles ist playergetrieben. Es braucht keine externe Steuerung, die nicht weiß, wann der Player gestartet wird. Der Vorgang des Filmstarts erledigt alles und setzt es dann wieder zurück. Ich denke, das Konzept kann man daher als 100%-Lösung bezeichnen. Ziel ist, es immer richtig zu machen.


    Mit dem MovieStarter kann man auch die Konfiguration im Nachhinein relativ einfach ändern, wenn man mal die Leinwand, Projektor oder den Anamorphoten tauscht usw. Und man muss sich letztendlich nicht mehr um kryptische Zoom-Parameter oder fummelige Skripte kümmern.


    Soweit die Vision. Der Großteil funktioniert bereits. Wie gesagt, spezielle Anforderungen sind willkommen. :)

  • Hallo Nils,


    ich finde das extrem beachtlich und gut was Du da „mal eben so“ nebenbei programmierst. Ehrlich gesagt bin ich ob der Fähigkeiten etwas neidisch. Aber gut, hätte ja auch besser in der Schule aufpassen können und studieren können ;)


    Es funktioniert so, dass die Datei zunächst ausgewertet wird?! Beispiel AR. Das Programm schaut in die Datei und analysiert das Seitenverhältnis und gibt entsprechende Befehle aus. Korrekt? Wenn ja, was passiert wenn sich was ändert? Insbesondere denke ich an Multiformatfilme. Angenommen zu Anfang habe ich Scope Format und später wechselt es auf 16:9. Dann wird auf scope maskiert. Was passiert, wenn der Film auf 16:9 springt? Genau so auch umgekehrt.


    Oder habe ich das falsch verstanden und die Datei muss entsprechende Metadaten enthalten?


    Gruß


    Stefan



    P.S. Anforderungen habe ich da keine, denn ich nutze keinen HTPC. U.A. weil meine Kompetenz und Motivation das nciht hergeben. Aber neugierig bin ich ja dennoch ☺️

  • ich finde das extrem beachtlich und gut was Du da „mal eben so“ nebenbei programmierst.

    Danke! :sbier:

    Das Projekt lebt ja schon seit Jahren. Ich habe nur mal wieder die Muße gefunden, mich darum zu kümmern.


    Es funktioniert so, dass die Datei zunächst ausgewertet wird?! Beispiel AR. Das Programm schaut in die Datei und analysiert das Seitenverhältnis und gibt entsprechende Befehle aus. Korrekt? Wenn ja, was passiert wenn sich was ändert? Insbesondere denke ich an Multiformatfilme. Angenommen zu Anfang habe ich Scope Format und später wechselt es auf 16:9. Dann wird auf scope maskiert. Was passiert, wenn der Film auf 16:9 springt? Genau so auch umgekehrt.

    Genau, der Film wird vor dem Start mit dem AspectRatio-Detector von All-Ex analysiert. Der analysiert den Film mit einer konfigurierbaren Anzahl an Stichproben und gibt dann das Seitenverhältnis zurück. Bei Multiformatfilmen kann man z.B. einstellen, dass das breitere zurückgeliefert wird. Dann ist man sicher. Man kann die gültigen Seitenverhältnisse konfigurieren, auf die dann gerundet wird. Ganz exakt sind die wenigsten Filme abgelegt.


    Ich hatte mal mein gesamtes Archiv analysieren lassen und es gab nur einen Fehler, der sich durch die Erhöhung der Stichprobenanzahl sicherlich umgehen lässt. Das ganze ist also sehr zuverlässig. Und vor allem sitzt alles schon vor dem Film und z.B. nicht erst, wenn man nach dem schwarzen Intro die Balken erkennen kann. :)

  • Und wie lange dauert das Scannen aller Informationen vor dem Film?

    Das dauert ca. 7 - 20 s. Je nach Format (UHD/HD/SD) und Anzahl der Stichproben. Beim nächsten Mal, wenn die Metadaten abgelegt sind, ist das quasi verzögerungsfrei.

    Wahrscheinlich legst Du die "Zusatzdaten" je Film ab?

    Ja genau. Wobei ich mein eigenes Format habe und andere hier im Forum es im Dateinamen verstecken.

  • Hi Nils,


    sehr interessant, was du da machst. Finde ich super, dass du das hier zur Verfügung stellst!


    Ich habe bei mir einen ähnlichen Ansatz implementiert und beschreibe den hier mal. Vielleicht ergeben sich daraus sinnvolle Anforderungen für dich.


    Also, bei mir geht es so:


    Im Vorfeld lese ich einmalig die Metadaten jedes Films und das Aspect Ratio mit dem Tiny Media Manager (dort ist ARD inzwischen integriert) aus. TMM schreibt ein "_ARxxx-Tag" mit dem Seitenverhältnis (ggf. plus "_MFxxx" für Multiformat), sowie ggf. ein "_3D MVC"- und "_HDR"-Tag in den Dateinamen. Das dauert keine Minute pro Film.


    Die Steuerung des Kinos übernimmt komplett meine Hausautomation FHEM (mit diversen Modulen für die Harmony-Fernbedienung, den Denon-Receiver, den JVC-Projektor, Spotify, Lichtsteuerung, Maskierungssteuerung). Damit lässt sich das Kino kinderleicht bedienen (sehr wichtig für den WAF :zwinker2:) und die Hausautomation stellt alles passend zu den Metadaten automatisch ein.


    Das läuft dann so:

    1. Kino einschalten: FHEM startet nach Drücken eines Knopfes auf der Harmony-Fernbedienung automatisch den HTPC, Reciever, Lüftung der Hushbox, Projektor, setzt die Beleuchtung und startet über Spotify eine Hintergrundmusik
    2. Der HTPC startet automatisch KODI (Windows Autostart)
    3. Über die Harmony-Fernbedienung wird die KODI-Benutzeroberfläche gesteuert. Nach Auswahl und Start eines Films wird von KODI ein Event an FHEM gemeldet und dann passiert folgendes:
      • KODI stellt automatisch den Grafikmodus des HTPC auf die Bildfrequenz des Quellmaterials
      • FHEM dimmt die Beleuchtung
      • FHEM stoppt der Hintergrundmusik
      • FHEM stellt die Lautstärke ein (bei 2-Kanalaufnahmen aus der Mediathek leiser als bei Mehrkanal)
      • FHEM pausiert KODI (die ganzen Umschaltungen des Bildmodus und Zoom/Maskierung brauchen einige Zeit, während dessen der Film noch nicht laufen soll)
      • FHEM setzt die Maskierung (gemäß AR-Tag, das geht über einen Schrittmotor)
      • FHEM setzt den Projektor-Zoom (gemäß AR-Tag). Bei Multiformat-Filmen wird im Projektor außerdem eine Maskierung gesetzt, damit ich immer im breiten Format schaue und bei "hohen" Szenen oben und unten schwarz maskiert wird. Es findet also keine Formatumschaltung während des Films statt.
      • FHEM setzt den Bildmodus des Projektors (SDR oder gemäß 3D/HDR-Tag)
    4. Wenn 3. fertig ist, wird KODI von FHEM "unpausiert" und der Film mit Kodi Version 17.6 mit integriertem DSPlayer und MadVR abgespielt.
    5. Wenn man während der Filmwiedergabe auf der Harmony Pause drückt, bekommt FHEM das über Event gemeldet und dimmt das Licht etwas hoch und bei Unpause wieder runter.
    6. Wird der Film gestoppt oder ist zu Ende, wird FHEM wieder getriggert:
      • Beleuchtung hochfahren
      • JVC-Bildmodus auf Standard setzen
      • Zoom und Maskierung auf 16:9 setzen
      • Hintergrundmusik mit Spotify starten
      • Grafikmodus des HTPC auf 60 Hz stellen
    7. Nach drücken des Off-Knopfes auf der Fernbedienung fährt FHEM das Kino herunter, d.h. Maskierung auf 21:9 fahren, Geräte ausschalten und Hushbox-Lüftung noch etwas nachlaufen lassen.

    Die Reihenfolge der Befehle und das Timing bei 3. und 4. waren eigentlich das komplizierteste, denn der JVC mag es nicht gerne, wenn während der Umstellung des Videomodus weitere Befehle gesendet werden.


    Hier der Quellcode für Nr. 3 und 4:

  • Ich habe bei mir einen ähnlichen Ansatz implementiert und beschreibe den hier mal. Vielleicht ergeben sich daraus sinnvolle Anforderungen für dich.

    Danke für die detaillierte Beschreibung! Das ähnelt meinem Beispiel weiter oben ja sehr stark. Nur stellst du sogar noch die Lautstärke anhand der Kanalanzahl ein. An sowas hatte ich bisher nicht gedacht. Wäre aber prinzipiell auch kein Problem. :)

    Pause/Player wird bei mir übrigens beim MPC-HC über EventGhost gemacht, der mit dem Player verbunden ist und dann ein Event bekommt. Bei MPV habe ich das im LUA-Script realisiert. Solche Player-Ereignisse sind auch das Einzige, was der MovieStarter nicht abdecken würde. Dafür braucht man also eine andere Lösung.


    Ich bin inzwischen ein bisschen weiter und habe mal eine Bedingung und neue Variablen implementiert. Das sieht dann z.B. so aus:



    Hier sende ich z.B. das Seitenverhältnis an EventGhost, wenn es ungleich dem konfigurierten Standard ist. Und ändere die Auflösung/Refreshrate, wenn sie ungleich dem Standard ist. Für letzteres sind getrennte Aufrufe für den Start und das Ende des Films konfiguriert.


    Bisher gibt es folgende Metadaten, auf die man prüfen kann:

    • Seitenverhältnis
    • Bildrate
    • EOTF
    • Auflösung

    Dann gibt es folgende Operatoren: =, !=, <, <=, > und >=.


    Und weiterhin kann man mit festen Werten oder mit einigen konfigurierten Werten vergleichen. Die Variablen für die Leinwand könnte ich noch hinzufügen.


    Grundsätzlich könnte ich mehrere Bedingungen unterstützen, die dann mit UND/ODER verknüpft werden. Das ist natürlich etwas Aufwand. Und die Frage ist, ob das notwendig ist, denn mit EventGhost, FHEM oder OpenHAB kann man beliebig komplexe Szenarien implementieren, wenn man sich in einem Rutsch alle Metadaten schicken lässt. Also möchte ich hier auch nicht mehr Arbeit reinstecken als notwendig.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!