My strewe van agt jaar om 45 videokassette te digitaliseer. Deel 2

Die eerste deel beskryf die moeilike soeke om ou gesinsvideo's te digitaliseer en in aparte tonele op te breek.. Nadat ek al die snitte verwerk het, wou ek hul kyk aanlyn so gerieflik soos op YouTube organiseer. Aangesien dit persoonlike herinneringe van die gesin is, kan dit nie op YouTube self geplaas word nie. Ons benodig 'n meer privaat hosting wat beide gerieflik en veilig is.

Stap 3: Publisering

ClipBucket, 'n oopbron YouTube-kloon wat op jou eie bediener geïnstalleer kan word

Eerste ding wat ek probeer het ClipBucket, wat homself 'n oopbron YouTube-kloon noem wat jy op jou bediener kan installeer.

My strewe van agt jaar om 45 videokassette te digitaliseer. Deel 2

Verbasend genoeg het ClipBucket geen installasie-instruksies nie. Te danke aan aan buitebestuur я outomatiese installasie proses met die hulp Ansible, 'n bedienerkonfigurasiebestuursinstrument.

Deel van die moeilikheid was dat die ClipBucket-installasieskrifte heeltemal stukkend was. Op daardie tydstip het ek by Google gewerk en volgens die bepalings van die kontrak het ek nie die reg gehad om by te dra tot die oopbron YouTube-kloon nie, maar ek het 'n foutverslag geplaas, waaruit die nodige regstellings maklik gemaak kon word. Maande het verbygegaan, en hulle het steeds nie verstaan ​​wat die probleem was nie. In plaas daarvan het hulle alles bygevoeg beter foute in elke vrystelling.

ClipBucket het op 'n konsultasiemodel gewerk - hulle het hul kode gratis vrygestel en gehef vir ontplooiingsbystand. Dit het geleidelik tot my deurgedring dat 'n maatskappy wat geld maak uit betaalde ondersteuning waarskynlik nie baie daarin belangstel om kliënte self die produk te laat installeer nie.

MediaGoblin, 'n meer moderne alternatief

Na maande se frustrasie met ClipBucket, het ek na die beskikbare opsies gekyk en gevind MediaGoblin.

My strewe van agt jaar om 45 videokassette te digitaliseer. Deel 2
MediaGoblin is 'n vanlyn media-deelplatform

MediaGoblin het baie lekkernye. Anders as ClipBucket in onooglike PHP, is MediaGoblin in Python geskryf, 'n taal waarin ek baie ondervinding het om kode in te skryf. Eet opdragreël-koppelvlak, wat jou toelaat om video-aflaai maklik te outomatiseer. Die belangrikste is dat MediaGoblin saam met Docker-beeld, wat enige installasieprobleme uitskakel.

Docker is 'n tegnologie wat 'n outonome omgewing skep sodat 'n toepassing enige plek kan loop. Ek gebruik Docker in baie van sy projekte.

Die verrassende moeilikheid om MediaGoblin weer te dok

Ek het aangeneem dat die implementering van die MediaGoblin-dokkerbeeld 'n onbenullige taak sou wees. Wel, dit het nie heeltemal so uitgewerk nie.

Die voltooide prent het nie twee nodige funksies bevat nie:

  • verifikasie
    • MediaGoblin skep by verstek 'n publieke mediaportaal, en ek het 'n manier nodig gehad om toegang tot buitestanders te beperk.
  • Transkodering
    • Elke keer as jy 'n video aflaai, probeer MediaGoblin om dit te transkodeer vir optimale stroom. As die video aanvanklik gereed is vir stroom, verswak transkodering die kwaliteit.
    • MediaGoblin verskaf deaktiveer transkodering via konfigurasie-opsies, maar dit kan nie in 'n bestaande Docker-beeld gedoen word nie.

Wel, geen probleem nie. Die Docker-beeld kom saam met oop bron, so dit is moontlik herbou dit self.

Ongelukkig is die Docker-beeld nie meer gebou vanaf die huidige een nie. MediaGoblin-bewaarplek. Ek het probeer om dit te sinkroniseer met die weergawe van die laaste suksesvolle bou, maar dit het ook misluk. Alhoewel ek presies dieselfde kode gebruik het, het MediaGoblin se eksterne afhanklikhede verander, wat die bou verbreek het. Na tientalle ure het ek die 10-15 minute MediaGoblin-bouproses oor en oor gehardloop totdat dit uiteindelik gewerk het.

