Moje osemročné úsilie o digitalizáciu 45 videokaziet. Časť 2

Prvá časť popisuje náročnú snahu digitalizovať staré rodinné videá a rozdeliť ich do samostatných scén. Po spracovaní všetkých klipov som chcel zorganizovať ich prezeranie online tak pohodlne ako na YouTube. Keďže ide o osobné rodinné spomienky, nemožno ich zverejniť na samotnom YouTube. Potrebujeme viac súkromný hosting, ktorý je pohodlný a bezpečný.

Krok 3. Publikovať

ClipBucket, open source klon YouTube, ktorý si môžete nainštalovať na svoj vlastný server

V prvom rade som sa snažil ClipBucket, ktorý sa nazýva open source klon YouTube, ktorý si môžete nainštalovať na svoj server.

Moje osemročné úsilie o digitalizáciu 45 videokaziet. Časť 2

Prekvapivo ClipBucket nemá žiadne pokyny na inštaláciu. Vďaka vonkajší manažment я zautomatizoval proces inštalácie skrz Ansible, nástroj na správu konfigurácie servera.

Časť problému spočívala v tom, že inštalačné skripty ClipBucket boli úplne rozbité. V tom čase ja pracoval v Google a podľa podmienok zmluvy nemal právo prispievať do open source klonu YouTube, ale ja uverejnil hlásenie o chybez ktorých sa dali ľahko robiť potrebné korekcie. Prešli mesiace a oni stále nechápali, v čom je problém. Namiesto toho pridali všetko viac ako chyby v každom vydaní.

ClipBucket pracovali na konzultačnom modeli – vydali svoj kód zadarmo a spoplatnili pomoc s nasadením. Postupne mi došlo, že firma, ktorá zarába na platenej podpore, asi nemá veľký záujem o to, aby si zákazníci nainštalovali produkt sami.

MediaGoblin, modernejšia alternatíva

Po niekoľkých mesiacoch frustrácie z ClipBucket som skontroloval dostupné možnosti a našiel som ich mediálny goblin.

Moje osemročné úsilie o digitalizáciu 45 videokaziet. Časť 2
mediálny goblin je samostatná platforma na zdieľanie médií

MediaGoblin má veľa vychytávok. Na rozdiel od ClipBucket v nevzhľadnom PHP je MediaGoblin napísaný v Pythone, jazyku, s ktorým mám veľa skúseností s písaním kódu. Jedzte rozhranie príkazového riadku, čo uľahčuje automatizáciu sťahovania videí. Najdôležitejšie je, že prichádza MediaGoblin Obrázok Docker, čo eliminuje prípadné problémy s inštaláciou.

prístavný robotník je technológia, ktorá vytvára samostatné prostredie pre aplikáciu, ktorá funguje kdekoľvek. Používam Docker v veľa mojich projektov.

Prekvapivá obtiažnosť redockerizácie MediaGoblin

Predpokladal som, že nasadenie obrazu dokovacieho zariadenia MediaGoblin bude triviálna úloha. No celkom to tak nevyšlo.

Hotový obrázok nemal dve potrebné funkcie:

  • overenie pravosti
    • MediaGoblin štandardne vytvára verejný mediálny portál a ja som potreboval spôsob, ako obmedziť prístup cudzincov.
  • Prekódovanie
    • Zakaždým, keď nahráte video, MediaGoblin sa ho pokúsi znova zakódovať, aby bolo možné streamovať optimálne. Ak je video pôvodne pripravené na streamovanie, prekódovanie zníži kvalitu.
    • MediaGoblin poskytuje zakázanie prekódovania prostredníctvom možností konfigurácie, ale nie je to možné urobiť v existujúcom obrázku Docker.

No žiadny problém. Obrázok Docker je dodávaný s open source, Takže môžeš prestavte si ho sami.

Bohužiaľ, obraz Dockera už nie je zostavený z aktuálneho Úložisko MediaGoblin. Skúšal som to synchronizovať s verziou z posledného úspešného zostavenia, ale ani to nefungovalo. Aj keď som použil presne ten istý kód, externé závislosti MediaGoblin sa zmenili a narušili zostavu. O desiatky hodín neskôr som spustil 10-15 minútový proces zostavovania MediaGoblin znova a znova, až kým to konečne fungovalo.

