Mitt Ätte Är lange forsÞk pÄ Ä digitalisere 45 videokassetter. Del 2

Den fÞrste delen beskriver den vanskelige sÞken etter Ä digitalisere gamle familievideoopptak og dele dem opp i individuelle scener.Etter Ä ha behandlet alle klippene, ville jeg gjÞre dem like enkle Ä se pÄ nettet som de er pÄ YouTube. Siden dette er personlige familieminner, kan de ikke legges ut pÄ selve YouTube. Det trengs en mer privat lagringsplass, som er bÄde praktisk og sikker.

Trinn 3. Publisering

ClipBucket, en YouTube-klone med Äpen kildekode som du kan installere pÄ din egen server

Det fÞrste jeg prÞvde var KlippBÞtte, som kaller seg en Äpen kildekode YouTube-klone som du kan installere pÄ serveren din.

Mitt Ätte Är lange forsÞk pÄ Ä digitalisere 45 videokassetter. Del 2

Overraskende nok gir ikke ClipBucket noen installasjonsinstruksjoner. Takk. tredjepartsadministrasjon я automatiserte installasjonsprosessen via Ansible, et verktþy for administrasjon av serverkonfigurasjon.

Noe av problemet var at ClipBuckets installasjonsskript var fullstendig Þdelagte. PÄ den tiden, jeg jobbet hos Google og i henhold til kontraktsvilkÄrene hadde jeg ingen rett til Ä bidra til YouTube-klonen med Äpen kildekode, men jeg la ut en feilrapport, hvorfra de nÞdvendige rettelsene lett kunne gjÞres. MÄneder gikk, og de forsto fortsatt ikke hva problemet var. I stedet la de til alt mer enn feil i hver utgivelse.

ClipBucket var et konsulentselskap – de ga ut koden sin gratis og tok betalt for hjelp med utrulling. Det gikk gradvis opp for meg at et selskap som tjener penger pĂ„ betalt support sannsynligvis ikke er sĂŠrlig interessert i Ă„ la kundene installere produktet selv.

MediaGoblin, et mer moderne alternativ

Etter mÄneder med frustrasjon med ClipBucket, sÄ jeg pÄ alternativene mine og fant ut MediaGoblin.

Mitt Ätte Är lange forsÞk pÄ Ä digitalisere 45 videokassetter. Del 2
MediaGoblin â€” er en frittstĂ„ende plattform for deling av mediefiler

MediaGoblin har mye godbiter. I motsetning til ClipBucket i den skjemmende PHP-versjonen, er MediaGoblin skrevet i Python, et sprÄk jeg har mye erfaring med koding i. Det finnes kommandolinjegrensesnitt, noe som gjÞr det enkelt Ä automatisere videonedlastinger. Viktigst av alt, MediaGoblin kommer inn Docker-bilde, noe som eliminerer eventuelle problemer med installasjonen.

Docker — er en teknologi som skaper et selvstendig miljþ for en applikasjon som kjþrer hvor som helst. Jeg bruker Docker i mange av prosjektene hans.

Den overraskende vanskeligheten med Ă„ re-dockerisere MediaGoblin

Jeg antok at det Ă„ distribuere et docker-image for MediaGoblin ville vĂŠre en triviell oppgave. Vel, det fungerte ikke helt slik.

Det ferdige bildet manglet to nĂždvendige funksjoner:

  • Autentisering
    • MediaGoblin oppretter en offentlig medieportal som standard, og jeg trengte en mĂ„te Ă„ begrense tilgang fra utenforstĂ„ende.
  • Transkoding
    • Hver gang du laster opp en video, prĂžver MediaGoblin Ă„ transkode den for optimal strĂžmming. Hvis videoen opprinnelig var klar for strĂžmming, vil transkoding forringe kvaliteten.
    • MediaGoblin tilbyr Deaktivere transkoding via konfigurasjonsalternativer, men det er ikke mulig Ă„ gjĂžre dette i det eksisterende Docker-imaget.

Vel, ikke noe problem. Docker-imaget leveres med Äpen kildekode, sÄ det er mulig bygge det opp igjen selv.

Dessverre er ikke Docker-imaget lenger bygget fra den nĂ„vĂŠrende MediaGoblin-depotetJeg prĂžvde Ă„ synkronisere den med versjonen fra den siste vellykkede byggingen, men det mislyktes ogsĂ„. Selv om jeg brukte nĂžyaktig samme kode, hadde MediaGoblins eksterne avhengigheter endret seg, noe som Ăždela byggingen. Etter dusinvis av timer kjĂžrte jeg MediaGoblins 10–15 minutter lange byggeprosess om og om igjen helt til den endelig fungerte.