'n Paar maande later het dieselfde gebeur. In totaal het die MediaGoblin-afhanklikheidsketting my gebou verskeie kere oor die afgelope paar jaar gebreek, en die laaste keer dat dit gebeur het, was net terwyl ek hierdie artikel geskryf het. Ek het uiteindelik gepubliseer eie vurk van MediaGoblin c hardgekodeerde afhanklikhede en eksplisiet gespesifiseerde weergawes van biblioteke. Met ander woorde, in plaas van die twyfelagtige bewering dat MediaGoblin met enige weergawe werk seldery >= 3.0, ek het 'n spesifieke weergawe-afhanklikheid geïnstalleer seldery 4.2.1omdat ek MediaGoblin met hierdie weergawe getoets het. Dit lyk of die produk nodig het reproduceerbare boumeganisme, maar ek het dit nog nie gedoen nie.

In elk geval, na baie ure se gesukkel kon ek uiteindelik MediaGoblin in 'n Docker-beeld bou en konfigureer. Dit was al maklik daar slaan onnodige transkodering oor и installeer Nginx vir verifikasie.

Stap 4. Hosting

Aangesien MediaGoblin Docker op my plaaslike rekenaar laat loop het, was die volgende stap om dit na 'n wolkbediener te ontplooi sodat die gesin die video kon kyk.

MediaGoblin en die videobergingsprobleem

Daar is baie platforms wat 'n Docker-prent neem en dit op 'n publieke URL huisves. Die vangplek is dat benewens die toepassing self, 33 GB videolêers gepubliseer moes word. Dit was moontlik om hulle hard te kodeer in 'n Docker-beeld, maar dit sou omslagtig en lelik wees. Om een ​​reël konfigurasie te verander, sal herontplooiing van 33 GB data vereis.

Toe ek ClipBucket gebruik het, het ek die probleem opgelos gcsfuse - 'n hulpprogram wat die bedryfstelsel toelaat om gidse na Google Wolk-wolkberging op te laai as gereelde paaie na die lêerstelsel. Ek het die videolêers op Google Cloud aangebied en gcsfuse gebruik om hulle in ClipBucket as plaaslike lêers te laat verskyn.

Die verskil was dat ClipBucket in 'n regte virtuele masjien gehardloop het, terwyl MediaGoblin in 'n Docker-houer gehardloop het. Hier was dit baie moeiliker om lêers vanaf wolkberging te monteer. Ek het tientalle ure spandeer om al die probleme op te los en daaroor geskryf hele blogpos.

My strewe van agt jaar om 45 videokassette te digitaliseer. Deel 2
MediaGoblin se aanvanklike integrasie met Google Cloud-berging, waarvan ek praat in 2018 vertel

Na 'n paar weke se aanpassing van al die komponente, het alles gewerk. Sonder om enige veranderinge aan MediaGoblin se kode te maak, het ek dit verneuk om medialêers na Google-wolkberging te lees en te skryf.

Die enigste probleem was dat MediaGoblin onwelvoeglik stadig geword het. Dit het 'n volle 20 sekondes geneem vir video-kleinkiekies om op die tuisblad te laai. As jy vorentoe spring terwyl jy na 'n video kyk, sal MediaGoblin vir 'n eindelose 10 sekondes onderbreek voordat jy die afspeel hervat.

Die grootste probleem was dat die video's en foto's 'n lang, omwentelingsroete na die gebruiker geneem het. Hulle moes van Google-wolkberging deur gcsfuse na MediaGoblin, Nginx gaan – en eers daarna het hulle by die gebruiker se blaaier uitgekom. Die belangrikste bottelnek was gcsfuse, wat nie vir spoed geoptimaliseer is nie. Die ontwikkelaars waarsku oor groot vertragings in die werking van die nutsprogram direk op die projek se hoofblad:

My strewe van agt jaar om 45 videokassette te digitaliseer. Deel 2
waarskuwings oor lae werkverrigting in die gcsfuse-dokumentasie

