Kahdeksan vuoden pyrkimys digitoida 45 videokasettia. Osa 2

Ensimmäinen osa kuvaa vaikeaa pyrkimystä digitoida vanhoja perhevideoita ja jakaa ne erillisiin kohtauksiin. Kaikkien leikkeiden käsittelyn jälkeen halusin järjestää niiden katselun verkossa yhtä kätevästi kuin YouTubessa. Koska nämä ovat henkilökohtaisia ​​perhemuistoja, niitä ei voi julkaista itse YouTubessa. Tarvitsemme yksityisemmän isännöinnin, joka on sekä kätevä että turvallinen.

Vaihe 3. Julkaise

ClipBucket, avoimen lähdekoodin YouTube-klooni, jonka voit asentaa omalle palvelimellesi

Ensinnäkin yritin ClipBucket, joka kutsuu itseään avoimen lähdekoodin YouTube-klooniksi, jonka voit asentaa palvelimellesi.

Kahdeksan vuoden pyrkimys digitoida 45 videokasettia. Osa 2

Yllättäen ClipBucketilla ei ole asennusohjeita. Kiitokset ulkopuolinen johto я automatisoi asennusprosessin kautta Ansible, palvelinkokoonpanon hallintatyökalu.

Osa vaikeutta oli se, että ClipBucket-asennusskriptit olivat täysin rikki. Tuolloin minä työskennellyt Googlella ja sopimuksen ehtojen mukaan minulla ei ollut oikeutta osallistua YouTuben avoimen lähdekoodin klooniin, mutta minä julkaisi virheilmoituksenjosta oli helppo tehdä tarvittavat korjaukset. Kuukausia kului, eivätkä he vieläkään ymmärtäneet, mikä ongelma oli. Sen sijaan he lisäsivät kaiken больше bugeja jokaisessa julkaisussa.

ClipBucket työskenteli konsultointimallin parissa – he julkaisivat koodinsa ilmaiseksi ja veloitettiin käyttöönoton avustamisesta. Vähitellen tajusin, että maksullisella tuella rahaa tienaava yritys ei todennäköisesti ole kovin kiinnostunut siitä, että asiakkaat asentavat tuotteen itse.

MediaGoblin, nykyaikaisempi vaihtoehto

Muutaman kuukauden ClipBucketin turhautumisen jälkeen tarkastelin saatavilla olevia vaihtoehtoja ja löysin mediapeikko.

Kahdeksan vuoden pyrkimys digitoida 45 videokasettia. Osa 2
mediapeikko on itsenäinen medianjakoalusta

MediaGoblinilla on paljon herkkuja. Toisin kuin ruman PHP:n ClipBucket, MediaGoblin on kirjoitettu Pythonilla, kielellä, jolla minulla on paljon kokemusta koodin kirjoittamisesta. Syödä komentorivin käyttöliittymä, jonka avulla on helppo automatisoida videoiden lataukset. Mikä tärkeintä, MediaGoblin tulee sisään Docker-kuva, joka poistaa kaikki asennuksessa liittyvät ongelmat.

Satamatyöläinen on tekniikka, joka luo itsenäisen ympäristön sovellukselle, joka toimii missä tahansa. Käytän Dockeria monet projekteistani.

MediaGoblinin uudelleen dokumentoimisen yllättävä vaikeus

Oletin, että MediaGoblin-telakointikuvan käyttöönotto olisi triviaali tehtävä. No ei se ihan niin mennyt.

Valmiilla kuvalla ei ollut kahta tarpeellista toimintoa:

  • todennus
    • MediaGoblin luo oletuksena julkisen median portaalin, ja tarvitsin tavan rajoittaa ulkopuolisten pääsyä.
  • Transkoodaus
    • Aina kun lataat videon, MediaGoblin yrittää koodata sen uudelleen optimaalista suoratoistoa varten. Jos video on alun perin valmis suoratoistoon, transkoodaus heikentää laatua.
    • MediaGoblin tarjoaa transkoodauksen poistaminen käytöstä asetusvaihtoehtojen kautta, mutta tätä ei voi tehdä olemassa olevassa Docker-kuvassa.

No ei hätää. Docker-kuva tulee mukana avoin lähdekoodi, niin sinä voit rakentaa se itse uudelleen.

Valitettavasti Docker-kuvaa ei enää rakenneta nykyisestä MediaGoblin-arkisto. Yritin synkronoida sen edellisen onnistuneen koontiversion kanssa, mutta sekään ei toiminut. Vaikka käytin täsmälleen samaa koodia, MediaGoblinin ulkoiset riippuvuudet muuttuivat, mikä rikkoi koontiversion. Kymmeniä tunteja myöhemmin suoritin 10–15 minuutin MediaGoblin-rakennusprosessin uudestaan ​​​​ja uudestaan, kunnes se lopulta toimi.

Sama tapahtui muutaman kuukauden kuluttua. Kaiken kaikkiaan viimeisten parin vuoden aikana MediaGoblin-riippuvuusketju on rikkonut rakennelmani useita kertoja, ja viimeksi se tapahtui juuri tätä artikkelia kirjoittaessani. Päädyin postaukseen MediaGoblinin oma haarukka c kovakoodatut riippuvuudet ja erikseen määritellyt kirjastoversiot. Toisin sanoen sen epäilyttävän väitteen sijaan, että MediaGoblin toimii minkä tahansa version kanssa selleri >= 3.0, asensin tietyn riippuvuuden versiosta selleri 4.2.1, koska testasin MediaGoblinia tällä versiolla. Näyttää siltä, ​​​​että tuote tarvitsee toistettava rakennusmekanismimutta en ole vielä tehnyt sitä.

Joka tapauksessa monen tunnin kamppailun jälkeen pystyin lopulta rakentamaan ja konfiguroimaan MediaGoblinin Docker-kuvassa. Se oli jo helppoa ohita tarpeeton transkoodaus и asenna Nginx todennusta varten.

Vaihe 4. Isännöinti

Koska MediaGoblin käytti Dockeria paikallisella koneellani, seuraava vaihe oli käyttöönotto pilvipalvelimella, jotta perhe voisi katsoa videon.

MediaGoblin ja videotallennusongelma

On monia alustoja, jotka ottavat Docker-kuvan ja isännöivät sitä julkisessa URL-osoitteessa. Sakka on, että itse sovelluksen lisäksi piti julkaista 33 Gt videotiedostoja. Ne oli mahdollista koodata docker-kuvaksi, mutta se osoittautui hankalaksi ja rumaksi. Yhden kokoonpanorivin muuttaminen vaatisi 33 Gt:n tiedon uudelleensijoittamista.

Kun käytin ClipBucketia, ratkaisin ongelman gcsfuse - apuohjelma, jonka avulla käyttöjärjestelmä voi ladata hakemistoja Google Cloud -pilvitallennustilaan tavallisina poluina tiedostojärjestelmään. Isännöin videotiedostoja Google Cloudissa ja käytin gcsfusea näyttääkseni ne paikallisina tiedostoina ClipBucketissa.

Erona oli, että ClipBucket juoksi todellisessa virtuaalikoneessa, kun taas MediaGoblin juoksi Docker-säiliössä. Täällä tiedostojen asentaminen pilvitallennustilasta osoittautui paljon vaikeammaksi. Vietin kymmeniä tunteja kaikkien ongelmien ratkaisemiseen ja kirjoitin siitä koko blogikirjoitus.

Kahdeksan vuoden pyrkimys digitoida 45 videokasettia. Osa 2
MediaGoblinin ensimmäinen integrointi Google Cloud -tallennustilaan, jonka I kerrottiin vuonna 2018

Muutaman viikon kaikkien komponenttien säätämisen jälkeen kaikki toimi. Tekemättä muutoksia MediaGoblin-koodiin, huijaan saadakseni sen lukemaan ja kirjoittamaan mediatiedostoja Googlen pilvitallennustilaan.

Ainoa ongelma oli, että MediaGoblin alkoi toimia säädyttömästi hitaasti. Videoiden pikkukuvien lataaminen kotisivulle kesti huimat 20 sekuntia. Jos hyppäsit eteenpäin katsoessasi videota, MediaGoblin pysähtyi loputtomaksi 10 sekunniksi ennen toiston jatkamista.

Suurin ongelma oli, että videot ja kuvat menivät käyttäjälle pitkällä, kiertoradalla. Heidän täytyi siirtyä Googlen pilvitallennustilasta gcsfusen kautta MediaGobliniin, Nginxiin – ja vasta sitten he pääsivät käyttäjän selaimeen. Suurin pullonkaula oli gcsfuse, jota ei ole optimoitu nopeaan suorituskykyyn. Kehittäjät varoittavat suurista viiveistä apuohjelmassa suoraan projektin pääsivulla:

Kahdeksan vuoden pyrkimys digitoida 45 videokasettia. Osa 2
Muokkaa varoituksia huonosta suorituksesta gcsfuse-dokumentaatiossa