Noen mÄneder senere skjedde det samme. Totalt sett har MediaGoblins avhengighetskjede Þdelagt byggingen min flere ganger de siste par Ärene, sist da jeg skrev denne artikkelen. Jeg publiserte til slutt egen forgrening av MediaGoblin c hardkodede avhengigheter og eksplisitt spesifiserte bibliotekversjoner. Med andre ord, i stedet for den tvilsomme pÄstanden om at MediaGoblin fungerer med alle versjoner selleri >= 3.0, jeg satte den spesifikke avhengigheten til versjon selleri 4.2.1, fordi jeg testet MediaGoblin med denne versjonen. Det ser ut til at produktet trenger reproduserbar monteringsmekanisme, men det har jeg ikke gjort ennÄ.

Uansett, etter mange timers strev, klarte jeg endelig Ă„ bygge og konfigurere MediaGoblin i et Docker-image. Det var enkelt nok. hopp over unĂždvendig transkoding Đž Installer Nginx for autentisering.

Trinn 4. Hosting

Siden MediaGoblin kjÞrte under Docker pÄ min lokale maskin, var neste steg Ä distribuere det til en skytjener slik at familien kunne se videoene.

MediaGoblin og videolagringsproblemet

Det finnes mange plattformer som tar et Docker-image og lagrer det pĂ„ en offentlig URL. Problemet er at i tillegg til selve applikasjonen mĂ„tte 33 GB med videofiler publiseres. Det ville vĂŠrt mulig Ă„ hardkode dem inn i Docker-imaget, men det ville vĂŠrt tungvint og stygt. Å endre Ă©n konfigurasjonslinje ville krevd Ă„ distribuere 33 GB med data pĂ„ nytt.

Da jeg brukte ClipBucket, lĂžste jeg problemet med gcsfuse â€” et verktĂžy som lar operativsystemet laste opp mapper til Google Cloud-lagring som vanlige filsystemstier. Jeg lagret videofiler pĂ„ Google Cloud og brukte gcsfuse for Ă„ fĂ„ dem til Ă„ vises som lokale filer i ClipBucket.

Forskjellen var at ClipBucket kjÞrte i en ekte virtuell maskin, mens MediaGoblin kjÞrte i en Docker-container. Her viste det seg Ä vÊre mye vanskeligere Ä montere filer fra skylagring. Jeg brukte dusinvis av timer pÄ Ä lÞse alle problemene og skrev om det. et helt blogginnlegg.

Mitt Ätte Är lange forsÞk pÄ Ä digitalisere 45 videokassetter. Del 2
MediaGoblins fĂžrste integrasjon med Google Cloud-lagring, som jeg fortalt i 2018

Etter noen uker med finjusteringer av alt, fungerte det. Uten Ă„ gjĂžre noen endringer i MediaGoblins kode, klarte jeg Ă„ jukse den til Ă„ lese og skrive mediefiler til Google Cloud Storage.

Det eneste problemet var at MediaGoblin ble ubehagelig treg. Det tok hele 20 sekunder fÞr videominiatyrene lastet inn pÄ hjemmesiden. Hvis du hoppet fremover mens du sÄ pÄ en video, ville MediaGoblin pause i uendelige 10 sekunder fÞr avspillingen fortsatte.

Hovedproblemet var at videoer og bilder ble sendt til brukeren via en lang, omvei. De mĂ„tte gĂ„ fra Googles skylagring via gcsfuse til MediaGoblin, Nginx – og fĂžrst da nĂ„dde de brukerens nettleser. Den stĂžrste flaskehalsen var gcsfuse, som ikke er optimalisert for rask drift. Utviklerne advarer om store forsinkelser i verktĂžyets drift rett pĂ„ prosjektets hovedside:

Mitt Ätte Är lange forsÞk pÄ Ä digitalisere 45 videokassetter. Del 2
Rediger advarsler om lav produktivitet i gcsfuse-dokumentasjonen

Ideelt sett bÞr nettleseren hente filer direkte fra Google Cloud, og omgÄ alle mellomlagene. Hvordan kan dette gjÞres uten Ä fordype seg i MediaGoblin-kodebasen og legge til kompleks Google Cloud-integrasjonslogikk?