To isté sa stalo o niekoľko mesiacov neskôr. Celkovo za posledných pár rokov reťazec závislostí MediaGoblin niekoľkokrát prerušil moju zostavu a naposledy sa to stalo práve vtedy, keď som písal tento článok. Nakoniec som uverejnil príspevok vlastný fork MediaGoblin c pevne zakódované závislosti a explicitne špecifikované verzie knižníc. Inými slovami, namiesto pochybného tvrdenia, že MediaGoblin funguje s akoukoľvek verziou zeler >= 3.0, nainštaloval som špecifickú závislosť od verzie zeler 4.2.1, pretože som testoval MediaGoblin s touto verziou. Zdá sa, že produkt potrebuje reprodukovateľný stavebný mechanizmusale ešte som to neurobil.

Každopádne, po mnohých hodinách boja sa mi konečne podarilo zostaviť a nakonfigurovať MediaGoblin v obraze Docker. Už to bolo ľahké preskočte zbytočné prekódovanie и nainštalujte Nginx na overenie.

Krok 4. Hosting

Keďže MediaGoblin bežal Docker na mojom lokálnom počítači, ďalším krokom bolo nasadenie na cloud server, aby si rodina mohla pozrieť video.

MediaGoblin a problém s ukladaním videa

Existuje mnoho platforiem, ktoré zachytávajú obrázok Docker a hosťujú ho na verejnej adrese URL. Háčik je v tom, že okrem samotnej aplikácie bolo potrebné zverejniť aj 33 GB video súborov. Bolo možné ich napevno zakódovať do dockerového obrazu, ale ukázalo sa, že je to ťažkopádne a škaredé. Zmena jedného riadku konfigurácie by si vyžadovala premiestnenie 33 GB dát.

Keď som použil ClipBucket, vyriešil som problém s gcsfuse - nástroj, ktorý umožňuje operačnému systému nahrávať adresáre do cloudového úložiska Google Cloud ako bežné cesty k systému súborov. Video súbory som hostil v službe Google Cloud a použil som gcsfuse na ich zobrazenie ako lokálne súbory v ClipBucket.

Rozdiel bol v tom, že ClipBucket bežal v skutočnom virtuálnom stroji, zatiaľ čo MediaGoblin bežal v kontajneri Docker. Tu sa ukázalo, že pripájanie súborov z cloudového úložiska je oveľa zložitejšie. Strávil som desiatky hodín riešením všetkých problémov a písal som o tom celý blogový príspevok.

Moje osemročné úsilie o digitalizáciu 45 videokaziet. Časť 2
Počiatočná integrácia MediaGoblin s úložiskom Google Cloud, ktoré I povedal v roku 2018

Po niekoľkých týždňoch nastavovania všetkých komponentov všetko fungovalo. Bez vykonania akýchkoľvek zmien v kóde MediaGoblin podvádzam, aby som ho prinútil čítať a zapisovať mediálne súbory do cloudového úložiska Google.

Jediným problémom bolo, že MediaGoblin začal fungovať neslušne pomaly. Nahranie miniatúr videí na domovskú stránku trvalo neuveriteľných 20 sekúnd. Ak ste počas pozerania videa poskočili dopredu, MediaGoblin sa na nekonečných 10 sekúnd pozastavil a potom prehrávanie obnovil.

Hlavným problémom bolo, že videá a obrázky išli k používateľovi dlhým kruhovým objazdom. Z cloudového úložiska Google cez gcsfuse museli prejsť na MediaGoblin, Nginx – a až potom sa dostali do prehliadača používateľa. Hlavným problémom bol gcsfuse, ktorý nie je optimalizovaný pre rýchly výkon. Vývojári upozorňujú na veľké oneskorenia v obslužnom programe priamo na hlavnej stránke projektu:

Moje osemročné úsilie o digitalizáciu 45 videokaziet. Časť 2
Upraviť upozornenia o slabom výkone v dokumentácii gcsfuse

