Media Stubs Generator für Kodi/XMBC aus My Movies

Aufgrund der Bekanntgabe von Microsoft, das MCE nicht mehr weiter zu entwickeln, bin ich zwischenzeitlich komplett auf Kodi gewechselt. Da Kodi ja eine eigene Medienverwaltung hat und ich ja den Zwischenschritt von MyMovies zu Kodi vollzogen hatte, habe ich MyMovies inzwischen abgeschafft. Das Projekt wird also nicht mehr weiter entwickelt.

Seit mehreren Jahren benutze ich einen Medien PC (auch HTPC genannt) zur Wiedergabe von Medieninhalten auf Basis von Windows (7, 8 und nun 8.1) und dem Windows Media Center (MC). Leider wird dieses an sich nicht schlechte Feature sehr stiefmütterlich von Microsoft entwickelt. Seit Windows 8 wäre natürlich auch die neue UI eine Möglichkeit für das Wohnzimmer, da diese mit den Kacheln an sich auch sehr ansprechend aussieht. Leider sind hier nicht alle Apps (allen voran die Musikwiedergabe) mit einer Fernbedienung steuerbar.

Meine umfangreiche Sammlung von DVDs und Blu-Rays habe ich in My Movies erfasst. Dieses Programm bietet eine sehr schöne Integration in das MCE sowie ein paar nette Funktionen wie eine Online Collection, Synchronisation auf das Handy oder Reports im PDF-Format. Aus diesem Grund möchte ich dieses Programm weiterhin benutzen.

Als Alternative für das MCE würde Kodi (früher XBMC) in Frage kommen. Dieses Programm hat einige sehr interessante Funktionen zu bieten. Leider gibt es keine wirkliche Integration von My Movies in dieses. Allerdings werden Offline Medien mit sog. Pseudo Dateien (stub files) in die integrierte Filmbibliothek integriert. Das ist ein Ansatzpunkt, den ich hier aufgreife, um meinen My Movies Datenbestand hier zu übernehmen.

Motivation

Für die Realisierung dieses Projektes waren mir folgende Punkte wichtig:

  • Übernahme aller Filme von My Movies in Kodi
  • Übernahme der vorhandenen Serien in Kodi
  • Verwendung von Boardmitteln, d. h. es sollte kein zusätzlicher Compiler etc. nötig sein
  • Anzeige der vorhandenen offline Titel sowie Filme auf Wechselmedien

Für die Filme und die Serien können wie weiter oben beschrieben stub files erzeugt werden. Voraussetzung ist hier ein sauberer Datenbestand in My Movies. Dieser war jedoch auch schon Voraussetzung für eine saubere Anzeige im MCE.

Da My Movies einen Microsoft SQL Server verwendet und ich bewusst auf ein selbst geschriebenes Programm verzichten wollte, bot sich hier die Realisierung mit T-SQL an. Die Aktionen würden als direkt im SQL Server ausgeführt werden welcher dann die Dateien bzw. Ordnerstrukturen erzeugen sollte.

Realisierung

Im Prinzip erzeuge ich eine Zeichenkette, welche in eine Datei geschrieben werden soll. Hierzu greife ich auf eine stored procedue von Phil Factor zurück. Leider hat die dort publizierte Funktion einen kleinen Fehler. Er beendet am Ende zwei Mal den TextStream und vergisst den FileStream. Das hat zur Folge, das maximal 255 Objekte erzeugt werden können und dann das Skript abbricht.

Was ebenfalls ein Problem ist, ist dass das Originalskript UTF-8 Dateien erzeugt. Die zwei unsichbaren Hexzeichen FF FE am Anfang sorgen dafür, dass Kodi die Dateien zwar findet aber die Message nicht ausliest und somit der Aufbewahrungsort nicht angezeigt wird. Aus diesem Grund muss die Erzeugungsmethode geändert werden (UTF-8 Parameter auf false).

