MovieStarter

  • Download MovieStarter



    Wie hier bereits angekündigt, möchte ich meinen MovieStarter vorstellen.


    Es handelt sich um ein (gar nicht mehr so kleines) Programm, dass sich vor den eigentlichen Player schaltet. Dem MovieStarter wird also ein Pfad zu einer Filmdatei übergeben und dieser startet dann den Player. Vor dem Filmstart bereitet er die Umgebung vor, benachrichtigt Aktoren und setzt alles nach dem Schließen des Players wieder zurück. Damit ist es quasi transparent, von wo aus der Film gestartet wird.


    Motivation

    In unseren Heimkinos haben wir es mit einer Vielfalt von verschiedenen Seitenverhältnissen zu tun. Panelauflösung, Leinwand und Maskierung sind nur die offensichtlichen. Das bringt eine gewisse Komplexität und allerlei Probleme mit sich, so dass man häufig mitten im Film etwas korrigieren muss. All diese Probleme adressiert der MovieStarter. Ziel ist, dass er die gesamte Umgebung automatisiert vor dem Filmstart in die richtigen Zustände versetzt und dies nach dem Film wieder zurücksetzt. Und das auf eine transparente Art und Weise und ohne grafische Oberfläche.


    Was spricht gegen madVRs Erkennung?

    MadVR hat eine eigene Erkennung des Seitenverhältnisses eingebaut. Allerdings funktioniert die nur mit Copy-Back-Hardwarebeschleunigung, was mehr Rechenleistung in Anspruch nimmt. Außerdem kann madVR nicht in die Zukunft sehen und daher kann es sein, dass sich das Format nach einigen Sekunden noch mal ändert (z.B. wenn der Film schwarz anfängt). Das umgeht der MovieStarter durch ein anderes Konzept. Außerdem hat er diverse weitere Features, die madVR nicht implementiert hat. Natürlich kann der MovieStarter mit den anderen Features von madVR genutzt werden.


    Konzept

    Grundlage sind eine Konfiguration für das Heimkino und Metadaten am Film. Diese Metadaten werden, sofern nicht vorhanden, vor dem Filmstart automatisch ermittelt (unter anderem mit dem hervorragenden Aspect Ratio-Detector von All-Ex ). Der Filmstart dauert dann beim ersten Mal etwas länger, dafür sitzt das Seitenverhältnis sogar bei Multiformatfilmen sofort.

    Weiterhin können Aktoren konfiguriert werden, die an Bedingungen (z.B. Seitenverhältnis oder Auflösung) geknüpft sind. Diesen können beim Filmstart diverse Variablen aus den Metadaten oder der Konfiguration übermittelt werden.


    Konfigurationsdialog:



    Die per Analyse erzeugten Metadaten können im Nachhinein per Dialog editiert werden.




    Seitenverhältnis & Maskierung

    Anhand der Konfiguration und den Metadaten wird das Zielseitenverhältnis korrekt berechnet. Hier habe ich relativ viel Zeit und Gehirnschmalz investiert, um möglichst in jedem Fall den Film so darzustellen, wie es gewünscht ist. Der Player bekommt dabei die notwendigen Pan & Scan-Parameter, die er dann umsetzt. Das heißt natürlich auch, dass madVR skaliert.


    Dabei wird:

    • dem Player der korrekte Zoom übermittelt (derzeit nur MPC-HC und MPV)
    • die Maskierungsposition gerundet und ausgewählt (oder stufenlos)
    • den Aktoren das reale oder das gerundete Seitenverhältnis übermittelt


    Die Berechnung der Zielparameter ist von folgenden Eigenschaften abhängig:

    • Film (Automatische Erkennung bzw. Metadaten):
      • Seitenverhältnis Encoding
      • Seitenverhältnis Film
    • Konfiguration:
      • Panelauflösung
      • Anamorphot Verzerrungsfaktor
      • Seitenverhältnis Leinwand
      • Gültige Maskierungsstufen oder stufenlos
      • Vertikale Verschiebung
      • Schwellwert für Vergrößern und Abschneiden
        • Auch innerhalb von Maskierungsstufen


    Hier ist beispielhaft gezeigt, wo schwarze Balken vorkommen können, die komplett berücksichtigt werden:






    Dabei werden CIH und CIW voll unterstützt.




    Es wird auch eine Verschiebung an den oberen und unteren Bildrand unterstützt, wenn das Seitenverhältnis größer ist als das Zielseitenverhältnis. Per virtueller Auflösung ist auch hier die Zeitleiste/Untertitel im aktiven Bildinhalt.



    Und das Bild kann automatisch so vergrößert werden, dass es die Leinwand (bzw. die Zielmaskierungsstufe) komplett ausfüllt. Das wird über einen Schwellwert gesteuert.

  • Virtuelle Auflösung (nur NVIDIA)

    Der Clou sind virtuelle Auflösungen! Bei virtuellen Auflösungen wird die native Auflösung des Projektors genutzt, dem Desktop und allen Applikationen ist aber nur ein Teil der realen Auflösung bekannt. Der große Vorteil ist, dass der Player direkt auf diesen Ausschnitt skaliert und somit Untertitel und die GUI des Players innerhalb der aktiven Bildfläche liegen. Keine Untertitel mehr, die in der Maskierung verschwinden! Weiterhin ist Blanking im Projektor bei Multiformatfilmen unnötig, da der aktive Bereich nur die breitere Auflösung umfasst und der Rest abgeschnitten wird (sofern so konfiguriert). :)


    Die virtuelle Auflösungen müssen nicht vorher umständlich per Hand definiert werden. Sie werden zur Laufzeit aus den Seitenverhältnisparametern berechnet und in der Grafikkarte gesetzt. Sie existieren nach dem Filmstopp auch nicht weiter.


    Die Bildwiederholfrequenz wird natürlich auch entsprechend dem Film gesetzt.


    Hier zwei komplexere Beispiele, bei denen die Zielauflösung passend zu einer gültigen Maskierungsstufe gesetzt wird:




    Optimierung für Frame-Interpolation (FI)

    Man kann einen Multiplikator konfigurieren, der auf die Bildwiederholfrequenz bis zu einem bestimmten Schwellwert angewendet wird. Damit kann z.B. bei einem Film mit 23,976 FPS auf 47,952 Hz gewechselt werden. Das hat den Vorteil, dass die FI alle Originalframes intakt lassen kann, da die Bildwiederholfrequenz ein ganzzahliges Vielfaches der Framerate ist. Ziel ist die Reduzierung von Artefakten.



    Aktoren

    Bei den Aktoren gibt es momentan einige Möglichkeiten, Daten zu übertragen. Das sind z.B. HTTP, UDP, Dateiaufruf usw. Für komplexe Automatisierungen kann man somit die Metadaten des Films auch an eine externe Steuerung, wie z.B. EventGhost oder OpenHAB, übermitteln. Da ist dann wieder alles möglich.

    Man kann natürlich mit dem MovieStarter auch ganz andere Dinge abhängig von Filmstart steuern, wie z.B. Licht, Lautstärke, Lampenmodus, Hintergrundmusik usw.


    Es besteht die Möglichkeit, den Zeitpunkt des Abspanns zu hinterlegen. Auch dies kann als Ereignis konfiguriert werden, um z.B. das Licht hochzudimmen und den Ton leiser zu stellen.


  • FoLLgoTT

    Hat den Titel des Themas von „MovieStarter - komplette Automatisierung des Filmstarts“ zu „MovieStarter - Automatische Maskierung leicht gemacht“ geändert.
  • FoLLgoTT Danke dafür. Ich habe großes Interesse. Ich suche nämlich nach einer Möglichkeit bei mir, openHAB mitzuteilen, ob ein Film läuft oder nicht. Das geht momentan nur mit Kodi 17.6 DS-Player, da ich hier dann das Kodi-Binding von openHAB nutzen kann. Da ich aber langsam eine neu Kodi-Version nutzen möchte und daher einen externen Player nutzen muss, kommt mir Dein Tool sehr entgegen.


    Ich würde mir noch wünschen, dass die Daten als JSON an einen MQTT-Broker geschickt werden können.

  • Ich würde mir noch wünschen, dass die Daten als JSON an einen MQTT-Broker geschickt werden können.

    Das schaue ich mir an. Sollte kein allzu großer Aufwand sein.


    Gehe ich aber recht in der Annahme das es nur für HTPCs funktioniert?

    Ja, das ist auf Windows beschränkt. Und man benötigt auch die passenden Player (MPC-HC oder MPV) dazu.

  • FoLLgoTT

    Hat den Titel des Themas von „MovieStarter - Automatische Maskierung leicht gemacht“ zu „MovieStarter“ geändert.
  • Inzwischen habe ich den MovieStarter mit Kodi ausprobiert. Es scheint tadellos zu funktionieren. Der MovieStarter wechselt zur virtuellen Auflösung und startet dann den Film mit MPC-HC. Die GUI von Kodi sieht während des Auflösungswechsels kurz etwas komisch aus, fängt sich aber wieder, wenn beim Schließen des Players zurückgeschaltet wird. Ich hatte schon bedenken, dass Kodi damit nicht klarkommt. Dem scheint nicht so zu sein. :)


    Hier die Einbindung in Kodi:

  • Neues Feature: man kann nun als Schlüsselwort einen beliebigen Zahlenbereich angeben, aus dem dann linear der Wert herausgepickt wird, der dem Seitenverhältnis entspricht. Damit habe ich den Custom-Aktor für meine Leinwand komplett durch generische Parameter ersetzt. :)


    Beispiel: das Arduino von meiner Maskierung erwartet einen Wertebereich von 0 - 100. 0 entspricht 16:9, 97 entspricht 2,4:1 und 100 ist der Wartungsmodus. Wenn der Film nun ein Seitenverhältnis von 2,2:1 hat, wird aus diesem Wertebereich der Wert 66 errechnet und an die Maskierung gesendet. Damit ist eine komplett stufenlose Maskierung mit beliebigen Wertebereichen möglich.



    Anfang und Ende werden jeweils auf die konfigurierten Werte für die minimale und maximale Maskierung gesetzt und alles dazwischen interpoliert.



    Damit muss man nicht mehr extern das Seitenverhältnis in Positionswerte umrechnen, sofern man eine stufenlose, linear arbeitende Maskierung besitzt.

  • Ich bin äußerst interessiert an deiner Lösung und finde toll, was du hier umsetzt. Mir fehlt aktuell nur schlicht die Zeit. Ich werde das im Keller aber auf jeden Fall nutzen. An dieser Stelle danke für deine Arbeit!

    auch gewerblich als User "Speaker Base" unterwegs

  • Dem kann ich mich nur anschließen. Vielen Dank! Auch deine anderen Arbeiten, was madvr alternativen angeht und warping bin ich voll dabei und Programmiere auch gerne, muss nur derzeit sehr diszipliniert sein, damit ich mit meinem Kino erst einmal einen Stand beim Bau erreiche der weiteres zulässt. Sonst wird mir das Budget von der Regierung gestrichen 😉

  • Ich bin äußerst interessiert an deiner Lösung und finde toll, was du hier umsetzt. Mir fehlt aktuell nur schlicht die Zeit. Ich werde das im Keller aber auf jeden Fall nutzen. An dieser Stelle danke für deine Arbeit!

    Ja, mir geht es ähnlich. Ich bin mit Nils per PM in Kontakt und auf meinem Wunsch hat er sogar MQTT eingebaut. ich komme nur im Moment nicht dazu, etwas zu testen. Ich werde es aber umsetzen und Feedback geben, versprochen.

  • Ich kann mich dem nur anschließen und habe diesen sowie den Vorgänger-Thread immer aufmerksam verfolgt. Aber da ich in meinem Projekt noch ziemlich am Anfang stehe, kann ich momentan leider nicht mehr beitragen, außer Dir für deine Mühe zu danken! :thumbup:

  • Wir hatten es ja bereits im Direktkontakt davon: Adaption wird diesen Monat voraussichtlich beginnen; zieht aber eine Menge Änderungen meiner gesamten Kette hinter sich her. Diese wird dann denke ich auch ausreichend interessant für nen eigenen Thread sobald es los geht; einiges „Spezial“ dabei :poppy:

  • Alles sehr interessant und Mega dankenswert :respect:


    Vorallem für Leute wie mich die maximal fertig Gebrainstormtes und Entwickeltes kopieren oder installieren können.


    Sowas kann und wird mMn. nie genug gewürdigt. Dafür das es trotzdem gemacht und veröffentlicht wird einen fettes Mercy


    :sbier:

  • Danke an alle! :sbier:

    Ich kann gut verstehen, dass der MovieStarter keine hohe Priorität hat. Im Grunde ist er ja nur eins der I-Tüpfelchen in einer Heimkinoinstallation mit HTPC, die man angehen kann, wenn die Groben Dinge umgesetzt sind.


    Ich habe jetzt übrigens mit Testfällen begonnen, da die Berechnung des Zielseitenverhältnis, Auflösung, Pan & Scan usw. doch relativ komplex geworden ist und man ohne Unittests keine Sicherheit bei Änderungen hat. Die Kombinatorik ist einfach zu hoch, um alles ständig händisch abzutesten. An der Arbeit poche ich als Teamleiter immer darauf, dass meine Kollegen zwingend Unittests schreiben. Zu Hause wird man selbst dann doch mal etwas schlampig...:beated:


    Ansonsten habe ich schon einige Filme mit virtuellen Auflösungen geschaut und bisher keinen Nachteil festgestellt. Das läuft bisher sehr stabil und problemlos. Und es ist einfach geil, wenn die Zeitleiste immer komplett sichtbar ist und die Untertitel am unteren Bildrand kleben. :)

  • Da hier das Interesse gegen Null tendiert, habe ich im AVSForum einen Thread gestartet.

    Hallo Nils,


    im AVSForum hatte ich auch mal einen Thread zum Aspect Ratio Detector aufgemacht, aber da gab es so gut wie keine Resonanz. Aber lasse dich nicht entmutigen, ich finde es toll, was du auf die Beine gestellt hast! :sbier:

    Und nicht vergessen: Nur ein Bruchteil der Nutzer solcher Tools meldet sich in Foren zurück. Deine Doku ist so gut, dass man das Tool auch einsetzen kann, ohne sich extra in Foren anzumelden und nachzufragen.


    Ich glaube, dass diese Themen die Nische in der Nische sind und viele Anwender nicht die Voraussetzungen und nicht genügend technisches Verständnis für die Umsetzung in der eigenen Umgebung haben.


    Ich sehe den Moviestarter aber auch als Chance für die Weiterentwicklung im Player-Bereich insgesamt, denn du zeigst, was möglich ist. Das erzeugt eine Erwartungshaltung an etablierte Tools/Player, die sich irgendwann auch dahin bewegen werden, bzw. ähnliche Funktionen einbauen werden. Zumal die Zahl der Heimkino-Verrückten immer größer wird und der Markt dadurch größer wird.


    *Traum-Modus ein* Ich sehe die Funktionen des Moviestarter sogar als interessant für die großen Streaming-Anbieter, denn da geht der Trend schließlich hin. Wäre doch toll, wenn Netflix & Co auch die Maskierung etc. steuern könnten *Traum-Modus aus*


    Der Aspect Ratio Detector war erst ein kleines, kompliziertes Tool, das nur hier im Forum existierte. Mittlerweile ist es dank icebaer im Tiny Media Manager integriert, dort deutlich benutzerfreundlicher geworden und kann von einer viel größeren Nutzerbasis eingesetzt werden.


    Evtl. gibt es ja irgendwann mal ein "Moviestarter" Kodi-Plugin, das vermutlich deutlich mehr Anwender einsetzen würden; natürlich nur, wenn du das überhaupt möchtest.


    Alex

Jetzt mitmachen!

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