Ihannetapauksessa selaimen pitäisi vetää tiedostot suoraan Google Cloudista ohittaen kaikki välitasot. Kuinka voin tehdä tämän menemättä syvälle MediaGoblin-koodikantaan ja lisäämättä monimutkaista Google Cloud -integraatiologiikkaa?

sub_filter temppu nginxissä

Onneksi kuitenkin löysin helpon ratkaisun немного ruma. Lisäsin oletus.conf-kokoonpanoon Nginxissä sellainen suodatin:

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

Asetuksissani Nginx toimi välityspalvelimena MediaGoblinin ja loppukäyttäjän välillä. Yllä oleva direktiivi käskee Nginxiä etsimään ja korvaamaan kaikki MediaGoblin HTML -vastaukset ennen kuin ne toimitetaan loppukäyttäjälle. Nginx korvaa kaikki MediaGoblin-mediatiedostojen suhteelliset polut URL-osoitteilla Googlen pilvitallennustilasta.

Esimerkiksi MediaGoblin luo tämän HTML-koodin:

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

Nginx muuttaa vastausta:

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

Nyt kaikki toimii kuten pitääkin:

Kahdeksan vuoden pyrkimys digitoida 45 videokasettia. Osa 2
Nginx kirjoittaa MediaGoblinin vastaukset uudelleen, jotta asiakkaat voivat pyytää mediatiedostoja suoraan Googlen pilvitallennustilasta

Parasta ratkaisussani on, että se ei vaadi muutoksia MediaGoblin-koodiin. Kaksirivinen Nginx-direktiivi yhdistää saumattomasti MediaGoblinin ja Google Cloudin, vaikka nämä kaksi palvelua eivät tiedä toisistaan ​​mitään.

Huomata: Tämä ratkaisu edellyttää, että Google Cloud Storagen tiedostot ovat kaikkien luettavissa. Vähentääkseni luvattoman käytön riskiä käytän pitkää satunnaista ryhmän nimeä (esim. mediagoblin-39dpduhfz1wstbprmyk5ak29) ja varmista, että ryhmän pääsynhallintakäytäntö ei salli luvattomien käyttäjien näyttää hakemiston sisältöä.

Lopputuote

Tässä vaiheessa minulla oli täydellinen, toimiva ratkaisu. MediaGoblin juoksi onnellisesti omassa säilöessään Google Cloud Platformissa, joten sitä ei tarvinnut korjata tai päivittää usein. Prosessissani kaikki oli automatisoitua ja toistettavaa, mikä mahdollistaa yksinkertaiset muokkaukset tai aiempien versioiden palautuksen.

Perheeni piti todella siitä, kuinka helppoa on katsella videoita. Yllä kuvatun Nginx-hakkeroinnin avulla videon kanssa työskentelystä tuli yhtä nopeaa kuin YouTubessa.

Näkymänäyttö näyttää tältä:

Kahdeksan vuoden pyrkimys digitoida 45 videokasettia. Osa 2
Koko perhevideoluettelon sisältö tunnisteella "Paras"

Pikkukuvaa napsauttamalla avautuu seuraava näyttö:

Kahdeksan vuoden pyrkimys digitoida 45 videokasettia. Osa 2
Yksittäisen leikkeen katsominen mediapalvelimella

Monien vuosien työn jälkeen olin uskomattoman iloinen voidessani antaa sukulaisillemme mahdollisuuden katsella videoitamme samassa kätevässä käyttöliittymässä kuin YouTubessa, jonka alun perin halusin.

Bonus: Kustannusten alennus alle 1 dollariin kuukaudessa

Katsot kotivideoita harvoin, vain muutaman kuukauden välein. Perheeni tuotti yhteensä noin 20 tuntia liikennettä vuodessa, mutta palvelin oli käynnissä 15/99,7. Maksoin XNUMX dollaria kuukaudessa palvelimesta, joka oli alhaalla XNUMX % ajasta.

Vuoden 2018 lopussa Google julkaisi tuotteen Pilvi-ajo. Killer-ominaisuus suoritti Docker-säilöjä niin nopeasti, että sovellus pystyi vastaamaan HTTP-pyyntöihin. Toisin sanoen palvelin voisi pysyä valmiustilassa - ja käynnistyä vain, kun joku halusi mennä siihen. Harvoin käytettyjen sovellusten, kuten minun, kustannukset ovat nousseet 15 dollarista kuukaudessa muutamaan senttiin vuodessa.