Diese Prozedur müssen wir nun in die My Movies Datenbank bekommen. Entweder installiert man auf einen Rechner das SQL Server Management Studio oder aber man behilft sich mit einem kleinen Hilfsprogramm. Ich verwende hierfür letzteres. Das Open Source Programm Query Express Plus erlaubt u. a. Zugriff auf SQL Server, benötigt keine Installation und ist dazu noch sehr schnell. Für unsere Anwendung hier ist es ausreichend.

Verbinden müssen wir uns (auf der lokalen Maschine) wie folgt:

  • Server bzw. Instanz: .\mymovies
  • Windows Authentication

Dadurch haben wir automatisch administrative Rechte und können auch die obige Prozedur einspielen.

Kommen wir nun zum eigentlich stub file Generator. Auch das ist ein SQL Skript.

Dieser muss jedoch etwas angepasst werden und man sollte (zumindest grob) verstehen, wie er funktioniert.

Da das Skript Ordner und Dateien anlegen will müssen div. Sicherheitsfunktionen im SQL Server ausgeschaltet werden. Dies geschieht in den ersten Zeilen. Am Ende des Skriptes werden diese wieder aktiviert um keine Sicherheitslücken offen zu lassen.

Anschließend werden einige Variablen definiert. Wichtig sind die drei Variablen @Path, @Filme und @Serien. Diese müssen angepasst werden! Die erste definiert den Grundordner wo die stub files erzeugt werden sollen. Bei mir im Ordner "Öffentliche Videos" direkt auf dem System. Die Variablen @Filme und @Serien definieren dann jeweils einen Unterordner für Filme und die TV-Serien. Das ist wichtig weil Kodi ja jeweils andere Scraper hier verwenden muss. Diese Ordner müssen angelegt werden.

Dann geht es auch schon los mit der Ermittlung aller Filme welche nicht als Serie markiert sind (die kommen ja später extra) und die keine Box sind (diese haben ja Untertitel und werden nicht benötigt).

Die Vorgehensweise ist relativ simple. Alle Filme werden ermittelt, danach einer nach dem anderen in einem sog. Cursor seq. durchlauffen und die stub Datei geschrieben. Ich habe bei mir den Aufbewahrungsort in die sog. Kollektion geschrieben. Deswegen wird diese auch verwendet. Grund ist, dass diese in My Movies auch direkt im MCE angezeigt wurde. Sollte jemand jedoch das Feld "Aufbewahrungsort" unter "Persönliche Daten" verwenden, so wird dieses unter @Loc auch mit ermittelt und kann sofort verwendet werden.

Der nächste Cursor behandelt die Serien. Die Selektion ist hier etwas komplizierter aber das Vorgehen im Prinzip das Gleiche. Bei Serien werden jedoch nicht nur stub files erzeugt sondern auch eine Ordnerstuktur. Keibertz hat das hier schön beschrieben (Post 3 für Filme, 4 und 5 für Serien).

Auch für Serien gilt, dass ich als Aufbewahrungsort die Kollektion verwende. Das ist hier sogar ein Vorteil gegenüber My Movies welches das nicht anzeigt. @Loc ist aber auch hier wiederum vorhanden.

Das SQL Skript können wir nun im Query Express oder im Management Studio (nachdem die Pfade angepasst und die Ordner angelegt wurden!) ausführen. Wenn alles gut geht werden die stub files angelegt sowie bei den Serien die Ordner erzeugt.

Das aktivieren bzw. deaktivieren der Sicherheitsfunktionen bringt eine Meldung, was jedoch normal ist. Auch wenn das Skript versucht einen Ordner für eine Serie erneut zu erzeugen, der bereits existiert wird eine Meldung ausgegeben. Auch das ist normal und kann ignoriert werden.

Integration in Kodi

Sind die Ordner und Dateien alles erzeugt worden dann können wir diese in Kodi einbinden. Dazu gehen wir in den Punkt Video auf Dateien und fügen die zwei Ordner hinzu. Als Inhaltstyp wählen wir beim Filme Ordner "Filme" und beim Serien Ordner "TV-Serie" aus.

