Nyolc éves törekvésem 45 videokazetta digitalizálására. 2. rész

Az első rész a régi családi videók digitalizálásának és külön jelenetekre bontásának nehéz küldetését írja le.. Az összes klip feldolgozása után szerettem volna online megtekintésüket olyan kényelmesen megszervezni, mint a YouTube-on. Mivel ezek a család személyes emlékei, magán a YouTube-on nem tehetők fel. Privátabb tárhelyre van szükségünk, amely egyszerre kényelmes és biztonságos.

3. lépés: Közzététel

ClipBucket, egy nyílt forráskódú YouTube klón, amely telepíthető saját szerverére

Az első, amit kipróbáltam ClipBucket, amely nyílt forráskódú YouTube-klónnak nevezi magát, amelyet telepíthet a szerverére.

Nyolc éves törekvésem 45 videokazetta digitalizálására. 2. rész

Meglepő módon a ClipBucket nem rendelkezik telepítési utasításokkal. Köszönet külső vezetésnek я automatizálta a telepítési folyamatot keresztül Ansible, egy szerverkonfiguráció-kezelő eszköz.

A nehézség egy része az volt, hogy a ClipBucket telepítési szkriptjei teljesen megszakadtak. Annak idején én dolgozott a Google-nál és a szerződés feltételei szerint nem nekem volt jogom hozzájárulni a nyílt forráskódú YouTube klónhoz, de én hibajelentést tett közzé, amelyből a szükséges korrekciók könnyen elvégezhetők. Teltek-múltak a hónapok, és még mindig nem értették, mi a probléma. Ehelyett mindent hozzáadtak több mint hibák minden kiadásban.

A ClipBucket tanácsadói modellen működött – ingyenesen adták ki kódjukat, és díjat számoltak fel a telepítési segítségért. Fokozatosan tudatosult bennem, hogy a fizetett támogatásból pénzt kereső cég valószínűleg nem nagyon érdeklődik abban, hogy az ügyfelek maguk telepítsék a terméket.

MediaGoblin, egy modernebb alternatíva

A ClipBucket miatt több hónapig tartó frusztráció után megvizsgáltam a rendelkezésre álló lehetőségeket, és megtaláltam MediaGoblin.

Nyolc éves törekvésem 45 videokazetta digitalizálására. 2. rész
MediaGoblin egy offline médiamegosztó platform

A MediaGoblinnak sok finomsága van. Ellentétben a csúnya PHP ClipBucketével, a MediaGoblin Python nyelven íródott, egy olyan nyelven, amelyen sok tapasztalatom van a kódírásban. Eszik parancssori felület, amely lehetővé teszi a videók letöltésének egyszerű automatizálását. A legfontosabb, hogy a MediaGoblin is benne van Docker kép, amely kiküszöböli a telepítési problémákat.

Dokkmunkás egy olyan technológia, amely autonóm környezetet hoz létre az alkalmazások bárhol futtatásához. Dockert használok számos projektje.

A MediaGoblin újradokkolásának meglepő nehézségei

Feltételeztem, hogy a MediaGoblin docker image telepítése triviális feladat lenne. Hát, ez nem egészen így sikerült.

A kész kép nem tartalmazott két szükséges funkciót:

  • Hitelesítés
    • A MediaGoblin alapértelmezés szerint létrehoz egy nyilvános médiaportált, és szükségem volt egy módra, hogy korlátozzam a hozzáférést a kívülállókra.
  • Átkódolás
    • Minden alkalommal, amikor letölt egy videót, a MediaGoblin megpróbálja átkódolni az optimális streamelés érdekében. Ha a videó kezdetben készen áll a streamelésre, az átkódolás rontja a minőséget.
    • A MediaGoblin biztosítja az átkódolás letiltása a konfigurációs beállításokon keresztül, de ez nem tehető meg egy meglévő Docker-képben.

Nos, semmi gond. A Docker képhez tartozik nyílt forráskód, szóval lehetséges építsd újra magad.

Sajnos a Docker image már nem a jelenlegiből épül fel. MediaGoblin adattár. Megpróbáltam szinkronizálni a legutóbbi sikeres build verziójával, de ez sem sikerült. Annak ellenére, hogy pontosan ugyanazt a kódot használtam, a MediaGoblin külső függőségei megváltoztak, megszakítva a felépítést. Több tucat óra elteltével újra és újra végigfutottam a 10-15 perces MediaGoblin összeállítási folyamatot, míg végül sikerült.