Syistä, joita en muista, Cloud Run ei toiminut MediaGoblin-kuvani kanssa. Mutta Cloud Runin tultua muistin sen Heroku tarjoaa samanlaisen palvelun ilmaiseksi, ja heidän työkalunsa ovat paljon kätevämpiä kuin Googlen.

Ilmaisella sovelluspalvelimella ainoa kulu on tietojen tallennus. Googlen tavallinen alueellinen tallennustila maksaa 2,3 senttiä/GB. Videoarkisto on 33 Gt, joten maksan vain 77 senttiä kuukaudessa.

Kahdeksan vuoden pyrkimys digitoida 45 videokasettia. Osa 2
Tämä ratkaisu maksaa vain 0,77 dollaria kuukaudessa

Vinkkejä niille, jotka aikovat kokeilla

On selvää, että prosessi kesti kauan. Toivon kuitenkin, että tämä artikkeli auttaa sinua säästämään 80–90 % kotivideoiden digitointi- ja julkaisuponnisteluista. Erillisessä osiossa löydät yksityiskohtainen vaihe vaiheelta opas koko prosessin ajan, mutta tässä on joitain yleisiä vinkkejä:

  • Tallenna mahdollisimman paljon metadataa digitointi- ja muokkausvaiheen aikana.
    • Arvokasta tietoa on usein tallennettu videokasettien tarroille.
    • Tallenna, mikä leike mistä kasetista on otettu ja missä järjestyksessä.
    • Kirjoita muistiin kuvauspäivämäärä, joka voidaan mainita videossa.
  • Harkitse ammattimaisista digitalisointipalveluista maksamista.
    • Tulet чрезвычайно on vaikeaa ja kallista verrata niitä digitalisoinnin laadulla.
    • Mutta pysy kaukana EverPresent-nimisestä yrityksestä (ilmoita minulle, jos tarvitset lisätietoja).
  • Jos teet digitalisoinnin itse, osta kiintolevy.
    • Pakkaamaton vakiolaatuinen video kestää 100-200 Mt minuutissa.
    • Pidin kaiken omassani Synology DS412 + (10 TB).
  • Kirjoita metatiedot jossain yleisessä muodossa, joka ei ole sidottu tiettyyn sovellukseen.
    • Leikkeiden kuvaukset, aikakoodit, päivämäärät jne.
    • Jos tallennat metatiedot sovelluskohtaiseen muotoon (tai pahempaa, et tallenna ollenkaan), et voi tehdä työtä uudelleen, jos päätät käyttää toista ratkaisua.
    • Muokkauksen aikana näet videossa paljon hyödyllistä metadataa. Menetät ne, jos et tallenna niitä.
      • Mitä videolla tapahtuu?
      • Kuka siellä on rekisteröitynyt?
      • Milloin se äänitettiin?
  • Merkitse suosikkivideosi.
    • Ollakseni rehellinen, suurin osa kotivideosisällöstä on melko tylsää.
    • Lisään "best of" -tunnisteen suosikkileikkeisiini ja avaan ne, kun haluan katsoa hauskoja videoita.
  • Järjestä kokonaisratkaisu mahdollisimman varhain, jotta prosessi etenee välittömästi alusta loppuun.
    • Yritin ensin digitoida kaikki kasetit, sitten editoida kaikki kasetit jne.
    • Harmi, etten aloittanut yhdellä kasetilla ja tehnyt kaikkea työtä sillä. Silloin ymmärtäisin, mitkä päätökset ja missä vaiheessa vaikuttavat lopputulokseen.
  • Minimoi uudelleenkoodaus.
    • Joka kerta kun muokkaat tai koodaat leikkeen uudelleen, heikennät sen laatua.
    • Digitoi raakamateriaalia parhaalla mahdollisella laadulla ja transkoodaa sitten jokainen leike täsmälleen kerran muotoon, jota selaimet toistavat.
  • Käytä yksinkertaisinta mahdollista ratkaisua videoleikkeiden lähettämiseen.
    • Jälkikäteen ajateltuna MediaGoblin näyttää liian monimutkaiselta työkalulta melko yksinkertaiseen skenaarioon luoda verkkosivuja staattisten videotiedostojen avulla.
    • Jos aloittaisin alusta, käyttäisin staattista sivustogeneraattoria, kuten Hugo, Jekyll tai Kauhea.
  • Tee montaasi.
    • Videoeditointi on hauska tapa yhdistää useiden videoiden parhaat hetket.
    • Pääasia editoinnissa on musiikki. Esimerkiksi teema on hämmästyttävä Hidasta lunta The Nationalista, tämä on henkilökohtainen löytöni.

Lähde: will.com