Meine achtjährige Suche nach der Digitalisierung von 45 Videokassetten. Teil 2

Der erste Teil beschreibt die schwierige Aufgabe, alte Familienvideos zu digitalisieren und in einzelne Szenen zu zerlegen.. Nachdem ich alle Clips bearbeitet hatte, wollte ich ihre Online-Ansicht genauso bequem gestalten wie auf YouTube. Da es sich um persönliche Erinnerungen der Familie handelt, können diese nicht auf YouTube selbst gepostet werden. Wir brauchen ein privateres Hosting, das sowohl bequem als auch sicher ist.

Schritt 3: Veröffentlichung

ClipBucket, ein Open-Source-YouTube-Klon, der auf Ihrem eigenen Server installiert werden kann

Das erste, was ich versucht habe ClipEimer, das sich selbst als Open-Source-YouTube-Klon bezeichnet, den Sie auf Ihrem Server installieren können.

Meine achtjährige Suche nach der Digitalisierung von 45 Videokassetten. Teil 2

Überraschenderweise verfügt ClipBucket über keine Installationsanweisungen. Dank an an das externe Management я automatisierte den Installationsprozess über Ansible, ein Tool zur Verwaltung der Serverkonfiguration.

Ein Teil der Schwierigkeit bestand darin, dass die ClipBucket-Installationsskripte völlig fehlerhaft waren. Damals habe ich arbeitete bei Google und gemäß den Vertragsbedingungen hatte ich nicht das Recht, zum Open-Source-YouTube-Klon beizutragen, aber ich habe einen Fehlerbericht gepostet, anhand derer die notwendigen Korrekturen leicht vorgenommen werden konnten. Monate vergingen und sie verstanden immer noch nicht, wo das Problem lag. Stattdessen haben sie alles hinzugefügt besser Fehler in jeder Version.

ClipBucket basierte auf einem Beratungsmodell – sie stellten ihren Code kostenlos zur Verfügung und berechneten für die Unterstützung bei der Bereitstellung eine Gebühr. Allmählich wurde mir klar, dass ein Unternehmen, das mit bezahltem Support Geld verdient, wahrscheinlich nicht sehr daran interessiert ist, dass Kunden das Produkt selbst installieren.

MediaGoblin, eine modernere Alternative

Nach Monaten der Frustration mit ClipBucket habe ich mir die verfügbaren Optionen angesehen und bin fündig geworden MedienGoblin.

Meine achtjährige Suche nach der Digitalisierung von 45 Videokassetten. Teil 2
MedienGoblin ist eine Offline-Medien-Sharing-Plattform

MediaGoblin hat viele Extras. Im Gegensatz zu ClipBucket in unansehnlichem PHP ist MediaGoblin in Python geschrieben, einer Sprache, mit der ich viel Programmiererfahrung habe. Essen Befehlszeilenschnittstelle, mit dem Sie das Herunterladen von Videos ganz einfach automatisieren können. Am wichtigsten ist, dass MediaGoblin mit dabei ist Docker-Image, wodurch jegliche Installationsprobleme beseitigt werden.

Docker ist eine Technologie, die eine autonome Umgebung schafft, in der eine Anwendung überall ausgeführt werden kann. Ich verwende Docker in viele seiner Projekte.

Die überraschende Schwierigkeit, MediaGoblin erneut anzudocken

Ich ging davon aus, dass die Bereitstellung des MediaGoblin-Docker-Images eine triviale Aufgabe sein würde. Naja, so hat das nicht ganz geklappt.

Das fertige Image enthielt nicht zwei notwendige Funktionen:

  • Authentifizierung
    • MediaGoblin erstellt standardmäßig ein öffentliches Medienportal und ich brauchte eine Möglichkeit, den Zugriff auf Außenstehende zu beschränken.
  • Transkodierung
    • Jedes Mal, wenn Sie ein Video herunterladen, versucht MediaGoblin, es für optimales Streaming zu transkodieren. Wenn das Video zunächst zum Streamen bereit ist, verschlechtert sich durch die Transkodierung die Qualität.
    • MediaGoblin bietet Deaktivieren der Transkodierung über Konfigurationsoptionen, aber dies ist in einem vorhandenen Docker-Image nicht möglich.

Gut, kein Problem. Das Docker-Image ist im Lieferumfang enthalten Open Source, also ist es möglich bau es selbst wieder auf.

Leider wird das Docker-Image nicht mehr aus dem aktuellen erstellt. MediaGoblin-Repository. Ich habe versucht, es mit der Version des letzten erfolgreichen Builds zu synchronisieren, aber auch das ist fehlgeschlagen. Obwohl ich genau denselben Code verwendet habe, haben sich die externen Abhängigkeiten von MediaGoblin geändert, wodurch der Build unterbrochen wurde. Nach Dutzenden von Stunden habe ich den 10-15-minütigen MediaGoblin-Build-Prozess immer wieder durchlaufen, bis es endlich funktionierte.