Néhány hónappal később ugyanez történt. Összességében a MediaGoblin függőségi lánc többször megtörte a buildemet az elmúlt néhány évben, és utoljára ez a cikk írása közben történt. végre publikáltam a MediaGoblin saját villája c keményen kódolt függőségek és a könyvtárak kifejezetten meghatározott verziói. Más szóval, a kétes állítás helyett, hogy a MediaGoblin bármilyen verzióval működik zeller >= 3.0, telepítettem egy adott verziófüggőséget zeller 4.2.1mert ezzel a verzióval teszteltem a MediaGoblint. Úgy tűnik, a terméknek szüksége van reprodukálható építési mechanizmus, de még nem tettem meg.

Mindenesetre sok órányi küzdelem után végre sikerült megépíteni és beállítani a MediaGoblint Docker-képben. Ott már könnyű volt hagyja ki a szükségtelen átkódolást и telepítse az Nginx-et a hitelesítéshez.

4. lépés: Tárhely

Mivel a MediaGoblin a Dockert futtatta a helyi számítógépemen, a következő lépés az volt, hogy telepítettem egy felhőkiszolgálóra, hogy a család megnézhesse a videót.

MediaGoblin és a videó tárolási probléma

Számos platform létezik, amely Docker-képet készít, és nyilvános URL-címen tárolja. A bökkenő az, hogy magán az alkalmazáson kívül 33 GB videófájlt kellett közzétenni. Lehetséges volt keményen kódolni őket egy Docker-képbe, de ez nehézkes és csúnya lenne. A konfiguráció egy sorának megváltoztatásához 33 GB adat újratelepítésére lenne szükség.

Amikor a ClipBucketet használtam, megoldottam a problémát gcsfuse - egy segédprogram, amely lehetővé teszi az operációs rendszer számára, hogy könyvtárakat töltsön fel a Google Cloud felhőtárhelyére a fájlrendszer szokásos elérési útjaként. A videofájlokat a Google Cloudon tároltam, és a gcsfuse segítségével helyi fájlként jelennek meg a ClipBucketben.

A különbség az volt, hogy a ClipBucket valódi virtuális gépen futott, míg a MediaGoblin egy Docker konténerben. Itt sokkal nehezebbnek bizonyult a fájlok felcsatolása a felhőtárhelyről. Több tucat órát töltöttem az összes probléma megoldásával, és írtam is róla az egész blogbejegyzést.

Nyolc éves törekvésem 45 videokazetta digitalizálására. 2. rész
A MediaGoblin kezdeti integrációja a Google Cloud Storage-val, amiről beszélek elmondták 2018-ban

Több hét után az összes alkatrész beállítása után minden működött. Anélkül, hogy bármit is módosítottam volna a MediaGoblin kódjában, átvertem, hogy médiafájlokat olvasson és írjon a Google felhőtárhelyére.

Az egyetlen probléma az volt, hogy a MediaGoblin obszcén lassú lett. Teljes 20 másodpercbe telt, mire a videók miniatűrjei betöltődnek a kezdőlapra. Ha egy videó megtekintése közben előreugrott, a MediaGoblin végtelen 10 másodpercig szünetet tart, mielőtt folytatná a lejátszást.

A fő probléma az volt, hogy a videók és képek hosszú, körbefutó úton jutottak el a felhasználóhoz. A Google felhőtárhelyéről a gcsfuse-n keresztül a MediaGoblin-re, az Nginx-re kellett eljutniuk – és csak ezután jutottak el a felhasználó böngészőjéhez. A fő szűk keresztmetszet a gcsfuse volt, ami nincs sebességre optimalizálva. A fejlesztők közvetlenül a projekt főoldalán figyelmeztetnek a segédprogram működésében bekövetkező nagy késésekre:

Nyolc éves törekvésem 45 videokazetta digitalizálására. 2. rész
figyelmeztetések az alacsony teljesítményről a gcsfuse dokumentációjában

Ideális esetben a böngészőnek közvetlenül a Google Cloudból kell letöltenie a fájlokat, megkerülve a közbenső rétegeket. Hogyan teheti ezt meg anélkül, hogy belemerülne a MediaGoblin kódbázisba vagy bonyolult Google Cloud integrációs logikát adna hozzá?

Sub_filter trükk az nginxben

Szerencsére találtam egy egyszerű megoldást немного csúnya. Hozzáadtam az Nginx alapértelmezett.conf konfigurációjához egy ilyen szűrő:

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

Az én beállításomban az Nginx proxyként működött a MediaGoblin és a végfelhasználó között. A fenti direktíva arra utasítja az Nginxet, hogy keresse meg és cserélje ki az összes MediaGoblin HTML-választ, mielőtt kiszolgálná azokat a végfelhasználónak. Az Nginx a MediaGoblin médiafájlok összes relatív elérési útját lecseréli a Google felhőtárhelyéről származó URL-ekre.

Például a MediaGoblin a következő HTML-kódot állítja elő:

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

Az Nginx megváltoztatja a választ:

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

Most minden a vártnak megfelelően alakul:

Nyolc éves törekvésem 45 videokazetta digitalizálására. 2. rész
Az Nginx átírja a MediaGoblin válaszait, így az ügyfelek közvetlenül a Google felhőtárhelyéről kérhetnek médiafájlokat

A megoldásom legjobb része az, hogy nem szükséges módosítani a MediaGoblin kódot. Az Nginx kétsoros direktívája zökkenőmentesen integrálja a MediaGoblin-t és a Google Cloud-ot, annak ellenére, hogy a szolgáltatások semmit sem tudnak egymásról.

Megjegyzés: Ez a megoldás megköveteli, hogy a Google felhőtárhelyen lévő fájlok mindenki számára olvashatóak legyenek. A jogosulatlan hozzáférés kockázatának csökkentése érdekében hosszú, véletlenszerű vödörnevet használok (pl. mediagoblin-39dpduhfz1wstbprmyk5ak29) és győződjön meg arról, hogy a tárolóhely hozzáférés-vezérlési házirendje nem teszi lehetővé a jogosulatlan felhasználók számára a címtár tartalmának megjelenítését.

Végtermék

Ezen a ponton volt egy teljes, működő megoldásom. A MediaGoblin boldogan futott a saját konténerében a Google felhőplatformján, így nem kellett gyakran javítani vagy frissíteni. A folyamatban minden automatizált és reprodukálható volt, lehetővé téve az egyszerű szerkesztéseket vagy a korábbi verziók visszaállítását.

A családomnak nagyon tetszett, hogy milyen könnyű volt nézni a videókat. A fent leírt Nginx hack segítségével a videókkal való munka olyan gyors lett, mint a YouTube-on.

A megtekintő képernyő így néz ki:

Nyolc éves törekvésem 45 videokazetta digitalizálására. 2. rész
A családi videókatalógus tartalma „Legjobb” címke szerint

A bélyegképre kattintva a következő képernyő jelenik meg:

Nyolc éves törekvésem 45 videokazetta digitalizálására. 2. rész
Egyetlen klip megtekintése médiaszerveren

Több éves munka után hihetetlenül kifizetődő volt lehetőséget adni a családtagoknak, hogy ugyanazon a felhasználóbarát YouTube-szerű felületen nézhessék meg videóinkat, mint amilyet eredetileg szerettem volna.

Bónusz: Csökkentse a költségeket havi 1 dollár alá

Nem gyakran nézel otthoni videókat, csak néhány havonta. A családom összesen körülbelül 20 óra forgalmat generált egy év alatt, de a szerver éjjel-nappal működött. Havi 15 dollárt fizettem egy szerverért, amely az esetek 99,7%-ában leállt.

2018 végén a Google kiadta a terméket Cloud Run. A gyilkos funkció olyan gyorsan futtatta a Docker-tárolókat, hogy az alkalmazás válaszolni tudott a HTTP-kérésekre. Vagyis a szerver készenléti módban maradhatott, és csak akkor indulhatott el, ha valaki hozzá akart érni. Az olyan ritkán futó alkalmazások esetében, mint az enyém, a költségek havi 15 dollárról évi néhány centre csökkentek.

Már nem emlékszem, hogy a Cloud Run nem működött a MediaGoblin-képemmel. De a Cloud Run megjelenésével ez eszembe jutott Heroku hasonló szolgáltatást kínál ingyenesen, és eszközeik sokkal felhasználóbarátabbak, mint a Google-é.

