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 , der sich selbst als Open-Source-Klon von YouTube bezeichnet und den man auf seinem Server installieren kann, ausprobiert.

Erstaunlicherweise gibt es bei ClipBucket keine Installationsanleitungen. Dank habe ich mit Hilfe von , einem Konfigurationsmanagement-Tool für Server.
Teilweise lag die Schwierigkeit darin, dass die Installationsskripte von ClipBucket völlig defekt waren. Zu der Zeit und durfte aufgrund meiner Vertragsbedingungen nicht zu dem Open-Source-Klon von YouTube beitragen, aber ich , 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 .

– 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 , die das Hochladen von Videos leicht automatisiert. Am wichtigsten ist, dass MediaGoblin in , was alle Installationsprobleme ausschließt.
— ist eine Technologie, die eine autonome Umgebung für Anwendungen schafft, die überall betrieben werden kann. Ich verwende Docker in .
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, aber in dem vorhandenen Docker-Image ist dies nicht möglich.
Na gut, kein Problem. Das Docker-Image kommt mit also kann man es .
Leider wird das Docker-Image nicht mehr aus dem aktuellen . 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 c und explizit angegebenen Versionen der Bibliotheken veröffentlicht. Mit anderen Worten, anstatt die fragwürdige Behauptung aufzustellen, dass MediaGoblin mit jeder Version von >= 3.0 funktioniert, habe ich eine spezifische Abhängigkeit auf die Version festgelegt, da ich MediaGoblin mit dieser Version getestet habe. Es scheint, dass das Produkt einen benö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, und .
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 — 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. .

Die ursprüngliche Integration von MediaGoblin mit dem Google Cloud-Speicher, über die ich
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:

Warnungen 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 :
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:

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:

Inhalt des Familienvideo-Verzeichnisses nach dem Tag „Beste“
Ein Klick auf das Miniaturbild zeigt folgenden Bildschirm an:

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 . 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 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.

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 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 (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 , oder .
- verwenden.
- Machen Sie den Schnitt.
- Videobearbeitung ist eine interessante Möglichkeit, die besten Momente aus mehreren Videos zusammenzuführen. Slow Snow
Quelle: habr.com
