mpv LUA Script-Sammlung

  • So, da haben wir es auch schon https://mpv.io/manual/stable/#options-video-sync


    Ich habe alle mal durchprobiert und mit video-sync=display-resample-desync ist der Effekt beim Springen auf eine Kapitelmarke nur noch minimal. Ich werde das dann mal auf den "großen" Player übertragen und gucken, wie sich das im Film so macht. Dabei ist immer zu beachten, dass ich kein Bitstreaming verwende, sonder dekodiertes PCM-Audio. Meine Einstellungen können also für Bitstreams schädlich sein und umgekehrt, einfach ein anderer Anwendungs- und somit Optimierungsfall.

  • Wie auch schon im Manual erwähnt, driftet damit alles auseinander. Insgesamt scheint auch hier wieder mal das Beste zu sein, diese Optionen gar nicht anzufassen. Welcher Default dann allerdings genutzt wird, kann ich dem manual nicht entnehmen. Auf jeden Fall ändert sich damit die Statuszeile und man kann zusehen, wie gesynced wird. Vorher war übrioogens auf der Statuszeile beim Ruckeln auch immer eine Desy-Warnung zu lesen, die ich aber erst vorhin entdeckt habe, als ich auf Start von hand und vom Terminal umgestiegen bin.

  • Custom Version auf Basis von dynamic_crop mit optionalen Parameters für Zoom/strech/Move, damit jedes Bild 16:9 oder 1.9:1 und größer die Leinwand voll ausfüllt.


    Ich arbeite noch etwas dran, aber bin soweit zufrieden.

    Mit zoom_after_crop kann man alles über > 1.9:1 auf Scope aufzoomen. mit etwas Stretch und Verschiebung (nur Zoom falls > 2.3)
    Zusätzlich mit zoom16_9 kann man es auch für 16:9 und größer aktivieren.
    Das Stretching kann über die stretch Parameter angepasst werden.


    Zusätzlich kann man in Runtime mit Shift+C den Modus ändern:

    1. dynamisches Croppen + Zoom, falls zoom_after_crop aktiv ist (default wenn zoom16_9 nicht aktiv ist)
    2. dynamisches Croppen deaktivieren
    3. dynamisches Croppen + Zoom für alles > 16:9 (default wenn zoom16_9 aktiv ist)
    4. dynamisches Croppen deaktivieren
    5. dynamisches Croppen deaktivieren + original Film (Script is quasi aus)
    6. zürück zu 1 Option 1

    Meine persönlichen Einstellungen:

    zoom_after_crop = true

    zoom16_9 = false

    scope_ratio = 2.4

    stretch = 0.95

  • Ich hatte das dynamic-crop.lua mal ausprobiert. Leider ist der cropdetect-Filter in FFMPEG ziemlich unperformant, wenn das Bild sehr dunkel ist oder sogar schwarz. Mir ist das bei einigen Szenen in "The Expanse" aufgefallen und ich kann es mit einem Schwarzbild (->Teststream von Mehanik) provozieren. Dann entstehen Framedrops.


    Wenn man sich den Quellcode anschaut, dann sieht man, dass der Algorithmus immer bis zur gegenüberliegenden Kante sucht, wenn er keinen Wert über dem Schwellwert findet. Dementsprechend dauert es länger. Für unsere Zwecke, nämlich schwarze Balken ausschließlich vertikal und immer symmetrisch, würde eine Analyse an der Unter- oder Oberkante reichen und dann auch nur bis 2,76:1 z.B. Das wäre deutlich performanter.


    Ich muss noch mal darüber nachdenken. Bisher habe ich auch keinen Weg gefunden, dass ein Shader Daten irgendwohin liefert. Falls da jemand eine Idee hat, immer her damit.

  • Hi


    ich bastel gerade mein UDP Relais an den MPV. Dieses soll unter anderem EIN Schalten wenn ein Film läuft und AUS wenn der Film stoppt (Pause) oder zu Ende ist. Dank ausser-Forenhilfe von atom klappt das schon super für die Funktion „pause“. Aber ich bräucht ne function „film läuft“…. Was wäre da passend?

  • Eine neue Version zum ausprobieren für dynamic crop:

    Zwei neue Parameter:


    1. stop_crop_afterstart (true/false):

    • wenn auf "true" gesetzt, Wird die dynamische Erkennung nach dem ersten entdeckten Seitenverhältnis abgeschaltet.
    • mit Shift + C lässt es sich wieder dauerhaft einschalten

    2. allowed_ratios (0, 2 oder 3) - default 2

    • speichert ingesammt 2 oder 3 Seitenverhältnisse, die erkannt werden während dem Film (Pixelgenau).
    • Das erste Seitenverhältnis wird am Start festgelegt. Ein Weiteres während dem Film (allowed_ratios = 2)
    • Das erste Seitenverhältnis wird am Start festgelegt. Zwei weitere während dem Film (allowed_ratios = 3)
    • Das Script schaltet nur zwischen den erkannten Verhältnissen und ignoriert den Rest. Das sollte Probleme mit sehr dunklen Filme vermeiden

    übrigens kann man mit Shift+C die dynamische Erkennung auch so jederzeit abschalten

    • mit allowed_ratios = 0 kann man dieses Feature auch abschalten.


    EDIT: 06.01.2022 11:40:

    - Bug Fixes und Erhöhung der Stabilität


    Edit : 06.01.2022 13:07:

    - Bug Fix für Zoom/Crop, wenn keine Balken vorhanden sind

  • Genial, dass löst viele Probleme, danke!

  • Beides ist möglich.


    In der Config geht es so (Script muss dynamic_crop.lua heißen):


    • script-opts-append=dynamic_crop-<optionsname>=<wert>

    Beispiel:

    • script-opts-append=dynamic_crop-zoom16_9=yes
    • script-opts-append=dynamic_crop-scope_ratio=2.4

    Vorteil an der Methode ist, dass du nicht jedes mal die Parameter ändern musst bei einer neuen Version,

    Du musst dann nur evtl neue anpassen/hinzufügen.


    Edit: statt true/false muss es in der Config yes/no heißen

  • Dürfte ich nochmal auf meine Frage hinweisen? Hat nirmand einen Vorschlag für eine Abfrage im lua „film läuft?“. Mein udp Relais schaltet toll mit der „Pause“ function; leider bekomme ich dadurch aber nicht den iniitialen Start sowie finalen Stop mit (wo ich auch Schaltcirgänge hätte…).


    Danke!

  • Ja, klingt für mich nach "file-loaded" (=Start) und "end-file" (=Ende).

    Im Skript wäre es dann sowas:

    Code
    mp.register_event("file-loaded", on_start)
    mp.register_event("end-file", on_end)

    "A computer lets you make more mistakes faster than any other invention in human history, with the possible exceptions of handguns and tequila." - Mitch Ratcliffe

  • zeitgleich….ja load&end sollt klappen! Wenns fertig ist stell ichs mal hier rein. Ist halt meine primitive Art der Hausautomation-Ankopplung da ich keine visu hab/will

  • Ich bin zu blöd die Option "sub-forced-only=yes" richtig zu benutzen.

    Entweder sehe ich immer Subs oder Nie. Aber nur "forced" funktioniert bei mir einfach nicht.


    Deshalb schnell ein Script gebastelt. Es wählt nur forced subtitles in der gewählten Sprache aus.

    Vlt ja hilfreich für wen auch immer


    Edit: geht jetzt auch mit "forced" in Namen + bugfix

  • Ich hab mal atoms Vorlage genommen und etwas überarbeitet.

    Heraus kam ein LUA-Skript, mit dem man den Watched-Status eines Films in Kodi anhand des gelaufenen Fortschritts in Prozent setzen kann.

    Normalerweise kann man das für externe Player nur anhand der Zeit machen, die der Player gelaufen ist, was nicht wirklich optimal ist.


    Mit dem Skript kann man jetzt genau festlegen, ab wieviel Prozent ein Film als gesehen gilt.

    Am Anfang in der Datei kann man folgendes definieren:
    - Username / Passwort / Port für den Zugriff auf Kodi

    - watchedPercentage -> ab wieviel % gilt ein Film als "gesehen"


    Damit es funktioniert, muss in Kodi der Zugriff freigeschaltet sein. Das geht unter "Einstellungen / Dienste / Steuerung".

    Dort "Steuerung über HTTP erlauben" und "Authentifizierung erforderlich" anhaken, sowie darunter Benutzername und Passwort vergeben.


    Ausserdem sollte die playercorefactory angepasst werden.
    Dort gibt es den Parameter "playcountminimumtime", der auf einen sehr grossen Wert (bspw. 36000 (=10h)) gesetzt werden sollte, damit Kodi nicht vorher selbst als gesehen markiert.

    Dateien

    • watched.zip

      (1,14 kB, 91 Mal heruntergeladen, zuletzt: )

    "A computer lets you make more mistakes faster than any other invention in human history, with the possible exceptions of handguns and tequila." - Mitch Ratcliffe

  • ... und noch ein kleines Skript hinterher.


    Dieses Skript pausiert den Film, sobald ein Wechsel der Bildwiederholfrequenz festgestellt wird.

    Manche Beamer brauchen ja ein wenig, bis sie sich danach wieder synchronisiert haben und zeigen in der Zeit kein Bild an. Da der Film normalerweise aber schon läuft, hört man nur was, sieht aber nix.

    Mit dem Skript fängt der Ton dann gleichzeitig mit dem Bild an.


    Dazu schaut das Skript, ob ein Wechsel der Frequenz notwendig ist. Falls ja, wartet es bis eine neue Frequenz erkannt wurde.
    Es macht also eigentlich nur Sinn das Skript zu nutzen, wenn gleichzeitig noch ein Skript zur Bildfrequenzanpassung aktiv ist.

    Zusätzlich ist in den meisten Fällen wohl noch ein Delay notwendig. Bei mir wird bspw schon die neue Frequenz im Skript als aktiv angezeigt, obwohl der Beamer noch mitten im wechseln ist. Mit einem passenden Delay, starten Bild und Ton dann aber synchron.
    Das Delay ist im Skript einstellbar und sollte am besten individuell ermittelt werden, da die Werte von Beamer zu Beamer varieren. Meiner (X7000) ist etwas langsamer, weshalb 10s eingestellt sind.


    Als zweiten Parameter gibt es ein Delta.
    Das ist dafür da zu erkennen, ob ein Wechsel notwendig ist bzw wie gross die Differenz zwischen Video- und realer Frequenz sein muss, um zu warten.

    Das brauche ich, da bei 23.976Hz und 24Hz nicht gewechselt wird. Um dann nicht unnötig zu warten, kann man das Delta entsprechend einstellen.


    Ansonsten viel Spass damit...

    Dateien

    • sync-wait.zip

      (644 Byte, 86 Mal heruntergeladen, zuletzt: )

    "A computer lets you make more mistakes faster than any other invention in human history, with the possible exceptions of handguns and tequila." - Mitch Ratcliffe

  • Hallo,


    ich habe eine Frage zum change-refresh Lua Script.


    Ich habe mir das Sript von https://github.com/CogentRedTester/mpv-changerefresh geladen, und in den Ordner ~/mpv/scripts geschoben. (Win10)


    Refresh Rate des TV (Samsung GQ75Q60) steht auf 60 Hz. Eingestellt per nVidia Tool.


    Nun starte ich Kodi und darin den MPV Player bzw. den Film. Anschließend drücke ich F10, es gibt eine kurze Bildunterbrechung, auf dem TV wird angezeigt das die Refresh Rate auf 23 Hz gesetzt worden sei.


    Doch wenn ich mir mit Shift+I die Stats im MPV Player anschaue ist die Refresh Rate des TV immer noch bei 60Hz.


    Über Tipps würde ich mich sehr freuen. :) Auch gerne ein anderes Script. Habe noch autospeedwin probiert. Was aber gar keine Reaktion bei mir zeigt. Komme nicht weiter....


    Grüße,


    Frank


    P.S. Tolle Arbeit die, ich sag mal das Forum, hier geleistet hat in Sachen MPV Player. :sbier:Ich benutze den MPV Player anstatt des Kodi internen Players. Mein Vergleich ist also nicht madVR sondern eben der Kodi Player.


    Und da gewinnt der MPV Player imho deutlich. Nicht nur bei der Bildqualität sondern auch bei Schnelligkeit, Anpassung und Stabilität. Das ist mir mindestens genauso wichtig wie der Zugewinn an Bildqualität. :poppy:


    Ich habe mir überlegt ob es Sinn macht einen Thread zu eröffnen in dem es um den MPV Player in Kombination mit einem TV, Kodi und Win10 geht.

    Im vorhandenen MPV Player Thread geht es ja primär um die Kombination mit einem Beamer. Falls da Interesse besteht könnte man die mpv.conf für TV anpassen. Falls das überhaupt erforderlich ist.... Allein diese Frage zu klären finde ich schon interessant.

    Ich dachte etwa an die Nits Werte welche bei einem TV von der eines Beamers abweichen können....


    Meine mpv.conf sieht aktuell so aus: mpv.conf.zip


    Ich nutze Win10, einen E8400 (2Kerner) und eine 1050Ti. Mit der obigen mpv.conf liegt die CPU um 50% und die GPU bei knapp 20% Auslastung. Renderzeiten bis 15- 30 ms. Je nach Quellmaterial.

Jetzt mitmachen!

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