Mein achtjähriges Abenteuer zur Digitalisierung von 45 Videokassetten. Teil 2

Im ersten Teil wird die mühsame Aufgabe beschrieben, alte Familienvideobänder zu digitalisieren und in einzelne Szenen zu unterteilen.Nachdem alle Clips bearbeitet waren, wollte ich ihre Wiedergabe online so bequem gestalten wie auf YouTube. Da es sich um persönliche Erinnerungen der Familie handelt, können sie nicht auf YouTube hochgeladen werden. Ich benötigte ein privatere, gleichzeitig benutzerfreundlichen und sicheren Hosting-Service.

Schritt 3. Veröffentlichung

ClipBucket, ein Open-Source-Klon von YouTube, den man auf einem eigenen Server installieren kann.

Zunächst habe ich ClipBucket, der sich selbst als Open-Source-Klon von YouTube bezeichnet und den man auf seinem Server installieren kann, ausprobiert.

Mein achtjähriges Abenteuer zur Digitalisierung von 45 Videokassetten. Teil 2

Erstaunlicherweise gibt es bei ClipBucket keine Installationsanleitungen. Dank eines externen Leitfadens habe ich den Installationsprozess automatisiert mit Hilfe von Ansible, einem Konfigurationsmanagement-Tool für Server.

Teilweise lag die Schwierigkeit darin, dass die Installationsskripte von ClipBucket völlig defekt waren. Zu der Zeit arbeitete ich bei Google und durfte aufgrund meiner Vertragsbedingungen nicht zu dem Open-Source-Klon von YouTube beitragen, aber ich habe einen Bug-Report gepostet., aus dem notwendige Anpassungen leicht vorgenommen werden konnten. Monate vergingen, und sie verstanden immer noch nicht, worin das Problem lag. Stattdessen fügten sie ständig mehr Fehler in jeder Version hinzu.

Die Firma ClipBucket arbeitete nach dem Beratungsmodell – sie veröffentlichten ihren Code kostenlos und verlangten eine Gebühr für Hilfe bei der Bereitstellung. Nach und nach wurde mir klar, dass ein Unternehmen, das Geld mit kostenpflichtigem Support verdient, wahrscheinlich nicht sehr daran interessiert ist, dass Kunden das Produkt selbst installieren.

MediaGoblin, eine modernere Alternative

Nach mehreren Monaten der Enttäuschung mit ClipBucket habe ich die verfügbaren Optionen überprüft und gefunden MediaGoblin.

Mein achtjähriges Abenteuer zur Digitalisierung von 45 Videokassetten. Teil 2
MediaGoblin – eine eigenständige Plattform für den Austausch von Mediendateien.

MediaGoblin hat viele Vorteile. Im Gegensatz zu ClipBucket auf dem unansehnlichen PHP ist MediaGoblin in Python geschrieben – in dieser Sprache habe ich viel Programmiererfahrung. Es gibt eine Kommandozeilenoberfläche, die das Hochladen von Videos leicht automatisiert. Am wichtigsten ist, dass MediaGoblin in Form von Docker bereitgestellt wird, was alle Installationsprobleme ausschließt.

Docker — ist eine Technologie, die eine autonome Umgebung für Anwendungen schafft, die überall betrieben werden kann. Ich verwende Docker in vielen meiner Projekte..

Die überraschende Herausforderung der erneuten Dockerisierung von MediaGoblin

Ich dachte, das Deployment des Docker-Images von MediaGoblin wäre ein triviales Unterfangen. Aber es stellte sich nicht ganz so heraus.

Im fertigen Image fehlten zwei wichtige Funktionen:

  • Authentifizierung
    • MediaGoblin erstellt standardmäßig ein öffentliches Medienportal, aber ich benötigte eine Möglichkeit, den Zugriff von Dritten einzuschränken.
  • Transkodierung
    • Jedes Mal, wenn Sie ein Video hochladen, versucht MediaGoblin, es für optimales Streaming neu zu codieren. Wenn das Video ursprünglich für das Streaming vorbereitet ist, verschlechtert die Transkodierung die Qualität.
    • MediaGoblin bietet die Möglichkeit, die Transkodierung über die Konfigurationseinstellungen zu deaktivieren,aber in dem vorhandenen Docker-Image ist dies nicht möglich.

Na gut, kein Problem. Das Docker-Image kommt mit Open Source,also kann man es selbst neu bauen..