Ideaal gesproke moet die blaaier lêers direk van Google Wolk af haal en enige tussenliggende lae omseil. Hoe kan jy dit doen sonder om in die MediaGoblin-kodebasis te duik of komplekse Google Wolk-integrasielogika by te voeg?

Sub_filter truuk in nginx

Gelukkig het ek 'n eenvoudige oplossing gevind 'n bietjie lelik. Ek het by die default.conf-konfigurasie in Nginx gevoeg so 'n filter:

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

In my opstelling het Nginx opgetree as 'n proxy tussen MediaGoblin en die eindgebruiker. Bogenoemde opdrag gee Nginx opdrag om alle MediaGoblin HTML-antwoorde te soek en te vervang voordat dit aan die eindgebruiker bedien word. Nginx vervang alle relatiewe paaie na MediaGoblin-medialêers met URL's vanaf Google-wolkberging.

Byvoorbeeld, MediaGoblin genereer HTML soos volg:

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

Nginx verander die antwoord:

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

Nou werk alles uit soos verwag:

My strewe van agt jaar om 45 videokassette te digitaliseer. Deel 2
Nginx herskryf antwoorde van MediaGoblin sodat kliënte medialêers direk vanaf Google-wolkberging kan aanvra

Die beste deel van my oplossing is dat dit geen veranderinge aan die MediaGoblin-kode vereis nie. Nginx se tweelyn-aanwysing integreer MediaGoblin en Google Cloud naatloos, al weet hierdie dienste absoluut niks van mekaar nie.

Let daarop: Hierdie oplossing vereis dat lêers in Google-wolkberging vir almal leesbaar moet wees. Om die risiko van ongemagtigde toegang te verminder, gebruik ek 'n lang, ewekansige emmernaam (bv. mediagoblin-39dpduhfz1wstbprmyk5ak29) en verifieer dat die emmer se toegangsbeheerbeleid nie ongemagtigde gebruikers toelaat om die inhoud van die gids te vertoon nie.

Finale produk

Op hierdie stadium het ek 'n volledige, werkende oplossing gehad. MediaGoblin het gelukkig in sy eie houer op Google se wolkplatform gehardloop, so dit hoef nie gereeld gelap of opgedateer te word nie. Alles in my proses was outomaties en reproduseerbaar, wat vir eenvoudige wysigings of terugdraai na vorige weergawes moontlik gemaak het.

My familie het baie gehou van hoe maklik dit was om die video's te kyk. Met die hulp van die Nginx-hack wat hierbo beskryf word, het werk met video's so vinnig geword soos op YouTube.

Die kykskerm lyk so:

My strewe van agt jaar om 45 videokassette te digitaliseer. Deel 2
Inhoud van die gesinsvideokatalogus volgens merker "Beste"

As u op die kleinkiekie klik, word 'n skerm soos hierdie opgeroep:

My strewe van agt jaar om 45 videokassette te digitaliseer. Deel 2
Bekyk 'n enkele snit op 'n mediabediener

Na jare se werk was dit ongelooflik lonend om familielede die geleentheid te gee om ons video's te kyk in dieselfde gebruikersvriendelike YouTube-agtige koppelvlak wat ek oorspronklik wou gehad het.

Bonus: Verminder koste tot minder as $1 per maand

Jy kyk nie gereeld na tuisvideo's nie, net elke paar maande. My gesin het gesamentlik ongeveer 20 uur verkeer in 'n jaar gegenereer, maar die bediener was 15/99,7 aan die gang. Ek het $XNUMX maandeliks betaal vir 'n bediener wat XNUMX% van die tyd af was.

Aan die einde van 2018 het Google die produk vrygestel Wolkloop. Die moordenaarkenmerk het Docker-houers so vinnig laat loop dat die toepassing op HTTP-versoeke kon reageer. Dit wil sê, die bediener kan in bystandsmodus bly en slegs begin wanneer iemand toegang daartoe wil hê. Vir toepassings wat selde uitgevoer word soos myne, het die koste van $15 per maand tot 'n paar sent per jaar gedaal.

Om redes wat ek nie meer onthou nie, het Cloud Run nie met my MediaGoblin-beeld gewerk nie. Maar met die koms van Cloud Run het ek dit onthou Heroku bied 'n soortgelyke diens gratis aan, en hul gereedskap is baie meer gebruikersvriendelik as Google s'n.

Met 'n gratis toepassingsbediener is die enigste koste databerging. Google se standaard streekberging kos 2,3 sent/GB. Die video-argief neem 33 GB op, so ek betaal net 77 sent per maand.

My strewe van agt jaar om 45 videokassette te digitaliseer. Deel 2
Hierdie oplossing kos slegs $0,77 per maand

Wenke vir diegene wat beplan om te probeer

Natuurlik het die proses my lank geneem. Maar ek hoop dat hierdie artikel jou sal help om 80-90% van die moeite om jou tuisvideo's te digitaliseer en te publiseer, te bespaar. In 'n aparte afdeling kan jy vind gedetailleerde stap-vir-stap gids regdeur die proses, maar hier is 'n paar algemene wenke:

  • Bewaar soveel metadata as moontlik tydens die digitaliserings- en redigeringsfase.
    • Waardevolle inligting word dikwels op videokassetetikette aangeteken.
    • Bly op hoogte van watter snit vanaf watter band geskiet is en in watter volgorde.
    • Skryf die datum van opname neer, wat op die video kan verskyn.
  • Oorweeg om vir professionele digitaliseringsdienste te betaal.
    • jy sal uiters dit is moeilik en duur om hulle te pas in terme van digitaliseringskwaliteit.
    • Maar bly weg van 'n maatskappy genaamd EverPresent (boodskap vir my as jy besonderhede nodig het).
  • As jy self digitalisering doen, koop 'n HDD.
    • Ongecomprimeerde standaarddefinisievideo neem 100-200 MB per minuut.
    • Ek het alles op myne gehou Synology DS412 + (10 TB).
  • Teken metadata op in een of ander algemene formaat wat nie aan 'n spesifieke toepassing gekoppel is nie.
    • Knipbeskrywings, tydkodes, datums, ens.
    • As jy metadata in 'n toepassingspesifieke formaat stoor (of erger nog, moet dit glad nie stoor nie), sal jy nie die taak kan oordoen as jy besluit om 'n ander oplossing te gebruik nie.
    • Soos jy redigeer, sien jy baie nuttige metadata op die video. Jy sal hulle verloor as jy hulle nie red nie.
      • Wat gebeur in die video?
      • Wie is daar geregistreer?
      • Wanneer is dit opgeneem?
  • Merk jou gunsteling video's.
    • Om eerlik te wees, die meeste tuisvideo's is redelik vervelig.
    • Ek pas die "best of"-merk op my gunsteling snitte en maak dit oop wanneer ek snaakse video's wil kyk.
  • Organiseer 'n omvattende oplossing so vroeg as moontlik sodat die proses reguit van begin tot einde verloop.
    • Ek het probeer om eers al die bande te digitaliseer, dan al die bande te redigeer, ens.
    • Ek wens ek het met een band begin en al die werk daarmee gedoen. Dan sou ek verstaan ​​watter besluite en in watter stadiums die finale uitslag beïnvloed.
  • Hou herkodering tot 'n minimum.
    • Elke keer as jy 'n snit redigeer of herkodeer, verminder jy die kwaliteit daarvan.
    • Digitaliseer jou rou beeldmateriaal teen maksimum gehalte, en transkodeer dan elke snit presies een keer in die formaat wat blaaiers oorspronklik weergee.
  • Gebruik die eenvoudigste moontlike oplossing om videogrepe te publiseer.
    • In retrospek lyk MediaGoblin na 'n te komplekse hulpmiddel vir die redelik eenvoudige scenario om webblaaie met 'n statiese stel videolêers te genereer.
    • As ek oor begin, sal ek 'n statiese werfgenerator gebruik soos Hugo, Jekyll of Grinsom.
  • Doen die installasie.
    • Videoredigering is 'n prettige manier om die beste oomblikke uit verskeie video's te kombineer.
    • Die belangrikste ding in redigering is musiek. Byvoorbeeld, die tema is ongelooflik Stadige sneeu van The National, dit is my persoonlike ontdekking.

Bron: will.com