Ein paar Monate später passierte dasselbe. Insgesamt hat die MediaGoblin-Abhängigkeitskette meinen Build in den letzten Jahren mehrmals unterbrochen, und das letzte Mal passierte dies gerade, als ich diesen Artikel schrieb. Endlich habe ich es veröffentlicht eigener Fork von MediaGoblin c hartcodierte Abhängigkeiten und explizit angegebene Versionen von Bibliotheken. Mit anderen Worten, statt der zweifelhaften Behauptung, dass MediaGoblin mit jeder Version funktioniert Sellerie >= 3.0, ich habe eine bestimmte Versionsabhängigkeit installiert Sellerie 4.2.1weil ich MediaGoblin mit dieser Version getestet habe. Es sieht so aus, als ob das Produkt benötigt wird reproduzierbarer Baumechanismus, aber ich habe es noch nicht getan.

Wie auch immer, nach vielen Stunden des Kampfes war ich endlich in der Lage, MediaGoblin in einem Docker-Image zu erstellen und zu konfigurieren. Da war es schon einfach Überspringen Sie unnötige Transkodierungen и Installieren Sie Nginx zur Authentifizierung.

Schritt 4. Hosting

Da MediaGoblin Docker auf meinem lokalen Computer ausführte, bestand der nächste Schritt darin, es auf einem Cloud-Server bereitzustellen, damit die Familie das Video ansehen konnte.

MediaGoblin und das Videospeicherproblem

Es gibt viele Plattformen, die ein Docker-Image nehmen und es unter einer öffentlichen URL hosten. Der Haken ist, dass zusätzlich zur App selbst 33 GB an Videodateien veröffentlicht werden mussten. Es wäre möglich, sie fest in ein Docker-Image zu codieren, aber das wäre umständlich und hässlich. Das Ändern einer Konfigurationszeile würde die erneute Bereitstellung von 33 GB Daten erfordern.

Als ich ClipBucket verwendet habe, habe ich das Problem mit gelöst gcsfuse - ein Dienstprogramm, das es dem Betriebssystem ermöglicht, Verzeichnisse als reguläre Pfade zum Dateisystem in den Google Cloud-Cloudspeicher hochzuladen. Ich habe die Videodateien in Google Cloud gehostet und mit gcsfuse dafür gesorgt, dass sie in ClipBucket als lokale Dateien angezeigt werden.

Der Unterschied bestand darin, dass ClipBucket in einer echten virtuellen Maschine lief, während MediaGoblin in einem Docker-Container lief. Hier gestaltete sich das Mounten von Dateien aus dem Cloud-Speicher deutlich schwieriger. Ich habe Dutzende Stunden damit verbracht, alle Probleme zu lösen und darüber geschrieben ganzer Blogbeitrag.

Meine achtjährige Suche nach der Digitalisierung von 45 Videokassetten. Teil 2
Die erste Integration von MediaGoblin mit dem Google Cloud-Speicher, von der ich spreche im Jahr 2018 erzählt

Nachdem ich mehrere Wochen lang alle Komponenten angepasst hatte, funktionierte alles. Ohne irgendwelche Änderungen am Code von MediaGoblin vorzunehmen, habe ich ihn dazu gebracht, Mediendateien zu lesen und in den Google Cloud-Speicher zu schreiben.

Das einzige Problem war, dass MediaGoblin unglaublich langsam wurde. Es dauerte ganze 20 Sekunden, bis die Video-Miniaturansichten auf die Startseite geladen wurden. Wenn Sie beim Ansehen eines Videos vorwärts springen, pausiert MediaGoblin endlose 10 Sekunden, bevor es mit der Wiedergabe fortfährt.

Das Hauptproblem bestand darin, dass die Videos und Bilder einen langen Umweg zum Nutzer zurücklegten. Sie mussten vom Google Cloud-Speicher über gcsfuse zu MediaGoblin und Nginx wechseln – und gelangten erst dann zum Browser des Benutzers. Der Hauptengpass war gcsfuse, das nicht auf Geschwindigkeit optimiert ist. Die Entwickler warnen direkt auf der Hauptseite des Projekts vor großen Verzögerungen beim Betrieb des Versorgungsunternehmens:

Meine achtjährige Suche nach der Digitalisierung von 45 Videokassetten. Teil 2
Warnungen über geringe Leistung in der gcsfuse-Dokumentation

Idealerweise sollte der Browser Dateien direkt aus Google Cloud abrufen und dabei etwaige Zwischenschichten umgehen. Wie können Sie dies tun, ohne in die MediaGoblin-Codebasis einzutauchen oder komplexe Google Cloud-Integrationslogik hinzuzufügen?

Sub_filter-Trick in Nginx

