Aspect Ratio Detector: Seitenverhältnis erkennen, jetzt auch mit Tiny Media Manager

  • Zur aktuellen Version: 1.1.1. Inzwischen ist diese Funktion auch im TinyMediaManager (Danke icebaer) und im MovieStarter (Danke FoLLgoTT) enthalten.

    Hinweise zu erweiterten TMM-Parametern gibt es hier.


    Hallo zusammen,


    in meinem "Neue User stellen sich vor"-Thread wurde ich nach dem Programm "Aspect Ratio Detector" gefragt, das ich in einem anderen Forum vorgestellt habe. Gerne möchte ich es auch im Heinkinoverein vorstellen:


    Bisher gibt es noch kein Programm, welches das Seitenverhältnis von Videos erkennt und zur Weiterverarbeitung speichert.


    Deshalb habe ich das Programm "Aspect Ratio Detector" geschrieben Es erkennt das Seitenverhältnis (Aspect Ratio) von Videos und zeigt es an oder schreibt es in den Dateinamen. Darauf können anschließend weitere Tools wie madVR oder eine Heimautomatisierung zugreifen und automatisch beim Start eines Videos z.B. den richtigen Lens-Shift des Projektors einstellen oder die Maskierung auf die richtige Position fahren.



    Installation


    Vor der Nutzung ladet ihr ffmpeg von hier herunter ffmpeg.zeranoe.com/builds/: Am besten die aktuelle Version (4.2.2, nicht den Nightly Build) und 64 Bit, Static Linking. Entpacken und den Pfad (...\ffmpeg-4.2.2-win64-static\bin) merken.


    Dann das angehängte ZIP entpacken und die .exe auf einer Windows 10 Maschine starten.


    Los geht's


    Oben rechts tragt ihr den Pfad von ffmpeg ein und darunter die Pfade, in denen die Videos liegen (bzw. einzelne Video-Dateien). Dann Start klicken und abwarten :)


    Standardmäßig ist "Dry Run" angehakt, d.h. es werden erstmal keine Dateien umbenannt, sondern nur die Ergebnisse angezeigt.


    Wenn ihr "Dry Run" ausschaltet, wird an das Ende der Dateinamen ein Tag angehängt im Format "_ARxxx", wobei xxx das Aspect Ratio ohne Kommastelle ist. z.B. Aspect Ratio von 1.85 => _AR185, Aspect Ratio von 2.39 => _AR239. Auf diese Tags können andere Tools wie z.B. madVR reagieren.


    Nach der Analyse gibt es noch eine Übersicht über die gefundenen Ergebnisse und eine Statistik , wie viele Videos in welchem Format vorliegen.


    Ihr könnt außerdem einstellen, an wie vielen Stellen (Samples) das Video analysiert werden soll ("Minimum number of samples per video"), wie viele Sekunden pro Sample analysiert werden ("Length of each sample") und wie viele Sekunden maximal zwischen zwei Samples liegen dürfen ("Maximum time between samples"). Mehr Samples und längere Samples erhöhen die Genauigkeit, aber die Analyse dauert dann länger.


    Bei "Ignore beginning" und "Ignore end" tragt ihr ein, wie viel Prozent vom Anfang und Ende des Videos ignoriert werden, damit Intro-Logos und der Abspann die Erkennung der schwarzen Balken nicht behindern.


    Beim Aspect Ratio der Video gibt es meistens leichte Abweichungen. Damit nicht zu viele verschiedene ganz dicht beieinander liegende Aspect Ratios ermittelt werden, könnt ihr eine Liste von Aspect Ratios angeben, auf die gerundet wird ("Round detected Aspect Ratio"). Das ist mit sinnvollen Werten vorbefüllt.


    Dann entscheidet ihr, ob bereits erkannte (getaggte) Video erneut analysiert werden sollen ("Analyze video files with existing _ARxxx tags") oder nicht ("Skip video files with existing _ARxxx tags") und ob alles nur angezeigt werden soll, ohne Dateinamen zu ändern (Dry run). Wenn ihr "Dry run" ausschaltet, testet ihr das vielleicht erstmal mit einer Kopie von ein paar Videos...


    Wie funktioniert's?

    • Aus den Metadaten des Video-Streams wird das "Sample Aspect Ratio" des Videos (SAR, bei DVD anders als bei BluRay) und die Pixelgröße des Streams (ggf. inkl. schwarze Balken) gelesen. Daraus wird das Aspect Ratio des Streams ermittelt => ARencoded
    • Jedes Video wird an mehreren Stellen (Samples) analysiert
    • Alle Frames in jedem Samples werden untersucht und die Pixelgröße und das Aspect Ratio des Frames mit der größten nicht-schwarzen Bildfläche wird ermittelt => Cropped size und ARcalculated (das SAR von oben wird dabei berücksichtigt)
    • Das ARcalculated, welches in den Samples am häufigsten vorkommt, wird weiter verwendet => ARdetected
    • ARdetected wird dann auf das nächste Aspect Ratio aus der Liste gerundet, die in den Settings angegeben ist => ARrounded
    • Standard Deviation (ARsd) gibt die Standardabweichung von ARdetected an. Kleine Werte bedeuten, dass die Erkennung sehr zuverlässig ist. Bei einem Wert von 0 haben alle Samples eines Videos das gleiche Aspect Ratio. Bei Werten von 0.5 oder höher könnte es ein Video, das in unterschiedlichen Formaten gedreht wurde, sein. Oder es gibt viele schwarze Stellen im Video.
    • Anschließend wird (je nach Einstellung) am Ende des Dateinamens der Videos ein Tag angefügt: "_ARxxx" xxx ist dabei ARrounded ohne Dezimalpunkt.

    Feedack und Bugs könnt ihr gerne in diesen Thread schreiben.


    Viel Spaß damit,
    Alex

  • Nochmal meine Frage von vorhin, vielleicht ist sie untergegangen:


    Zitat

    Das mit diesem Tool habe ich anderweitig schon gelesen. Hört sich interessant an und auch wenn ich dafür keine Verwendungsmöglichkeit habe, würde mich trotzdem interessieren, wie das bei Wechselformaten funktionieren soll?

  • Moin,
    auch hier nochmal vielen Dank für das Tool das für meine Zwecke wirklich sehr hilfreich ist.


    Alex hatte es im Nachbar-Forum gestern schon vorgestellt, deshalb konnte ich es heute Nacht schon über meine Sammlung laufen lassen.
    Ergebnis: nur ein File konnte nicht erkannt werden, dies stellte sich aber im Nachgang als fehlerhaftes MKV heraus. Also 0% Fehlerquote - und das bei einer 0.1.0-Version! :respect:


    Ich habe alle Ergebnisse auf Plausibilität gecheckt - es hat für alle Filme gepasst. Formatwechsel-Filme wurden auf ein Cinemascope-Format gesetzt - genau so wie ich es möchte.


    Ich möchte mit diesem Tool automatisch meine (noch nicht vorhandene) Maskierung steuern. Also bereits direkt zu Beginn soll die Maskierung an die richtige Position fahren. madVR kann die AR auch erkennen, macht dies aber on-the-fly mit den typischen Schwierigkeiten. Gerade zu Beginn von Filmen dauert es eine Zeit bis es sich eingeruckelt hat (z.B. Extrembeispiel "21" beginnt mit einer aufgehenden Sonne). Und dann möchte ich keine Formatwechsel im Film, die Mskierung soll also fix bleiben.


    Alex´ Tool schreibt die gefundene AR in den Dateinamen. Dieser wird von Kodi an meine Crestron-Steuerung als String geliefert aus dem ich dann den Tag parsen und entsprechende Befehle absetzen kann (Maskierung, Projektor-Settings, etc.).
    Kodi selbst liefert ja leider nur die AR des Dateiformates, bei BR/UHD also immer 16:9.


    Also von mir auf jeden Fall schon 100 Punkte. :big_smile:

  • Sehr gute Idee, dieses Tool! :sbier:


    Ich habe in meinem MovieManager ja schon seit Jahren mein proprietäres Metadaten-Format, das auch das Seitenverhältnis enthält. Es wäre cool, wenn man auf der Kommandozeile oder in einer Textdatei das Ergebnis bekommen könnte. Dann müsste ich nicht mehr in jeden Film reinschauen, den ich ins Archiv aufnehme.

  • Ach ja - noch ein klitzekleiner Feature-Request an Alex:
    Ich würde mich freuen wenn man abschalten (bzw. auswählen) könnte dass automatisch Unterverzeichnisse mitgescannt werden.


    Und dann wäre es cool wenn das ganze rein von der Kommandozeile bedienen könnte. Dann könnte ich das als Job automatisch jede Nacht über die Library laufen lassen.

  • Nochmal meine Frage von vorhin, vielleicht ist sie untergegangen:


    Ich habe eine Cinemascope-Leinwand, die ich rechts und links maskieren kann. Formatwechselfilme spiele ich im breiten Format ab und lasse den Projektor oben und unten schwarze Balken einblenden, damit in den "hohen" Szenen nichts in die Kaschierung fällt. Wenn ich den Film im "hohen" Format schauen würde, wäre das Bild unnötig klein und ich hätte oben und unten schwarze Balken, die ich bei meiner Leinwand nicht maskieren kann. Die andere Lösung wäre Lens-Shift während des Films, das möchte ich aber nicht. Ich verwende bei Formatwechselfilmen also immer das "breite" Format.


    Leute, die eine 16:9 Leinwand haben, würden wahrscheinlich mit Formatwechsel schauen, d.h. immer das "hohe" Format nutzen. Bei denen passt ja auch alles auf die Leinwand (in den "breiten" Szenen dann mit schwarzen Balken oben und unten).


    Aktuell liefert das Programm bei immer das Format, welches am häufigsten in den analysierten Samples vorkommt. Wenn bei einem Wechselformat-Film die Samples z.B. zufällig auf mehr 16:9 Szenen fallen, wird 16:9 erkannt, wenn mehr 2.39 Szenen gesamplet werden, wird 2.39 erkannt.


    Ich plane, eine Option einzubauen, die bei Formatwechselfilmen entweder immer das "breite" Format zurückgibt (für Leute mit Cinemascope-Leinwänden) oder alternativ immer das "hohe" Format liefert (für Leute mit 16:9 Leinwänden). Dafür muss ich allerdings den Algorithmus erweitern, damit die Formatwechsel-Erkennung besser wird und nicht von der zufälligen Wahl der Samples abhängt.


    Macht das Sinn?


    Das ist aber etwas aufwändiger und so viele Formatwechselfilme gibt es ja auch nicht...

  • Zitat

    Ich plane, eine Option einzubauen, die bei Formatwechselfilmen entweder immer das "breite" Format zurückgibt (für Leute mit Cinemascope-Leinwänden) oder alternativ immer das "hohe" Format liefert (für Leute mit 16:9 Leinwänden). Dafür muss ich allerdings den Algorithmus erweitern, damit die Formatwechsel-Erkennung besser wird und nicht von der zufälligen Wahl der Samples abhängt.


    Macht das Sinn?


    Hörst sich für mich nach der praxisnahesten Lösung an.

  • Hi All-Ex,


    coole Idee und für eine bereits bestehende Sammlung komplett ohne solche Ergänzungen sicherlich sehr hilfreich. :respect:
    Ich hatte in der Vergangenheit mal die Idee, diese Infos automatisch aus dem Internet zu beziehen. Ich habs aber dann gelassen und die Dateinamen händisch ergänzt. Wenn bei Videos in Filmlänge kein Format im Namen angegeben ist, dann ist es automatisch 2.35:1 (meine LW hat 2.35:1), heißt: 2.35 und 2.39 müssen nicht ergänzt werden. Damit sind schon mind. 80% dieser Videos abgedeckt. Bei Videos in Episodenlänge ist, wenn nichts angegeben, das Standardformat 1.78:1, da muss also eigentlich so gut wie nie etwas hinzugefügt werden.
    Außerdem habe ich in der Vergangenheit noch die HDR Option inklusive Clippinggrenze angegeben. Durch den HTPC mit MadVR gebe ich aktuell allerdings nur noch die HDR-Option an.
    Wenn ich jetzt nach und anch ein Video hinzufüge, würde ich die AR wahrscheinlich weiterhin händisch ergänzen.
    Aktuell plane ich, die pythonbasierte Schnittstelle zur Kommunikation mit einem JVC-Beamer direkt in Kodi einzubinden (aktuell übernimmt das Ansteuern meine Hausautomation über JSON). Da habe ich gestern mal angefangen, mir Gedanken zu machen.

  • Ach ja - noch ein klitzekleiner Feature-Request an Alex:
    Ich würde mich freuen wenn man abschalten (bzw. auswählen) könnte dass automatisch Unterverzeichnisse mitgescannt werden.


    Und dann wäre es cool wenn das ganze rein von der Kommandozeile bedienen könnte. Dann könnte ich das als Job automatisch jede Nacht über die Library laufen lassen.



    Es wäre cool, wenn man auf der Kommandozeile oder in einer Textdatei das Ergebnis bekommen könnte. Dann müsste ich nicht mehr in jeden Film reinschauen, den ich ins Archiv aufnehme.


    Wäre so ein Format als Ausgabe passend? Das sollte für Menschen gut lesbar und für andere Tools leicht auszuwerten sein.
    Name Video 1.mkv : 2.39
    Name Video 2.mkv : 1.85


    Ich habe eure Feature Requests mal auf die To-Do Liste gesetzt.

  • Prima Idee und Umsetzung für so ein Tool :respect:


    Deswegen habe ich es mir jetzt mal genauer angeschaut und über meine Sammlung laufen lassen.
    Die Filme wurden alle ohne Probleme erkannt. Dabei waren auch bspw. alte 4:3 DVDs, sowie 3D und 4K HDR Filme.
    Also top!


    Danach gab es allerdings ein Problem.
    Die Filme liegen alle in einzelnen Ordnern. Darin dann jeweils eine Datei für den Film, eine .NFO mit Metadaten, sowie die Bilder (Cover, Background,...)
    Leider muss die .NFO-Datei genauso heissen, wie die Filmdatei. Deswegen mussten die nachträglich noch alle händisch umbenannt werden. Die Bilder werden zum Glück in der NFO referenziert und mussten nicht umbenannt werden.


    Das passiert aber zum Glück nur das erste Mal ;)
    Wenn jetzt neue Filme dazu kommen, kann man erst die AR erkennen lassen. Und dann damit die Metadaten generieren lassen.


    Das Metadaten-Format der NFOs kommt ursprünglich von Kodi, wird aber auch von Emby unterstützt.
    Deswegen wäre das schon ein Feature-Request :)
    Es wäre prima, wenn das Tool prüfen könnte, ob neben dem Film eine gleichnamige NFO-Datei liegt. Und falls ja, die direkt mit umbenennt.
    Noch besser wäre sogar, wenn das Format in der Datei, direkt korrigiert werden könnte.


    Nice-to-have wäre auch so was wie eine Ignore-Funktion, bei der einzelne Verzeichnisse ignoriert werden können.
    Kodi macht das bspw. mit Dateien, die einen bestimmten Namen haben (".ignore").


    Ist aber beides wirklich nur nice-to-have.
    Ansonsten funktioniert das Tool schon prima.


    Hab sogar schon mein Setup darauf umgestellt :)
    Vorher hat madVR das AR selbst erkannt. Was leider die bekannten Nachteile bspw. bei Formatwechsel und nicht direkt zu Beginn des Films hat. Noch dazu trat bei mir in letzter Zeit öfters das Problem auf, dass madVR bei einem 21:9 Film am Anfang auf 21:9 gestellt hat. 1s später wieder auf 16:9 gesprungen ist. Um dann direkt wieder auf 21:9 zu gehen. D.h. es wurde dreimal gezoomt, bevor der Film losging.
    Jetzt nimmt madVR den Filenamen und kann direkt zu Beginn das richtige Format einstellen... und auch behalten :respect:


    Falls jemand eine Vorlage für eine solche Regel gebrauchen kann:

    Code
    if ((fileName = "*_AR222.*") or
        (fileName = "*_AR235.*") or
        (fileName = "*_AR239.*") or
        (fileName = "*_AR240.*") or
        (fileName = "*_AR276.*"))
        "21-9"
    else
        "16-9"


    Mir reicht das zur Unterscheidung, welcher der beiden LensPos angefahren werden soll.
    Wer mehr Werte nutzen will, kann die ja direkt aus dem Tool rauskopieren.


    Somit nochmal besten Dank! Das hat das Filmerlebnis wieder ein Stück besser gemacht!

    "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

  • Hi zusammen,



    Prima Idee und Umsetzung für so ein Tool :respect:
    Die Filme wurden alle ohne Probleme erkannt. Dabei waren auch bspw. alte 4:3 DVDs, sowie 3D und 4K HDR Filme.
    Also top!


    Hört sich ja gut an, die wichtigste Funktion läuft also stabil :)




    Ja, das stimmt. Das betrifft vermutlich nicht nur .nfo Dateien von Kodi, sondern auch die Measurement-Files von Anna und Flos MadmeasureHDR Optimizer. Bilder sollten wohl besser nicht umbenannt werden, oder?


    Welche Dateiendungen müssten zusammen mit dem Video umbenannt werden? Passt diese Liste oder fällt euch noch mehr ein?
    [ul]
    [li].nfo (Kodi)[/li]
    [li].measurements (MadmeasureHDR Optimizer)[/li]
    [li].txt (MadmeasureHDR Optimizer)[/li]
    [/ul]
    Ich setze folgendes auf die ToDo Liste: Es soll ein neues Setting geben, so dass der Nutzer die Dateiendungen auflisten kann, die zusammen mit dem Videofile umbenannt werden (aktivierbar / deaktivierbar).



    Noch besser wäre sogar, wenn das Format in der Datei, direkt korrigiert werden könnte.


    Daran habe ich auch schon gedacht. Allerdings kenne ich mich mit den .nfo Files nicht aus. Das Programm müsste das .nfo File komplett parsen, das richtige Setting ändern und den Rest in Ruhe lassen. Wie genau heißt das Setting? Und wie kann ich .nfo Files zum Testen generieren?




    Nice-to-have wäre auch so was wie eine Ignore-Funktion, bei der einzelne Verzeichnisse ignoriert werden können.
    Kodi macht das bspw. mit Dateien, die einen bestimmten Namen haben (".ignore").


    Das sollte nicht so schwierig sein, setze ich auch auf die ToDo-Liste.


    In der nächsten Version wird es folgende Features geben ( Die Zwei, FoLLgoTT)
    [ul]
    [li]Neu: Komplette Steuerung per Kommandozeile (ohne GUI) möglich[/li]
    [li]Neu: Rückgabe der Ergebnisse auch als JSON (zur einfachen Weiterverarbeitung ohne den Dateinamen zu ändern) oder CSV (Excel)[/li]
    [li]Neu: Option "Include subfolders" (standardmäßig aktiv) in der GUI und via Kommandozeile. So können Videos in Unterverzeichnissen künftig auch übersprungen werden.[/li]
    [/ul]
    Ich denke, dass die in den nächsten Tagen fertig wird.


    Viele Grüße,
    Alex

  • Ich hefte mich mal hier mit einer Frage an die "Allgemeinheit":
    Ich bin grade dabei mir ein Kodi-Script (über autoexec.py) zu bauen, dass im Kino direkt meine Technik (Haussteuerung) anspricht und zwar nur dann, wenn eine Verbindung auch benötigt wird.
    Wenn ich mir meine aktuellen Lösungsansätze so anschaue, könnte ich mir vorstellen (noch nicht getestet), mein smarthomeNG JVC-Plugin "komplett" zu integrieren. Kodi könnte dann direkt über LAN alle möglichen/ nötigen Befehle (Lensmemory, Maskierung, Bildmodus, Gammaslot,...) an den JVC Beamer schicken, abhängig ob Video-/ Audiodatei, welche AR im Dateinamen steht, ob HDR im Dateinamen steht, oder ob 4K-Auflösung in der *.nfo-Datei hinterlegt ist. Ich selbst habe die AspectRatio und HDR im Namen der Datei stehen und nutze so unterschiedliche Kalibrierungen für unterschiedliche Bildgrößen. Außerdem gäbe es damit die Möglichkeit, auch einen Filmstopp/ eine Pause zu erkennen und den Beamer nach dem Film wieder in den Standard-Bildmodus zu versetzen.
    Berndffm hat ja ein eigenständiges Plugin für den PC gebastelt (was ich mir zu meiner Schande selbst aber noch nicht angesehen habe). Vielleicht gibts auch sowas generell schon?!? ;)
    Mein Lösungsansatz basiert auf den integrierten Pythonmodulen von Kodi, bedeutet (denke ich): es würde auch nur sauber funktionieren, wenn man den integrierten Player oder eben den sauber eingeabuten DSPlayer nutzt.
    Also:wäre sowas interessant? :unsure:

  • Ich setze folgendes auf die ToDo Liste: Es soll ein neues Setting geben, so dass der Nutzer die Dateiendungen auflisten kann, die zusammen mit dem Videofile umbenannt werden (aktivierbar / deaktivierbar).


    Das wäre prima. Ist auf alle Fälle für einen ersten Lauf über die Sammlung sinnvoll.



    Allerdings kenne ich mich mit den .nfo Files nicht aus. Das Programm müsste das .nfo File komplett parsen, das richtige Setting ändern und den Rest in Ruhe lassen. Wie genau heißt das Setting? Und wie kann ich .nfo Files zum Testen generieren?


    Die NFO Files sind im Grunde nur XML Files, sollten also relativ einfach zu parsen sein bzw müsste es ja Parsing-Frameworks für geben.
    Das Format ist hier erklärt: NFO files/Movies
    Generieren kann man die Files auch mit externen Tools, wie bspw. Media Elch oder Tiny Media Manager
    Eine Beispieldatei habe ich mal angehängt. Darin ist die Stelle bei "<movie><fileinfo><streamdetails><video><aspect>"
    Da kann man eigentlich eintragen, was man will. Das variiert auch bspw. zwischen "16:9" und "1.78". Genauso ist es von den Skins abhängig, ob und wie es angezeigt wird. Da würde ich also einfach den Zahlenwert ("2.35","2.39",...) reinschreiben. Das sollte passen.


    Auf alle Fälle toll, dass du da so aktiv bist :sbier:



    BadSpies(2018).nfo.zip

    "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

  • icebaer: der Anhang fehlt. ;)
    Bei der Änderung der von Kodi angelegten *.nfo-Datei besteht aber grundsätzlich das Problem, dass Kodi diese unter Umständen wieder überschreibt. Genau darin besteht ja das Problem. ;)


    Genau. So auch das Ergebnis meiner Recherchen seinerzeit zu dem Thema. Ich meinte das hatte ich auch mal ausprobiert, man kann ja einfach per Hand einen Wert eintragen. Sobald Kodi dann mal die Metadaten aktualisiert ist die Änderung wieder überschrieben.
    Deshalb ja der Workaround die Information in den Filenamen zu schreiben.

  • Ja, das ist (zumindest bis 17.x) auf jeden Fall so. Ich hab meine Medien ja in einer Datenbank und könnte auch die im Verzeichnis gesicherten *.nfo-Dateien ändern, allerdings würden die beim nächsten sichern auch wieder überschrieben werden. Man hätte immer zwei Versionsstände. Dann wäre es besser, für den Film im Verzeichnis eine eigenständige *.nfo-Datei nur dafür anzulegen; dies kann man sich aber für diese zwei bis drei Infos sparen und dann gleich den Dateinamen hernehmen! ;)

  • Jo, die Lösung mit der Info im Dateinamen funktioniert für mich ja auch prima.
    Allerdings kriegt Kodi selbst dann davon halt wieder nix mit und zeigt in seiner Library halt die falsche AR an.
    Aber eleganter wäre es natürlich schon das separat abzuspeichern, die Lösung im Filenamen hat ja auch so seine Tücken wie weiter oben zu lesen.

Jetzt mitmachen!

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