Welchen Scraper man benutzt muss jeder selber entscheiden. Ich habe die besten Erfahrungen mit dem TMDb Scraper (Filme) und dem TVDB Scraper (Serien) gemacht. Der My Movies Scraper hat entgegen meiner Erwartungen und dem Werbeversprechen auf der Webseite des Herstellers sehr viele falsche Ergebnisse gebracht. Wichtig! Die Einstellungen beim Scraper richtig treffen! Vermutlich werden die meisten hier deutsche Inhalte wollen und sollten die Scraper auch auf "de" einstellen. Ansonsten kommen nur englische Texte zurück.

Sind alle Einstellungen getroffen sollten die Scraper ihre Arbeit tun und die Filminformationen laden...

Nacharbeiten

Jetzt gibt es noch ein paar Nacharbeiten zu erledigen. So müssen wir schauen, ob alle Filme wirklich gefunden worden sind. Dazu gehen wir unter "Videos" in den Punkte "Dateien" und wählen dort das Verzeichnis unserer Stub Videodateien aus. Die Dateien die er erkannt hat zeigen nun den Namen des Filmes, nicht erkannte zeigen den Dateinamen inkl. der Endung .disc.

Es kann mehrere Gründe geben, dass ein Film nicht erkannt wurde:

  • Das Produktionsjahr in My Movies ist falsch. Bei mir war dies der am meisten vorkommende Grund. Die Lösung ist relativ einfach. Das Datum muss in My Movies einfach korrigiert werden. Das Datum erhalte ich über die IMDB oder die TMDB. Wenn ich es lokal korrigiert habe bitte auch die Daten hochladen damit alle davon profitieren! Diese Titel lässt man in Kodi einfach stehen da diese automatisch später erkannt werden (siehe weiter unten).
  • Zusätze im Namen wie z. B. "in 3D". Auch dies ist ein Problem. My Movies verlangt, dass die Titel genauso erfasst werden, wie diese auf dem Datenträger stehen. Der Film "Konferenz der Tiere in 3D" heißt aber nur "Konferenz der Tiere". Da es jedoch Filme gibt, welche "in 3D" tatsächlich im Namen haben kann man das nicht einfach raus filtern. In diesem Fall muss man in Kodi den Titel einfach überschreiben. Dazu drückt man "c" für das Kontextmenü und wenn die Eingabe für den Titel des Filmes erscheint löscht man alles weg bis auf den eigentlichen Titel. Dann sollte der Film gefunden werden.
  • Filmboxen. Nun das ist an sich kein wirkliches Problem. Die müssen nur als Boxen mit entsprechenden Untertitel in My Movies erfasst werden und schon sind diese auch sauber als stub files vorhanden.
  • Kein Filmtitel vorhanden. Selten aber kommt vor. Vor allem bei Dokumentationen. Bisher keine Lösung vorhanden.

Damit wir die Änderungen immer wieder in stub files übernehmen können verwende ich eine Batch Datei. Diese macht folgendes.

  1. Löschen der Film stubs
  2. Löschen der Serien stubs
  3. Aufrufen des SQL Skriptes zum anlegen aller stubs

Warum? Nun es kann sein das Filme nicht mehr vorhanden sind bzw. die stubs jetzt einen neuen Namen haben (passiert z. B. durch das Ändern des Produktionsjahres, s. o.). Aus diesem Grund lösche ich hier alle .disk Dateien. Gelöscht werden aber nur diese da man ja unter Umständen andere Dateien wie z. B. .nvo Dateien angelegt hat.

Achtung! Auch diese Datei muss ggf. angepasst werden! So befinden sich das SQL Skript und eine Batchdatei unter "C:\Progs\StubGenerator\" und gelöscht werden alle *.disc-Dateien unter "C:\Users\Public\Videos\". Werden andere Pfade verwendet müssen diese angepasst werden.

Selbst wenn alle Dateien neu generiert werden, so läd der Scraper nur neue Dateien. Man könnte also theoretisch die stubs bei jeden Systemstart neu generieren und hier auch von Kodi die Bibliothek neu einlesen lassen. Ob es Sinn macht überlasse ich jeden selbst.

Changelog

Änderungen am Skript habe ich im sog. Changelog dokumentiert.

Kommentare:

Was ist die Summe aus 5 und 7?