Leider wird das Docker-Image nicht mehr aus dem aktuellen Repository von MediaGoblin gebaut.. Ich habe versucht, es mit der Version aus dem letzten erfolgreichen Build zu synchronisieren, aber das hat auch nicht funktioniert. Obwohl ich genau denselben Code verwendet habe, haben sich die externen Abhängigkeiten von MediaGoblin geändert, was den Build gestört hat. Nach vielen Stunden habe ich den 10- bis 15-minütigen Build-Prozess von MediaGoblin immer wieder durchlaufen, bis es schließlich funktionierte.

Einige Monate später ist dasselbe passiert. In den letzten zwei Jahren hat die Abhängigkeitskette von MediaGoblin mehrfach meinen Build zum Scheitern gebracht, und das letzte Mal geschah es gerade, als ich diesen Artikel schrieb. Am Ende habe ich ein eigenes Fork von MediaGoblin c mit hartcodierten Abhängigkeiten und explizit angegebenen Versionen der Bibliotheken veröffentlicht. Mit anderen Worten, anstatt die fragwürdige Behauptung aufzustellen, dass MediaGoblin mit jeder Version von celery >= 3.0 funktioniert, habe ich eine spezifische Abhängigkeit auf die Version celery 4.2.1festgelegt, da ich MediaGoblin mit dieser Version getestet habe. Es scheint, dass das Produkt einen Mechanismus für reproduzierbare Buildsbenötigt, aber damit habe ich mich noch nicht beschäftigt.

So oder so, nach vielen Stunden des Kämpfens konnte ich schließlich MediaGoblin in einem Docker-Image erstellen und konfigurieren. Es war nicht schwer, das unnötige Transkodieren zu überspringen. und Nginx für die Authentifizierung einrichten.

Schritt 4. Hosting

Da MediaGoblin auf meinem lokalen Computer unter Docker lief, war der nächste Schritt das Deployment auf einem Cloud-Server, damit die Familie die Videos ansehen konnte.

MediaGoblin und das Problem der Videostorage

Es gibt viele Plattformen, die ein Docker-Image akzeptieren und es unter einer öffentlichen URL hosten. Das Problem ist, dass zusätzlich zur Anwendung 33 GB Videodaten veröffentlicht werden mussten. Man könnte sie in das Docker-Image hartkodieren, aber das wäre unpraktisch und unschön. Eine einzige Konfigurationsänderung würde ein erneutes Deployment von 33 GB Daten erfordern.

Als ich ClipBucket verwendet habe, habe ich das Problem gelöst mit gcsfuse — ein Tool, das es dem Betriebssystem ermöglicht, Ordner im Google Cloud Storage wie normale Pfade im Dateisystem zu mounten. Ich habe die Videodateien in Google Cloud gespeichert und gcsfuse verwendet, um sie in ClipBucket als lokale Dateien anzuzeigen.

Der Unterschied lag darin, dass ClipBucket auf einer echten virtuellen Maschine lief, während MediaGoblin in einem Docker-Container arbeitete. Hier gestaltete sich das Mounten von Dateien aus dem Cloud-Speicher als deutlich komplizierter. Ich habe Dutzende Stunden damit verbracht, alle Probleme zu lösen, und darüber geschrieben. einen ganzen Blog-Post..

Mein achtjähriges Abenteuer zur Digitalisierung von 45 Videokassetten. Teil 2
Die ursprüngliche Integration von MediaGoblin mit dem Google Cloud-Speicher, über die ich 2018 berichtete.

Nach wenigen Wochen der Feinabstimmung aller Komponenten funktionierte alles. Ohne Änderungen am Code von MediaGoblin vorzunehmen, konnte ich es dazu bringen, Medien-Dateien im Google Cloud-Speicher zu lesen und zu schreiben.

Das einzige Problem war, dass MediaGoblin unverschämt langsam wurde. Das Laden von Video-Vorschaubildern auf die Hauptseite dauerte ganze 20 Sekunden. Wenn Sie während der Wiedergabe eines Videos vor- und zurücksprangen, stoppte MediaGoblin für endlose 10 Sekunden, bevor die Wiedergabe wieder fortgesetzt wurde.

Das Hauptproblem war, dass Videos und Bilder den Benutzer über einen langen, umständlichen Weg erreichten. Sie mussten aus dem Google Cloud-Speicher über gcsfuse zu MediaGoblin und Nginx gelangen, bevor sie im Browser des Benutzers angezeigt wurden. Der Hauptengpass war gcsfuse, das nicht für schnelle Performance optimiert ist. Die Entwickler weisen bereits auf der Hauptseite des Projekts auf hohe Verzögerungen bei der Nutzung des Tools hin:

Mein achtjähriges Abenteuer zur Digitalisierung von 45 Videokassetten. Teil 2
Warnungen über niedrige Leistung in der gcsfuse-Dokumentation