V ideálnom prípade by prehliadač mal sťahovať súbory priamo z Google Cloud a obísť všetky medzivrstvy. Ako to môžem urobiť bez toho, aby som šiel hlboko do kódovej základne MediaGoblin a pridal komplexnú logiku integrácie Google Cloud?

trik sub_filter v nginx

Našťastie som našiel jednoduché riešenie немного škaredý. Pridal som do konfigurácie default.conf v Nginx taký filter:

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

V mojom nastavení Nginx fungoval ako proxy medzi MediaGoblin a koncovým používateľom. Vyššie uvedená smernica hovorí Nginxu, aby vyhľadal a nahradil všetky HTML odpovede MediaGoblin predtým, ako ich doručí koncovému používateľovi. Nginx nahrádza všetky relatívne cesty k mediálnym súborom MediaGoblin adresami URL z cloudového úložiska Google.

Napríklad MediaGoblin vygeneruje tento HTML:

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

Nginx zmení odpoveď:

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

Teraz všetko funguje ako má:

Moje osemročné úsilie o digitalizáciu 45 videokaziet. Časť 2
Nginx prepisuje odpovede od MediaGoblin, aby klienti mohli požadovať mediálne súbory priamo z cloudového úložiska Google

Najlepšie na mojom riešení je, že nevyžaduje žiadne zmeny v kóde MediaGoblin. Dvojriadková smernica Nginx bezproblémovo integruje MediaGoblin a Google Cloud, aj keď tieto dve služby o sebe nič nevedia.

Poznámka: Toto riešenie vyžaduje, aby boli súbory v úložisku Google Cloud Storage čitateľné pre každého. Aby som znížil riziko neoprávneného prístupu, používam dlhý náhodný názov vedra (napr. mediagoblin-39dpduhfz1wstbprmyk5ak29) a overte, či politika riadenia prístupu k segmentu neumožňuje neoprávneným používateľom zobraziť obsah adresára.

Finálny produkt

V tomto bode som mal kompletné fungujúce riešenie. MediaGoblin šťastne bežal vo svojom vlastnom kontajneri na platforme Google Cloud, takže ho nebolo potrebné často opravovať ani aktualizovať. Všetko v mojom procese bolo automatizované a reprodukovateľné, čo umožňovalo jednoduché úpravy alebo návraty k predchádzajúcim verziám.

Mojej rodine sa veľmi páčilo, aké ľahké je sledovať videá. S pomocou vyššie opísaného hacku Nginx bola práca s videom taká rýchla ako na YouTube.

Obrazovka zobrazenia vyzerá takto:

Moje osemročné úsilie o digitalizáciu 45 videokaziet. Časť 2
Obsah katalógu rodinných videí podľa tagu "Najlepšie"

Po kliknutí na miniatúru sa zobrazí nasledujúca obrazovka:

Moje osemročné úsilie o digitalizáciu 45 videokaziet. Časť 2
Zobrazenie jednotlivého klipu na serveri médií

Po mnohých rokoch práce ma neskutočne potešilo, že som dal príbuzným možnosť sledovať naše videá v rovnako pohodlnom rozhraní ako na YouTube, čo som pôvodne chcel.

Bonus: Zníženie nákladov na menej ako 1 $ mesačne

Domáce videá nepozeráte často, iba raz za pár mesiacov. Moja rodina spoločne generovala asi 20 hodín prevádzky ročne, ale server bežal 15 hodín denne, 99,7 dní v týždni. Platil som XNUMX dolárov mesačne za server, ktorý bol mimo prevádzky XNUMX % času.

Koncom roka 2018 spoločnosť Google vydala produkt Cloud Run. Killer funkcia spúšťala kontajnery Docker tak rýchlo, že aplikácia mohla reagovať na požiadavky HTTP. To znamená, že server mohol zostať v pohotovostnom režime - a spustiť sa iba vtedy, keď naň niekto chcel ísť. V prípade zriedka používaných aplikácií, ako je moja, sa náklady zvýšili z 15 dolárov mesačne na niekoľko centov ročne.

Z dôvodov, ktoré si nepamätám, Cloud Run nefungoval s mojím obrazom MediaGoblin. Ale s príchodom Cloud Run som si na to spomenul Herok ponúka podobnú službu zadarmo a ich nástroje sú oveľa pohodlnejšie ako tie od Googlu.

S bezplatným aplikačným serverom je jediným nákladom ukladanie dát. Štandardné regionálne úložisko Google stojí 2,3 centa/GB. Videoarchív má 33 GB, takže mesačne platím len 77 centov.

Moje osemročné úsilie o digitalizáciu 45 videokaziet. Časť 2
Toto riešenie stojí iba 0,77 USD mesačne

Tipy pre tých, ktorí sa chystajú vyskúšať

Je zrejmé, že tento proces mi trval dlho. Dúfam však, že vám tento článok pomôže ušetriť 80 – 90 % úsilia o digitalizáciu domáceho videa a publikovanie. V samostatnej sekcii nájdete podrobný návod krok za krokom počas celého procesu, ale tu je niekoľko všeobecných tipov:

  • Počas fázy digitalizácie a úprav uložte čo najviac metadát.
    • Cenné informácie sú často zaznamenané na štítkoch videokaziet.
    • Zaznamenajte, ktorý klip bol prevzatý z ktorej kazety a v akom poradí.
    • Zapíšte si dátum natáčania, ktorý môže byť uvedený na videu.
  • Zvážte platenie za profesionálne digitalizačné služby.
    • Budeš чрезвычайно je náročné a nákladné ich zladiť z hľadiska kvality digitalizácie.
    • Drž sa ďalej od spoločnosti s názvom EverPresent (dajte mi vedieť, ak potrebujete ďalšie podrobnosti).
  • Ak robíte digitalizáciu sami, kúpte si HDD.
    • Nekomprimované video v štandardnom rozlíšení trvá 100 – 200 MB za minútu.
    • Nechal som si všetko na svojom Synology DS412 + (10 TB).
  • Napíšte metadáta v nejakom bežnom formáte, ktorý nie je viazaný na konkrétnu aplikáciu.
    • Popisy klipov, časové kódy, dátumy atď.
    • Ak uložíte metadáta vo formáte špecifickom pre aplikáciu (alebo ešte horšie, neuložíte ich vôbec), nebudete môcť prácu zopakovať, ak sa rozhodnete použiť iné riešenie.
    • Počas úprav uvidíte vo videu množstvo užitočných metadát. Ak ich neuložíte, stratíte ich.
      • Čo sa deje na videu?
      • Kto je tam zaregistrovaný?
      • Kedy to bolo zaznamenané?
  • Označte svoje obľúbené videá.
    • Úprimne povedané, väčšina domáceho video obsahu je dosť nudná.
    • Na svoje obľúbené klipy použijem značku „best of“ a otvorím ich, keď si chcem pozrieť zábavné videá.
  • Zorganizujte komplexné riešenie čo najskôr, aby proces prebehol okamžite od začiatku do konca.
    • Skúšal som najskôr digitalizovať všetky kazety, potom upraviť všetky kazety atď.
    • Škoda, že som nezačal s jednou kazetou a nespravil s ňou všetku prácu. Potom by som pochopil, aké rozhodnutia a v akých fázach ovplyvňujú konečný výsledok.
  • Minimalizujte prekódovanie.
    • Zakaždým, keď upravíte alebo prekódujete klip, znížite jeho kvalitu.
    • Digitalizujte nespracované zábery v maximálnej kvalite a potom prekódujte každý klip presne raz do formátu, ktorý prehliadače natívne prehrávajú.
  • Na uverejňovanie videoklipov použite najjednoduchšie možné riešenie.
    • Pri spätnom pohľade sa MediaGoblin javí ako príliš zložitý nástroj pre pomerne jednoduchý scenár generovania webových stránok so statickou sadou video súborov.
    • Ak by som začínal odznova, použil by som generátor statických stránok ako napr Hugo, Jekyll alebo Príšerný.
  • Urobte montáž.
    • Úprava videa je zábavný spôsob, ako spojiť najlepšie momenty z viacerých videí.
    • Hlavná vec pri úprave je hudba. Napríklad téma je úžasná Pomalý sneh z The National, to je môj osobný objav.

Zdroj: hab.com