Az ingyenes alkalmazásszerverrel az egyetlen költség az adattárolás. A Google szabványos regionális tárhelye 2,3 cent/GB-ba kerül. A videoarchívum 33 GB-ot foglal el, így csak 77 centet fizetek havonta.

Nyolc éves törekvésem 45 videokazetta digitalizálására. 2. rész
Ez a megoldás mindössze 0,77 dollárba kerül havonta

Tippek azoknak, akik szeretnének kipróbálni

Nyilvánvalóan sokáig tartott a folyamat. De remélem, hogy ez a cikk segít megspórolni az otthoni videók digitalizálásával és közzétételével kapcsolatos erőfeszítések 80-90%-át. Külön részben megtalálod részletes, lépésről lépésre útmutató az egész folyamat során, de íme néhány általános tipp:

  • A digitalizálási és szerkesztési szakaszban a lehető legtöbb metaadatot őrizze meg.
    • A videokazetta-címkékre gyakran értékes információkat rögzítenek.
    • Kövesse nyomon, hogy melyik klip melyik szalagról készült és milyen sorrendben.
    • Írja le a forgatás dátumát, amely megjelenhet a videón.
  • Fontolja meg a professzionális digitalizálási szolgáltatások fizetését.
    • Fogsz rendkívüli módon a digitalizálás minőségét tekintve nehéz és költséges összehozni őket.
    • De maradjon távol az EverPresent nevű cégtől (üzenjen nekem, ha részletekre van szüksége).
  • Ha saját maga végzi a digitalizálást, vásároljon HDD-t.
    • Tömörítetlen normál felbontású videó 100-200 MB percenként.
    • Mindent az enyémben tartottam Synology DS412 + (10 TB).
  • Rögzítse a metaadatokat valamilyen általános formátumban, amely nincs egy adott alkalmazáshoz kötve.
    • Klipleírások, időkódok, dátumok stb.
    • Ha a metaadatokat alkalmazás-specifikus formátumban menti (vagy ami még rosszabb, egyáltalán nem menti el), akkor nem tudja újra elvégezni a munkát, ha más megoldás mellett dönt.
    • Szerkesztés közben sok hasznos metaadatot lát a videón. Elveszíti őket, ha nem menti meg őket.
      • Mi történik a videóban?
      • Ki van ott regisztrálva?
      • Ezt mikor rögzítették?
  • Jelölje be kedvenc videóit.
    • Őszintén szólva a legtöbb házi videó elég unalmas.
    • A „best of” címkét felhelyezem a kedvenc klipjeimre, és megnyitom őket, amikor vicces videókat akarok nézni.
  • Szervezzen meg egy átfogó megoldást a lehető legkorábban, hogy a folyamat az elejétől a végéig egyenesen menjen.
    • Megpróbáltam először az összes szalagot digitalizálni, majd az összes szalagot szerkeszteni stb.
    • Bárcsak egy szalaggal kezdtem volna, és minden munkát azzal végeztem volna. Akkor megérteném, hogy mely döntések és milyen szakaszokban befolyásolják a végeredményt.
  • Tartsa minimálisra az átkódolást.
    • Minden alkalommal, amikor szerkeszt vagy újrakódol egy klipet, rontja a minőségét.
    • Digitalizálja nyers felvételeit maximális minőségben, majd minden klipet pontosan egyszer kódoljon át a böngészők által natívan megjelenített formátumba.
  • Használja a lehető legegyszerűbb megoldást videoklipek közzétételére.
    • Utólag visszatekintve a MediaGoblin túlságosan összetett eszköznek tűnik ahhoz a meglehetősen egyszerű forgatókönyvhöz, amikor egy statikus videofájlokból álló weboldalakat generál.
    • Ha újrakezdeném, egy statikus webhelygenerátort használnék, mint pl Hugo, Jekyll vagy Zavaros.
  • Végezze el a telepítést.
    • A videószerkesztés szórakoztató módja annak, hogy több videó legjobb pillanatait ötvözze.
    • A szerkesztésben a zene a legfontosabb. Például a téma elképesztő Lassú hó a The Nationalból ez az én személyes felfedezésem.

Forrás: will.com