sub_filter-trikset i nginx

Heldigvis fant jeg en enkel lĂžsning, selv om ĐœĐ”ĐŒĐœĐŸĐłĐŸ stygg. Jeg la til i default.conf-konfigurasjonen i Nginx et slikt filter:

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

I mitt oppsett fungerer Nginx som en proxy mellom MediaGoblin og sluttbrukeren. Direktivet ovenfor forteller Nginx at den skal utfÞre et sÞk og erstatt pÄ alle MediaGoblin HTML-svar fÞr de leveres til sluttbrukeren. Nginx erstatter alle relative stier til MediaGoblin-mediefiler med URL-er fra Google Cloud Storage.

For eksempel genererer MediaGoblin HTML slik:

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

Nginx endrer svaret:

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

NÄ faller alt pÄ plass som det skal:

Mitt Ätte Är lange forsÞk pÄ Ä digitalisere 45 videokassetter. Del 2
Nginx omskriver svar fra MediaGoblin slik at klienter kan be om mediefiler direkte fra Google Cloud Storage

Det beste med lĂžsningen min er at den ikke krever noen endringer i MediaGoblin-koden. Et tolinjers Nginx-direktiv integrerer MediaGoblin og Google Cloud sĂžmlĂžst, selv om tjenestene ikke er fullstendig klar over hverandre.

NoteDenne lĂžsningen krever at filene i Google Cloud Storage er lesbare for alle. For Ă„ redusere risikoen for uautorisert tilgang bruker jeg et langt, tilfeldig bucket-navn (f.eks. mediagoblin-39dpduhfz1wstbprmyk5ak29) og sjekk at bĂžttas tilgangskontrollpolicy ikke tillater uautoriserte brukere Ă„ liste opp innholdet i katalogen.

Sluttprodukt

PÄ dette tidspunktet hadde jeg en komplett, fungerende lÞsning. MediaGoblin kjÞrte fint i sin egen container pÄ Google Cloud Platform, sÄ den trengte ikke Ä bli oppdatert eller oppdatert sÄ ofte. Alt i prosessen min var automatisert og repeterbart, noe som muliggjorde enkle redigeringer eller tilbakestillinger til tidligere versjoner.

Familien min likte veldig godt hvor enkelt det var Ä se pÄ videoer. Med Nginx-hacket ovenfor ble det like raskt Ä se pÄ videoer som Ä se pÄ YouTube.

Visningsskjermen ser slik ut:

Mitt Ätte Är lange forsÞk pÄ Ä digitalisere 45 videokassetter. Del 2
Familievideokataloginnhold merket med «Best»

Hvis du klikker pÄ miniatyrbildet, fÄr du opp et skjermbilde som dette:

Mitt Ätte Är lange forsÞk pÄ Ä digitalisere 45 videokassetter. Del 2
Vise et enkelt klipp pÄ en medieserver

Etter mange Ärs arbeid var det utrolig givende Ä gi familien min muligheten til Ä se videoene vÄre i det samme brukervennlige grensesnittet som YouTube, noe jeg opprinnelig Þnsket.

Bonus: Reduser kostnadene til under 1 dollar per mÄned

Du ser ikke pÄ hjemmevideoer sÄ ofte, bare med noen fÄ mÄneders mellomrom. Familien min genererte til sammen omtrent 20 timer med trafikk per Är, men serveren kjÞrte dÞgnet rundt. Jeg betalte 15 dollar i mÄneden for en server som var inaktiv 99,7 % av tiden.

PÄ slutten av 2018 lanserte Google et produkt Cloud RunDen beste funksjonen var Ä starte Docker-containere sÄ raskt at applikasjonen kunne svare pÄ HTTP-forespÞrsler. Det betydde at serveren kunne stÄ inaktiv og bare starte nÄr noen ville besÞke den. For sjelden startet applikasjoner som min, falt kostnaden fra 15 dollar i mÄneden til noen fÄ cent i Äret.

Av grunner jeg ikke husker, fungerte ikke Cloud Run med MediaGoblin-imaget mitt. Men med Cloud Runs fremvekst husket jeg at Heroku tilbyr en lignende tjeneste gratis, og verktĂžyene deres er mye mer brukervennlige enn Googles.

Med den gratis appserveren er den eneste kostnaden lagring. Googles standard regionale lagring koster 2,3 cent/GB. Videoarkivet er pÄ 33 GB, sÄ jeg betaler bare 77 cent per mÄned.