Idealerweise sollte der Browser die Dateien direkt aus Google Cloud abrufen, ohne alle Zwischenschichten. Wie lässt sich das umsetzen, ohne sich in den Code von MediaGoblin zu vertiefen und ohne komplexe Integrationslogik für Google Cloud hinzuzufügen?

Der sub_filter-Trick in nginx

Zum Glück fand ich eine einfache, wenn auch ein wenig hässliche Lösung. Ich fügte der Konfiguration default.conf in Nginx diese Filterregel hinzu:

sub_filter "/mgoblin_media/media_entries/" "https://storage.googleapis.com/MY-GCS-BUCKET/media_entries/";
sub_filter_once off;

In meiner Nginx-Installation fungierte Nginx als Proxy zwischen MediaGoblin und dem Endbenutzer. Die oben genannte Direktive weist Nginx an, alle HTML-Antworten von MediaGoblin zu durchsuchen und zu ersetzen, bevor sie an den Endbenutzer weitergeleitet werden. Nginx ersetzt alle relativen Pfade zu MediaGoblin-Medieninhalten durch URLs aus dem Google Cloud-Speicher.

Zum Beispiel generiert MediaGoblin folgendes HTML:

Nginx ändert die Antwort:

Jetzt passt alles zusammen:

Mein achtjähriges Abenteuer zur Digitalisierung von 45 Videokassetten. Teil 2
Nginx schreibt Antworten von MediaGoblin um, sodass die Kunden Medieninhalte direkt aus dem Google Cloud-Speicher anfordern können.

Das Beste an meiner Lösung ist, dass sie keine Änderungen am Code von MediaGoblin erfordert. Die zweizeilige Direktive von Nginx integriert MediaGoblin und Google Cloud problemlos, obwohl diese Dienste nichts voneinander wissen.

Hinweis: Diese Lösung erfordert, dass die Dateien im Google Cloud-Speicher für alle lesbar sind. Um das Risiko unbefugten Zugriffs zu minimieren, verwende ich einen langen, zufälligen Bucket-Namen (zum Beispiel, mediagoblin-39dpduhfz1wstbprmyk5ak29) und stelle sicher, dass die Zugriffskontrollrichtlinie des Buckets keine unautorisierten Benutzer erlaubt, den Inhalt des Verzeichnisses anzusehen.

Das Endprodukt

Zu diesem Zeitpunkt hatte ich eine vollständige, funktionierende Lösung. MediaGoblin lief problemlos in seinem eigenen Container auf der Google Cloud-Plattform, sodass es nicht oft repariert oder aktualisiert werden musste. Alles in meinem Prozess war automatisiert und reproduzierbar, was einfache Anpassungen oder die Rückkehr zu früheren Versionen ermöglichte.

Meine Familie fand es sehr angenehm, wie einfach es war, Videos anzusehen. Mit dem oben beschriebenen Nginx-Hack wurde das Arbeiten mit Videos so schnell wie auf YouTube.

Der Anzeigebildschirm sieht wie folgt aus:

Mein achtjähriges Abenteuer zur Digitalisierung von 45 Videokassetten. Teil 2
Inhalt des Familienvideo-Verzeichnisses nach dem Tag „Beste“

Ein Klick auf das Miniaturbild zeigt folgenden Bildschirm an:

Mein achtjähriges Abenteuer zur Digitalisierung von 45 Videokassetten. Teil 2
Ansehen eines einzelnen Clips auf dem Medienserver

Nach vielen Jahren der Arbeit war es für mich unglaublich erfreulich, meinen Verwandten die Möglichkeit zu geben, unsere Videos in einem ebenso benutzerfreundlichen Interface wie YouTube anzusehen, was ich ursprünglich wollte.

Bonus: Kostensenkung auf unter 1 Euro pro Monat

Sie schauen selten zuhause Videos, nur alle paar Monate. Meine Familie generierte insgesamt etwa 20 Stunden Traffic im Jahr, aber der Server lief rund um die Uhr. Ich bezahlte monatlich 15 € für einen Server, der 99,7 % der Zeit ungenutzt war.

Ende 2018 brachte Google ein Produkt heraus Cloud Run. Das Feature war die so schnelle Bereitstellung von Docker-Containern, dass die Anwendung auf HTTP-Anfragen antworten konnte. Das heißt, der Server konnte im Standby-Modus bleiben und nur dann gestartet werden, wenn jemand darauf zugreifen wollte. Für selten genutzte Anwendungen wie meine sanken die Kosten von 15 € pro Monat auf nur einige Cent im Jahr.