Zum Glück habe ich jedoch eine einfache Lösung gefunden leicht hässlich. Ich habe die Konfiguration „default.conf“ in Nginx ergänzt so ein Filter:

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

In meinem Setup fungierte Nginx als Proxy zwischen MediaGoblin und dem Endbenutzer. Die obige Anweisung weist Nginx an, alle MediaGoblin-HTML-Antworten zu durchsuchen und zu ersetzen, bevor sie dem Endbenutzer bereitgestellt werden. Nginx ersetzt alle relativen Pfade zu MediaGoblin-Mediendateien durch URLs aus dem Google Cloud-Speicher.

MediaGoblin generiert beispielsweise HTML wie folgt:

<video width="720" height="480" controls autoplay>
  <source
    src="/mgoblin_media/media_entries/16/Michael-riding-a-bike.mp4"
    type="video/mp4">
</video>

Nginx ändert die Antwort:

<video width="720" height="480" controls autoplay>
  <source
    src="https://storage.googleapis.com/MY-GCS-BUCKET/media_entries/16/Michael-riding-a-bike.mp4"
    type="video/mp4">
</video>

Jetzt klappt alles wie erwartet:

Meine achtjährige Suche nach der Digitalisierung von 45 Videokassetten. Teil 2
Nginx schreibt die Antworten von MediaGoblin um, sodass Kunden Mediendateien direkt aus dem Google Cloud-Speicher anfordern können

Das Beste an meiner Lösung ist, dass keine Änderungen am MediaGoblin-Code erforderlich sind. Die zweizeilige Anweisung von Nginx integriert MediaGoblin und Google Cloud nahtlos, obwohl die Dienste absolut nichts voneinander wissen.

Beachten: Diese Lösung erfordert, dass Dateien im Google Cloud-Speicher für jedermann lesbar sind. Um das Risiko eines unbefugten Zugriffs zu verringern, verwende ich einen langen, zufälligen Bucket-Namen (z. B. mediagoblin-39dpduhfz1wstbprmyk5ak29) und stellen Sie sicher, dass die Zugriffskontrollrichtlinie des Buckets es nicht autorisierten Benutzern nicht erlaubt, den Inhalt des Verzeichnisses anzuzeigen.

Endprodukt

Zu diesem Zeitpunkt hatte ich eine vollständige, funktionierende Lösung. MediaGoblin lief problemlos in seinem eigenen Container auf der Cloud-Plattform von Google, sodass es nicht häufig gepatcht oder aktualisiert werden musste. Alles in meinem Prozess war automatisiert und reproduzierbar, sodass einfache Änderungen oder Rollbacks auf frühere Versionen möglich waren.

Meiner Familie gefiel es sehr, wie einfach es war, die Videos anzusehen. Mithilfe des oben beschriebenen Nginx-Hacks wurde die Arbeit mit Videos so schnell wie auf YouTube.

Der Anzeigebildschirm sieht folgendermaßen aus:

Meine achtjährige Suche nach der Digitalisierung von 45 Videokassetten. Teil 2
Inhalte des Familienvideokatalogs nach Tag „Best“

Wenn Sie auf die Miniaturansicht klicken, wird ein Bildschirm wie dieser angezeigt:

Meine achtjährige Suche nach der Digitalisierung von 45 Videokassetten. Teil 2
Anzeigen eines einzelnen Clips auf einem Medienserver

Nach Jahren der Arbeit war es unglaublich lohnend, Familienmitgliedern die Möglichkeit zu geben, unsere Videos in derselben benutzerfreundlichen YouTube-ähnlichen Oberfläche anzusehen, die ich ursprünglich wollte.

Bonus: Reduzieren Sie die Kosten auf weniger als 1 US-Dollar pro Monat

Sie schauen sich Heimvideos nicht oft an, sondern nur alle paar Monate. Meine Familie erzeugte insgesamt etwa 20 Stunden Datenverkehr im Jahr, aber der Server lief rund um die Uhr. Ich habe monatlich 15 US-Dollar für einen Server bezahlt, der in 99,7 % der Fälle ausfiel.

Ende 2018 veröffentlichte Google das Produkt Cloud-Run. Die Killerfunktion bestand darin, Docker-Container so schnell auszuführen, dass die Anwendung auf HTTP-Anfragen reagieren konnte. Das heißt, der Server könnte im Standby-Modus bleiben und nur dann starten, wenn jemand darauf zugreifen möchte. Für selten ausgeführte Anwendungen wie meine sind die Kosten von 15 US-Dollar pro Monat auf einige Cent pro Jahr gesunken.

Aus Gründen, an die ich mich nicht mehr erinnere, funktionierte Cloud Run nicht mit meinem MediaGoblin-Image. Aber mit dem Aufkommen von Cloud Run erinnerte ich mich daran Heroku bietet einen ähnlichen Dienst kostenlos an und ihre Tools sind viel benutzerfreundlicher als die von Google.

Bei einem kostenlosen Anwendungsserver fallen lediglich Kosten für die Datenspeicherung an. Der Standard-Regionalspeicher von Google kostet 2,3 Cent/GB. Das Videoarchiv nimmt 33 GB ein, ich zahle also nur 77 Cent im Monat.

Meine achtjährige Suche nach der Digitalisierung von 45 Videokassetten. Teil 2
Diese Lösung kostet nur 0,77 $ pro Monat

Tipps für diejenigen, die es versuchen möchten

Offensichtlich hat der Prozess lange gedauert. Aber ich hoffe, dass dieser Artikel Ihnen dabei hilft, 80–90 % des Aufwands für die Digitalisierung und Veröffentlichung Ihrer Heimvideos einzusparen. In einem separaten Abschnitt finden Sie ausführliche Schritt-für-Schritt-Anleitung während des gesamten Prozesses, aber hier sind einige allgemeine Tipps:

  • Bewahren Sie während der Digitalisierungs- und Bearbeitungsphase so viele Metadaten wie möglich auf.
    • Auf Videokassettenetiketten sind oft wertvolle Informationen festgehalten.
    • Verfolgen Sie, welcher Clip von welchem ​​Band und in welcher Reihenfolge aufgenommen wurde.
    • Notieren Sie sich das Aufnahmedatum, das möglicherweise auf dem Video erscheint.
  • Erwägen Sie die Bezahlung professioneller Digitalisierungsdienste.
    • Du wirst außerordentlich es ist schwierig und teuer, sie hinsichtlich der Qualität der Digitalisierung zu erreichen.
    • Aber halten Sie sich von einem Unternehmen namens EverPresent fern (schreiben Sie mir, wenn Sie Einzelheiten benötigen).
  • Wenn Sie selbst digitalisieren, kaufen Sie eine Festplatte.
    • Unkomprimiertes Video in Standardauflösung benötigt 100–200 MB pro Minute.
    • Ich habe alles bei mir behalten Synology DS412 + (10 TB).
  • Zeichnen Sie Metadaten in einem gängigen Format auf, das nicht an eine bestimmte Anwendung gebunden ist.
    • Clipbeschreibungen, Zeitcodes, Daten usw.
    • Wenn Sie Metadaten in einem anwendungsspezifischen Format speichern (oder, schlimmer noch, überhaupt nicht speichern), können Sie den Job nicht wiederholen, wenn Sie sich für die Verwendung einer anderen Lösung entscheiden.
    • Während Sie bearbeiten, sehen Sie viele nützliche Metadaten im Video. Sie werden sie verlieren, wenn Sie sie nicht speichern.
      • Was passiert im Video?
      • Wer ist dort registriert?
      • Wann wurde das aufgenommen?
  • Markieren Sie Ihre Lieblingsvideos.
    • Ehrlich gesagt sind die meisten Heimvideos ziemlich langweilig.
    • Ich füge meinen Lieblingsclips das „Best of“-Tag hinzu und öffne sie, wenn ich lustige Videos ansehen möchte.
  • Organisieren Sie so früh wie möglich eine umfassende Lösung, damit der Prozess von Anfang bis Ende reibungslos abläuft.
    • Ich habe versucht, zuerst alle Bänder zu digitalisieren, dann alle Bänder zu bearbeiten usw.
    • Ich wünschte, ich hätte mit einem Band angefangen und die ganze Arbeit damit erledigt. Dann würde ich verstehen, welche Entscheidungen und in welchen Phasen sich auf das Endergebnis auswirken.
  • Beschränken Sie die Neukodierung auf ein Minimum.
    • Jedes Mal, wenn Sie einen Clip bearbeiten oder neu kodieren, verringert sich seine Qualität.
    • Digitalisieren Sie Ihr Rohmaterial in maximaler Qualität und transkodieren Sie dann jeden Clip genau einmal in das Format, das Browser nativ rendern.
  • Nutzen Sie die einfachste Lösung, um Videoclips zu veröffentlichen.
    • Rückblickend scheint MediaGoblin ein übermäßig komplexes Tool für das recht einfache Szenario der Generierung von Webseiten mit einem statischen Satz von Videodateien zu sein.
    • Wenn ich von vorne anfangen würde, würde ich einen statischen Site-Generator wie verwenden Hugo, Jekyll oder Grimmig.
  • Führen Sie die Installation durch.
    • Die Videobearbeitung ist eine unterhaltsame Möglichkeit, die besten Momente aus mehreren Videos zu kombinieren.
    • Das Wichtigste beim Schnitt ist die Musik. Das Thema ist zum Beispiel großartig Langsamer Schnee von The National, das ist meine persönliche Entdeckung.

Source: habr.com