Mitt Ätte Är lange forsÞk pÄ Ä digitalisere 45 videokassetter. Del 2
Denne lÞsningen koster bare 0,77 dollar per mÄned

Tips til de som skal prĂžve

Prosessen tok meg selvsagt lang tid. Men jeg hĂ„per at denne artikkelen vil hjelpe deg med Ă„ spare 80–90 % av arbeidet med digitalisering og publisering av hjemmevideoer. I en egen seksjon finner du detaljert steg-for-steg guide gjennom hele prosessen, men her er noen generelle tips:

  • Bevar sĂ„ mye metadata som mulig i digitaliserings- og redigeringsfasen.
    • Verdifull informasjon stĂ„r ofte skrevet pĂ„ etikettene til videokassetter.
    • Noter deg hvilket klipp som ble filmet fra hvilket bĂ„nd og i hvilken rekkefĂžlge.
    • VĂŠr oppmerksom pĂ„ innspillingsdatoen, som kan vĂŠre angitt pĂ„ videoen.
  • Vurder Ă„ betale for profesjonelle digitaliseringstjenester.
    • Du vil vĂŠre ekstremt Det er vanskelig og dyrt Ă„ matche dem nĂ„r det gjelder digitaliseringskvalitet.
    • Men hold deg unna et selskap som heter EverPresent (send meg en e-post for mer informasjon).
  • Hvis du digitaliserer selv, kjĂžp en harddisk.
    • Ukomprimert standarddefinisjonsvideo tar opp 100–200 MB per minutt.
    • Jeg beholdt alt for meg selv Synology DS412 + (10 TB).
  • Skriv metadata i et vanlig format som ikke er knyttet til et bestemt program.
    • Klippbeskrivelser, tidskoder, datoer osv.
    • Hvis du lagrer metadata i et programspesifikt format (eller enda verre, ikke lagrer det i det hele tatt), vil du ikke kunne gjĂžre arbeidet ditt pĂ„ nytt hvis du bestemmer deg for Ă„ bruke en annen lĂžsning.
    • NĂ„r du redigerer, ser du mange nyttige metadata i videoen din. Du vil miste dem hvis du ikke lagrer dem.
      • Hva skjer i videoen?
      • Hvem er registrert der?
      • NĂ„r ble dette spilt inn?
  • Merk favorittvideoene dine.
    • For Ă„ vĂŠre ĂŠrlig, er de fleste hjemmevideoopptak ganske kjedelige.
    • Jeg bruker «best of»-taggen pĂ„ favorittklippene mine og Ă„pner dem nĂ„r jeg vil se morsomme videoer.
  • Organiser en helhetlig lĂžsning sĂ„ tidlig som mulig, slik at prosessen gĂ„r fra start til slutt.
    • Jeg prĂžvde fĂžrst Ă„ digitalisere alle kassettene, deretter redigere alle kassettene osv.
    • Det er synd at jeg ikke startet med ett bĂ„nd og gjorde alt arbeidet med det. Da ville jeg ha forstĂ„tt hvilke avgjĂžrelser og pĂ„ hvilke stadier som pĂ„virker det endelige resultatet.
  • Minimer omkoding.
    • Hver gang du redigerer eller koder et klipp pĂ„ nytt, forringer du kvaliteten.
    • Digitaliser rĂ„opptak med maksimal kvalitet, og transkoder deretter hvert klipp nĂžyaktig Ă©n gang til et format som nettlesere spiller av.
  • Bruk den enkleste mulige lĂžsningen for Ă„ publisere videoklipp.
    • I ettertid virker MediaGoblin som et altfor komplekst verktĂžy for det ganske enkle scenariet med Ă„ generere nettsider med et statisk sett med videofiler.
    • Hvis jeg skulle begynne pĂ„ nytt, ville jeg brukt en statisk nettstedgenerator som Hugo, Jekyll eller Gridsomt.
  • GjĂžr redigeringen.
    • Videoredigering er en morsom mĂ„te Ă„ kombinere de beste Ăžyeblikkene fra flere videoer.
    • Det viktigste i redigeringen er musikken. For eksempel er temaet utrolig passende Sakte snĂž fra The National, dette er min personlige oppdagelse.

Kilde: www.habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig webhotell med DDoS-beskyttelse, VPS VDS-servere | ProHoster