Aus Gründen, an die ich mich nicht mehr erinnere, funktionierte Cloud Run nicht mit meinem MediaGoblin-Image. Aber mit dem Erscheinen von Cloud Run erinnerte ich mich daran, dass Heroku eine ähnliche Dienstleistung kostenlos anbietet, und ihre Tools viel benutzerfreundlicher sind als die von Google.

Mit einem kostenlosen Anwendungsserver sind die einzigen Kosten für die Datenspeicherung. Der Standard Google Cloud Storage kostet 2,3 Cent/GB. Das Videoarchiv belegt 33 GB, daher zahle ich insgesamt nur 77 Cent im Monat.

Mein achtjähriges Abenteuer zur Digitalisierung von 45 Videokassetten. Teil 2
Die Kosten für diese Lösung betragen nur 0,77 $ pro Monat.

Tipps für alle, die es ausprobieren möchten.

Offensichtlich hat mein Prozess viel Zeit in Anspruch genommen. Aber ich hoffe, dass dieser Artikel Ihnen hilft, 80-90 % der Arbeit bei der Digitalisierung und Veröffentlichung von Heimvideos zu sparen. In einem separaten Abschnitt finden Sie eine detaillierte Schritt-für-Schritt-Anleitung zum gesamten Prozess, aber hier sind einige allgemeine Tipps:

  • Bewahren Sie beim Digitalisieren und Bearbeiten so viele Metadaten wie möglich auf.
    • Wertvolle Informationen sind oft auf den Etiketten von Videokassetten aufgezeichnet.
    • Notieren Sie, welcher Clip von welcher Kassette und in welcher Reihenfolge aufgenommen wurde.
    • Schreiben Sie das Aufnahmedatum auf, das möglicherweise im Video angegeben ist.
  • Erwägen Sie die Bezahlung professioneller Digitalisierungsdienste.
    • Es wird äußerst schwierig und teuer sein, in Bezug auf die Digitalisierungsqualität mit ihnen zu konkurrieren.
    • Aber halten Sie sich von einer Firma namens EverPresent fern (schreiben Sie mir, wenn Sie weitere Details benötigen).
  • Wenn Sie die Digitalisierung selbst durchführen, kaufen Sie eine HDD.
    • Unkomprimiertes Standardvideo benötigt 100-200 MB pro Minute.
    • Ich habe alles auf meinem Synology DS412+ (10 TB).
  • Speichern Sie die Metadaten in einem gängigen Format, das nicht an eine bestimmte Anwendung gebunden ist.
    • Beschreibung der Clips, Zeitcodes, Daten usw.
    • Wenn Sie Metadaten im Format einer bestimmten Anwendung speichern (oder noch schlimmer, gar nicht speichern), werden Sie Ihre Arbeit nicht wiederverwenden können, wenn Sie sich entscheiden, eine andere Lösung zu nutzen.
    • Während der Bearbeitung sehen Sie viele nützliche Metadaten im Video. Sie verlieren diese, wenn Sie sie nicht speichern.
      • Was geschieht im Video?
      • Wer ist da drauf?
      • Wann wurde das aufgenommen?
  • Markieren Sie Ihre Lieblingsvideos.
    • Ehrlich gesagt sind die meisten Heimvideos ziemlich langweilig.
    • Ich verwende das Tag „Best of“ für meine Lieblingsclips und schaue sie mir an, wenn ich lustige Videos sehen möchte.
  • Organisieren Sie so früh wie möglich eine umfassende Lösung, damit der Prozess von Anfang bis Ende reibungslos verläuft.
    • Ich habe zuerst versucht, alle Kassetten zu digitalisieren, dann alle Kassetten zu schneiden usw.
    • Schade, dass ich nicht mit einem einzigen Tape angefangen habe und die gesamte Arbeit damit gemacht habe. Dann hätte ich verstanden, welche Entscheidungen und in welchen Phasen sie das Endergebnis beeinflussen.
  • Minimieren Sie die Neukodierung.
    • Jedes Mal, wenn Sie einen Clip bearbeiten oder neu kodieren, verschlechtern Sie dessen Qualität.
    • Digitalisieren Sie das Rohmaterial in höchster Qualität und kodieren Sie jeden Clip genau einmal in das Format, das die Browser nativ wiedergeben.
  • Verwenden Sie die einfachste Lösung, die möglich ist, um Videoclips zu veröffentlichen.
    • Rückblickend erscheint MediaGoblin als ein zu komplexes Werkzeug für ein recht einfaches Szenario zur Erstellung von Webseiten mit einem statischen Satz von Videodateien.
    • Wenn ich alles von vorne beginnen würde, würde ich einen statischen Site-Generator wie Hugo, Jekyll oder Gridsome.
  • verwenden.

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster