XBMC - Cinema Experience - Seitenverhältnis des Hauptfilms in der home_automation.py zur Verfügung stellen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • XBMC - Cinema Experience - Seitenverhältnis des Hauptfilms in der home_automation.py zur Verfügung stellen

      Hallo zusammen,
      ich habe mir einige Stunden um die Ohren geschlagen, um das Seitenverhältnis des Hauptfilms in der home_automation.py abzufragen und daraufhin Beispielsweise die LW-Maskierung automatisch fahren zu lassen.

      Hierzu muss man in einigen Skripten des CE etwas anpassen. Es wird kein tolles Programm benötigt. Ein einfacher Texteditor reicht aus. Bitte achtet auf die Zeilenangaben.
      Die Skripte sind zu finden unter "username"/library/application support/xbmc/addons/script.cinema.experience/resources/lib

      Das ist der Pfad auf dem Mac. Unter Win sollte der zumindest ähnlich sein. Wenn ihn jemand hat, dann bitte mitteilen.

      Los gehts:

      in der ce_player.py

      Quellcode

      1. mpaa, audio, aspect, genre, movie, equivalent_mpaa = _get_queued_video_info( feature = 0 )

      Hier wurde das "aspect" ergänzt.

      in der ce_playlist.py folgende Zeile einfügen:

      Quellcode

      1. aspect = movie_detail['streamdetails']['video'][0]['aspect']

      In folgender Zeile das "aspect" ergänzen:

      Quellcode

      1. movie_title = path = mpaa = audio = aspect = genre = movie = equivalent_mpaa, short_mpaa = ""

      Dann noch zur Information diese Zeile einfügen:

      Quellcode

      1. xbmc.log( "%s - Aspect: %s" % ( log_message, aspect, ), level=xbmc.LOGDEBUG )

      Und nun noch in dieser Zeile das "aspect" ergänzen:

      Quellcode

      1. return short_mpaa, audio, aspect, genre, path, equivalent_mpaa

      Das waren die Änderungen in der ce_playlist.py

      Kommen wir zur home_automation.py
      Als erstes in der obersten Zeile folgendes einfügen:

      Quellcode

      1. # -*- coding: utf-8 -*-

      Dann diesen Abschnitt einfügen:

      Quellcode

      1. try:
      2. from ce_playlist import _get_queued_video_info
      3. xbmc.log( "Erfolg", level=xbmc.LOGNOTICE )
      4. except:
      5. xbmc.log( "Das ging daneben", level=xbmc.LOGNOTICE )

      Und zum Schluss kommt natürlich noch der Teil wo der Film getriggert wird:

      Quellcode

      1. elif trigger == "Movie" and ha_settings[ "ha_movie" ]:
      2. pass
      3. # place code below this line
      4. xbmc.log( "Ich lade Infos...", level=xbmc.LOGDEBUG )
      5. mpaa, audio, aspect, genre, movie, equivalent_mpaa = _get_queued_video_info( feature = xbmc.PlayList( xbmc.PLAYLIST_VIDEO ).getposition() )
      6. xbmc.log( "Seitenverhaeltnis: %s" % aspect, level=xbmc.LOGDEBUG )
      7. if float(aspect) < 2.3:
      8. xbmc.log( "Maskierung bewegt sich nicht...", level=xbmc.LOGDEBUG )
      9. # hier steht dann eure Anweisung...
      10. else:
      11. xbmc.log( "Maskierung bewegt sich...", level=xbmc.LOGDEBUG )
      12. # hier steht dann eure Anweisung...
      13. xbmc.log( "Erledigt...", level=xbmc.LOGDEBUG )
      Alles anzeigen


      Die if-else Anweisung kann hier natürlich nach Belieben angepasst werden. Für mich ging es zunächst mal darum, das Seitenverhältnis präsent zu haben und abhängig davon Ereignisse eintreten zu lassen.
      Hier kann man dann im Endeffekt alles machen was man will. Ob es allerdings Sinn macht, das Licht abhängig vom Seitenverhältnis blinken zu lassen sei mal dahin gestellt :kratz:

      Um das ganze zu Überprüfen müsst ihr das Log aktivieren und da nach einem Test in XBMC mal reinschauen, ob ihr das Wort "Maskierung" findet.

      Ich hoffe ich habe nichts vergessen und es läuft so bei euch! Bei Fragen natürlich Fragen! Ich versuche dann auch ne Antwort bzw. Lösung zu geben.

      Grüße,
      Ingo
    • Einfach nur Klasse! Vielen Dank für die großartige Arbeit. Werde es sobald wie möglich ausprobieren .
      Gruß,
      Allan

      Projektor: Epson TW-3200 /// Leinwand: Wand + Alpina Weiß /// Lautsprecher: Canton Chrono 507, 505 und 502 /// Subwoofer: Canton AS 85.2 SC /// Receiver: Denon AVR 1612 /// Zuspielung: N40L MicroServer + XBMC + IR + EventGhost
      Spende Knochenmark und rette Leben über die DKMS! Es kostet nichts und kann schmerzlos aus dem Blut gewonnen gewerden (periphere Entnahme).
    • Hallo,

      da ich ja bei mir auch XBMC am laufen habe, mal die Frage ob das dann unter windows auch läuft? Müßte ich dann das ganze an Eventghost leiten (hab ich zur zeit nicht am laufen) oder kann als Befehl auch meine html Anweisung für die Maskierung stehen?

      Gruß
      starmike
    • Kann ich dir beantworten!

      Du kannst damit machen was du willst.
      Das ganze ist ja in Python geschrieben und wird dann da getriggert.
      Und von Python aus kannst du dann ansprechen was du willst. Ob das jetzt HTML, ein shell-script oder whatever ist.

      bei #hier steht eure Anweisung, einfach den gewünschten Code einfügen und los gehts!

      Grüße
      Owel
    • Hallo Beisammen,

      scheinbar hats noch niemand ausprobiert ;)
      Ich habs nämlich jetzt nochmal auf meinem Raspberry umgesetzt und mir ist dabei aufgefallen, dass noch eine Änderung in einer Datei nötig ist.
      Und zwar in der Datei xbmcscript_player.py muss in Zeile 124 noch das aspect wie folgt ergänzt werden:

      Quellcode

      1. mpaa, audio, aspect, genre, movie, equivalent_mpaa = _get_queued_video_info( feature = 0 )


      Was noch wichtig ist, dass man die richtige home_automation.py benutzt, nämlich die im "userdata" Ordner von XBMC und nicht die im "resources" Ordner von CE.

      Der entsprechende Ordner auf dem Raspberry unter Raspbmc befindet sich übrigens hier:

      /home/pi/.xbmc/addons/script.cinema.experience/resources/lib


      Bei mir wir die Maskierung jetzt mit LIRC angesteuert, da ich einen Infrarot-Empfänger von einer alten Motor-Leinwand habe.
      Um die Maskierung wieder in die Ausgangsposition zurück zu bringen nutze ich zusätzlich noch das Add-On Callbacks mit einem Script unter dem Punkt "Player Stops".


      Grüße,
      Ingo
    • Hallo zusammen.
      Erstmal danke für diesen klasse thread und der Beschreibung. :thumbs:

      Da ich auch XBMC nutze und mich das Thema hier auch sehr interessiert, hab ich mal ein paar Fragen. ich hoffe sie klingen nicht zu blöd, da ich absoluter Anfänger
      auf dem gebiet bin.

      1. Wird das Script automatisch gestartet wenn XBMC gestartet wird oder muss man es anders aufrufen, wenn ja wie?

      2. Wie kommuniziert ihr von eurem PC aus mit den Lampen oder der elektr. Maskierung?

      Gruß Bernd :kratz:
    • Hallo Bernd,

      ich nutze momentan xbmc auf einem Raspberry Pi.
      Das Cinema Experience Add-On kann man im xbmc zusätzlich installieren, bzw. einige Skins bringen das sogar direkt mit. Das Skin "Transparency!" beispielsweise hat Cinema Experience mit integriert und man kann direkt aus der Filmansicht das Skript starten.
      Das Skin "XeeBo" unterstützt auch Cinema Experience. Hier muss man aber über FIlminformationen die Option Cinema benutzen, damit das Skript gestartet wird.

      Eine gute Dokumentation von Cinema Experience gibts hier: Suchbegriff Google: "xbmc cinema experience" => erster Treffer.

      Die ansteuerung meiner Maskierung passiert dann Lokal auf dem Raspberry. Ich steuere diese per Infrarot über LIRC an. Und den entsprechenden Befehl sende ich über xbmc.executebuiltin(LIRC.Send("Befehl")). Dazu benötigt es sicher etwas Einlesen in XBMC, die Funktionen, etc.
      Meine Funksteckdosen sind noch nicht integriert, stehen aber auf dem Plan. Hier werde ich so wie es aussieht über pilight gehen.

      Wenn man nun XBMC auf einem separaten Rechner laufen hat, muss man sich Gedanken machen, wie man eine Verbindung zur Steuerungszentrale aufbaut. Bei mir wird über kurz oder lang auch noch ein separater HTPC mit XBMC kommen. Der Raspberry soll dann aber weiterhin die Steuerung übernehmen. Vermutlich wird die Kommunikation dann über WebSockets und JSON laufen.
      Auch ich muss hier noch viel lesen und Trial und Error betreiben, bis ich das alles mal vernünftig laufen habe. Aber genau das ist doch das Interessante. ;)

      Grüße,
      Ingo
    • Hallo zusammen,

      ich hätte da mal eine Frage bzgl. der Aspect Ratio, wie pflegt ihr die denn in XBMC ein? XBMC ermittelt das Verhältnis ja standardmäßig anhand der Videodimensionen, bei 1080p von einer Blu-Ray ist die Aspect Ratio bei mir daher immer mit 16:9 (1.77778) in XBMC hinterlegt. Ich hatte in XBMC 11 mal angefangen die Aspect Ratios in der DB in der Tabelle 'streamdetails' im Feld 'fVideoAspect' zu korrigieren, allerdings wurden diese Korrekturen beim Umstieg auf XBMC 12 verworfen. Und ich möchte nicht bei jedem Versionsupgrade alles nochmal eintragen.

      Gruß,
      Christian
    • Hallo Ingo,

      ich habe heute versucht mein CinemaExperience um dienen Code zu ergänden.
      Leider schmeißt er mir beim Starten des Filmes einen Script Fehler.
      Ich habe einmal ins Log geschaut und folgendes gefunden.

      Quellcode

      1. 01:34:22 T:2248 ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
      2. - NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
      3. Error Type: <type 'exceptions.IndentationError'>
      4. Error Contents: ('unexpected indent', ('C:\\Users\\Timo\\AppData\\Roaming\\XBMC\\addons\\script.cinema.experience\\resources\\lib\\ce_playlist.py', 354, 3, "\t\t\taspect = movie_detail['streamdetails']['video'][0]['aspect']\n"))
      5. Traceback (most recent call last):
      6. File "C:\Users\Timo\AppData\Roaming\XBMC\addons\script.cinema.experience\addon.py", line 171, in <module>
      7. from ce_playlist import _get_special_items, build_music_playlist, _rebuild_playlist, _store_playlist, _get_queued_video_info, _clear_playlists
      8. IndentationError: ('unexpected indent', ('C:\\Users\\Timo\\AppData\\Roaming\\XBMC\\addons\\script.cinema.experience\\resources\\lib\\ce_playlist.py', 354, 3, "\t\t\taspect = movie_detail['streamdetails']['video'][0]['aspect']\n"))
      9. -->End of Python script error report<--


      Fällt dir eventuell etwas dazu ein? :idee:

      Gruß Timo
    • Hi!

      Python ist sehr heikel was die Einrückungen betrifft. Schau Dir mal die Zeile 171 an. Ich vermute mal, dass Du da eine falsche Einrückung verwendet hast. Du darfst die Einrückung mit Leertaste und Tabtaste nicht mischen. Vielleicht sind auch zu viele oder zu wenige Leerzeichen am Anfang der Zeile drin. Es wäre auch hilfreich, wenn Du uns mal die betreffende Datei hier anhängen könntest, dann können wir auch draufschauen, ohne rätseln zu müssen :thumbs: .

      Ciao,
      Christian
    • Ja, der Fehler kommt ganz sicher vom falschen Einrücken. Am besten man nutzt einen ordentlichen Editor (PSPad z.B. ist gut dafürnund gratis), aktiviert dort in den Einstellungen das Einfügen von "Real-Tabs" mit Schrittweite von "4". Das passt i.d.R. wenn der Python Code vorher schon richtig formatiert war.
      Ansonsten einfach wie gusi schreibt: hänge deine Datei mal hier an.
    • David1977 schrieb:

      Schau dir mal den Link hier und den Spoiler darin an:

      XBMC mit allem drum und dran

      So mache ich es. Vielleicht hilft es dir ja

      Grüße


      Hallo David1977,

      danke für den Hinweis, hab jetzt mein ganzes Library exportiert und dann in den .nfo-Files die Aspect Ratio angepasst und die Filme nochmals aktualisiert. Das wird dann alles korrekt angezeigt und in die DB übernommen, allerdings hab ich gerade festgestellt daß XBMC den Eintrag in der DB beim/nach dem Abspielen wieder auf 1.77778 zurücksetzt. D.h. nach jedem Abspielen müsste ich die Infos wieder neu aus der .nfo einscannen. Macht er das bei dir nicht?
    • Meine Scripte

      Hallo,

      hat leider etwas länger gedauert. Ich hänge die Dateien mal hier an.
      Ich habe das schon einmal gelesen als ich mit FHEM herumprobiert habe das Python wohl sehr Zickig sein soll mit den Einrückungen.
      Ich habe die Scripte als Archiv Verpackt hoffe das ist so in Ordnung und ich krieg deswegen keinen Ärger. :)


      Gruß Timo
      Dateien
      • XBMC.zip

        (14,35 kB, 5 mal heruntergeladen, zuletzt: )
    • deathbringer schrieb:

      David1977 schrieb:

      Schau dir mal den Link hier und den Spoiler darin an:

      XBMC mit allem drum und dran

      So mache ich es. Vielleicht hilft es dir ja

      Grüße


      Hallo David1977,

      danke für den Hinweis, hab jetzt mein ganzes Library exportiert und dann in den .nfo-Files die Aspect Ratio angepasst und die Filme nochmals aktualisiert. Das wird dann alles korrekt angezeigt und in die DB übernommen, allerdings hab ich gerade festgestellt daß XBMC den Eintrag in der DB beim/nach dem Abspielen wieder auf 1.77778 zurücksetzt. D.h. nach jedem Abspielen müsste ich die Infos wieder neu aus der .nfo einscannen. Macht er das bei dir nicht?


      Haben denn alle Filme in deiner DB ein Verhältnis von 1.77778?

      Ich hatte ein ähnliches Phänomen als ich einigen DVD Urlaubsvideos in den NFO Dateien einfach in den Streamdetails gesagt habe, dass sie BR sein sollen, damit im Coverflow des Skins BD-Hüllen angezeigt werden (fand die einfach schöner ;)). XBMC merkt das aber, wenn das Format in der NFO nicht mit dem Bildmaterial der Datei übereinstimmt und ignoriert dann die Werte aus der NFO.

      Von daher kann ich mir jetzt nur vorstellen, dass es daran liegt.

      Grüße
    • zimb schrieb:

      Hallo,

      hat leider etwas länger gedauert. Ich hänge die Dateien mal hier an.
      Ich habe das schon einmal gelesen als ich mit FHEM herumprobiert habe das Python wohl sehr Zickig sein soll mit den Einrückungen.
      Ich habe die Scripte als Archiv Verpackt hoffe das ist so in Ordnung und ich krieg deswegen keinen Ärger. :)


      Gruß Timo

      Hey, habe mir gerade mal deine Skripte angesehen.
      nur irgendwie hast du da nirgendwo irgendetwas angepasst, wie ich es beschrieben habe.
      Ich kann in keiner der Dateien ein "aspect" finden... Bist du dir sicher, dass es die richtigen Dateien sind?

      Grüße,
      Ingo
    • David1977 schrieb:



      Haben denn alle Filme in deiner DB ein Verhältnis von 1.77778?

      Ich hatte ein ähnliches Phänomen als ich einigen DVD Urlaubsvideos in den NFO Dateien einfach in den Streamdetails gesagt habe, dass sie BR sein sollen, damit im Coverflow des Skins BD-Hüllen angezeigt werden (fand die einfach schöner ;)). XBMC merkt das aber, wenn das Format in der NFO nicht mit dem Bildmaterial der Datei übereinstimmt und ignoriert dann die Werte aus der NFO.

      Von daher kann ich mir jetzt nur vorstellen, dass es daran liegt.


      So gut wie, Blu-Rays sind ja sowieso alle in 16:9 (1920x1080) abgelegt und die meisten DVDs liegen in anamorphem 16:9 vor. Ich hab noch etwas rumgesucht, anscheinend gibt es bereits einen Fix für das Problem, so daß XBMC nicht jedesmal die Daten neu ermittelt, allerdings wurde soweit ich das gesehen habe noch nicht übernommen. Bleibt nur zu hoffen daß es das noch in XBMC 13 reinschafft.
    • Tach auch!
      Ich habe mich nochmal ein wenig intensiver mit dem Thema
      beschäftigt und bin auf einen wesentlich einfacheren Weg gekommen, das
      über Cinema Experience ans laufen zu bekommen. Und man muss nur in der
      home_automation.py "rumhantieren". Und zwar wie folgt:

      - in Zeile 5 ein "re" hinzufügen:

      Quellcode

      1. import sys, urllib2, os, re


      - und dann unter "Movie" oder wo auch immer man das benutzen möchte loslegen...

      Quellcode

      1. abfrage=urllib2.urlopen('http://127.0.0.1/jsonrpc?request={%22jsonrpc%22%3A%20%222.0%22%2C%20%22method%22%3A%20%22Player.GetItem%22%2C%20%22params%22%3A%20{%20%22properties%22%3A%20[%22streamdetails%22]%2C%20%22playerid%22%3A%201%20}%2C%20%22id%22%3A%20%22VideoGetItem%22}')
      2. aspect= re.findall('(?<="aspect":)[^,]+',abfrage.read())
      3. if aspect[0] > 2.3:
      4. urllib2.urlopen('http://127.0.0.1:8083/fhem?cmd.Maskierung=set%20Maskierung%20on')


      Zur info, was passiert:
      - Zunächst wird eine Anfrage per http an XBMC gesendet. (http Steuerung von XBMC muss aktiviert sein.) In "streamdetails" steht nämlich die aspect-ratio drin.
      - dann wird im zurückgegebenen Wert das wort "aspect" gesucht und der Zahlenwert dahinter in die Variable aspect geschrieben.
      - wenn dann der Wert von aspect größer als 2,3 ist, dann
      - wird bei mir über FHEM (der läuft auch auf meinem XBMC System - daher auch die IP-Adresse 127.0.0.1) die Maskierung aktiviert.

      Vielleicht ist bei so wenig Aufwand die Hemmschwelle ja noch was geringer, das mal auszuprobieren :bigsmile:

      Grüße,
      Ingo
    • Moin zusammen,
      Mir ist gerade aufgefallen, dass die Abfrage nicht ganz korrekt funktioniert, da die regex-Abfrage nicht so ganz richtig ist.

      Wie folgt ist es richtig:

      Quellcode

      1. abfrage=urllib2.urlopen('http://127.0.0.1:8080/jsonrpc?request={%22jsonrpc%22%3A%20%222.0%22%2C%20%22method%22%3A%20%22Player.GetItem%22%2C%20%22params%22%3A%20{%20%22properties%22%3A%20[%22streamdetails%22]%2C%20%22playerid%22%3A%201%20}%2C%20%22id%22%3A%20%22VideoGetItem%22}')
      2. abfrage=abfrage.read()
      3. aspect=re.findall(ur'''(?<="aspect":)[^,]+''',abfrage)
      4. utils.log( " - [ home_automation.py ] - aspect %s" % aspect, xbmc.LOGNOTICE )
      5. if aspect > 2.3:
      6. urllib2.urlopen('http://127.0.0.1:8083/fhem?cmd.Maskierung=set%20Maskierung%20on')


      Achtet bitte auf die korrekten Einrückungen. Ich hatte da auch probleme mit. Auch wenn es im Editor gut aussieht, kann es sein, dass da irgendwas schief läuft. Hat mich ca 2 Std gekostet darauf zu kommen...

      Des weiteren müsst ihr in der ersten Abfrage noch den richtigen Port für eure XBMC/Kodi steuerung eintragen. Wenn ihr euren HTPC nur über die Eingabe der IP im Browser erreichen könnt, müsst ihr aus "8080" eine "80" machen, oder den Doppelpunkt und den Port weglassen. Zu finden ist das Ganze in XBMC/Kodi dort, wo man die Websteuerung einstellt.


      Grüße,
      Ingo

      P.S.: Für diese Abfrage muss die aspect auch nicht in der Datenbank sein, da die Anfrage direkt den abgespielten Stream ausliest.
    • Hi,

      ich nutze in Kodi immer die Funktion Vertical Shift, d.h. Ich schiebe das Bild an den unteren Rand und maskiere nur von oben.

      Könnte das mit dem Script auch "automatisiert werden", also dass jeder Film, nach unten geschoben wird.

      Aktuell je nach Film habe ich nachfolgende Werte die ich wählen muss (abhängig vom Filmformat)
      1,00
      1,06
      1,13

      Dann sind die schwarzen Balken aus der Leinwand heraus.

      Danke
    • Das ist wohl wahr.
      Ich habe mal durch die einschlägigen Kodi Foren gewühlt und auch mehrfach den Wunsch nach einem automatisierten Vertical Shift gefunden, doch wurde diese Funktion noch nicht implementiert. Sie ist auch nicht über die JSON API zu erreichen.

      Da bleibt wohl nur das mühselige Einstellen manuell...

      Grüße,
      Ingo
    • Ja, ich hatte auch vergeblich danach gesucht...
      Als ich dann den Thread gefunden hatte, habe ich schon innerlich gejubelt.
      Wieder nix :(

      Wundere mich, dass der Bedarf bei der Community dafür nicht gesehen wird.
      Ist zwar nicht viel Aufwand... Aber manchmal nervt es, wenn ich nicht sofort genau treffe.
    • Servus,

      ich habe bisher zwar kodi nie genutzt, aber ...

      Da ich vor geraumer Zeit selber auf eine Softwarelösung statt AV-zurückgegriffen habe, kann ich sagen, dass das Problem ist das folgende:

      Auf den BluRays ist in den Metadaten nur hinterlegt, ob es ein 4:3 oder 16:9-Format ist. 21:9 wird schlicht nicht getagged.
      Die Information "16:9" in den Metadaten kann sowohl für 16:9, als auch für 21:9 stehen.
      Hintergrund:
      Die schwarzen Balken bei 21:9 sind im Grunde 16:9, nur dass der obere und untere Teil mit schwarzen Pixel befüllt ist und NICHT entgegen der Erwartungen dort keine Bildinhalte vorhanden sind.

      Ich hatte es damals so realisiert:
      -Routine startet, wenn BluRay eingelegt wird
      -Metadaten auslesen (Programm müsste ich nochmal suchen)
      -Text-Datei mit Seitenformat erzeugen
      -Werte aus der TextDatei mit einem anderen Programm auslesen, welches diese in RS232-Befehle interpretiert und an den Beamer sendet

      Wie gesagt - beim Wechsel von 4:3>16:9 ging das prima - 21:9 blieb aber leider außen vor.

      In Zukunft werde ich es einfach mit einem optischen Sensor angehen. Sollte wohl deutlich einfacher sein.
      ... aktuell in der Heimkino-Midlife-crisis.
    • Hallo,

      Bin gerade dabei bei mir auch mehr zu automatisieren.

      Könnte ich über dieses Addon/Skript auch den Light Manager Air ansprechen.

      Da mein anamorpoth und Vorhang über den Lightmanager Air gesteuert werden.

      Mit freundlichen Grüßen
      Stefan

      So habe jetzt erst gemerkt, dass ich ja nur noch Cinema Vision benutze.
      Aber dort gibt es ja die Actions mit denen ich Szenen am Light Manager abrufen kann.
      Jetzt bräuchte ich halt so ein ausführbares Skript? das dann auswählt je nach Seitenverhältnis ob es eine Szene ausführt oder nicht.

      Hätte jemand so etwas oder könnte mir ein Bsp.: machen?

      Mit freundlichen Grüßen
      Stefan
    Abonnement verwalten