Mia okjara serĉo por ciferecigi 45 videkasedojn. Parto 2

La unua parto priskribas la malfacilan serĉon por ciferecigi malnovajn familiajn filmetojn kaj dividi ilin en apartajn scenojn. Post la prilaboro de ĉiuj klipoj, mi volis organizi ilian spektadon interrete tiel oportune kiel ĉe Jutubo. Ĉar ĉi tiuj estas personaj familiaj memoroj, ili ne povas esti afiŝitaj sur Jutubo mem. Ni bezonas pli privatan gastigadon, kiu estas kaj oportuna kaj sekura.

Paŝo 3. Eldoni

ClipBucket, malfermfonta jutuba klono, kiun vi povas instali sur via propra servilo

Antaŭ ĉio mi provis ClipBucket, kiu nomas sin malfermfonta Jutuba klono, kiun vi povas instali sur via servilo.

Mia okjara serĉo por ciferecigi 45 videkasedojn. Parto 2

Surprize, ClipBucket ne havas instalinstrukciojn. Danke al ekstera administrado я aŭtomatigis la instalan procezon kun helpo de Respondema, servila agorda administra ilo.

Parto de la malfacilaĵo estis, ke la instalaĵskriptoj de ClipBucket estis tute rompitaj. En tiu tempo mi laboris ĉe Google kaj laŭ la kondiĉoj de la kontrakto ne havis la rajton kontribui al la malfermfonta klono de Jutubo, sed mi afiŝis cimraportonel kiu estis facile fari la necesajn korektojn. Pasis monatoj, kaj ili ankoraŭ ne komprenis, kio estas la problemo. Anstataŭe, ili aldonis ĉion pli ol cimoj en ĉiu eldono.

ClipBucket laboris pri konsultmodelo - ili liberigis sian kodon senpage kaj ŝargis por helpo kun deplojo. Iom post iom ekkomprenis al mi, ke kompanio, kiu enspezas monon per pagita subteno, verŝajne ne tre interesiĝas pri ke klientoj instalu la produkton mem.

MediaGoblin, pli moderna alternativo

Post kelkaj monatoj da frustriĝo kun ClipBucket, mi reviziis la disponeblajn eblojn kaj trovis amaskomunikila koboldo.

Mia okjara serĉo por ciferecigi 45 videkasedojn. Parto 2
amaskomunikila koboldo estas memstara amaskomunikilara kundivida platformo

MediaGoblin havas multajn bonaĵojn. Male al ClipBucket en malbela PHP, MediaGoblin estas skribita en Python, lingvo kun kiu mi havas multe da sperto skribi kodon. Manĝu komandlinia interfaco, kiu faciligas aŭtomatigi video-elŝutojn. Plej grave, MediaGoblin eniras Docker-bildo, kiu forigas ajnajn problemojn kun la instalado.

Docker estas teknologio kiu kreas memstaran medion por aplikaĵo kiu funkcias ie ajn. Mi uzas Docker en multaj el miaj projektoj.

La Surpriza Malfacilo de Redockerizing MediaGoblin

Mi supozis, ke deploji MediaGoblin-docker-bildon estus bagatela tasko. Nu, ĝi ne tute funkciis tiel.

La preta bildo ne havis du necesajn funkciojn:

  • Aŭtentigo
    • MediaGoblin kreas publikan amaskomunikilan portalon defaŭlte, kaj mi bezonis manieron limigi la aliron de eksteruloj.
  • Transkodigo
    • Ĉiufoje kiam vi alŝutas videon, MediaGoblin provas rekodi ĝin por optimuma fluado. Se la video estas origine preta por fluado, transkodado degradas la kvaliton.
    • MediaGoblin Provizas malŝalti transkodigon per agordaj elektoj, sed ne eblas fari tion en ekzistanta Docker-bildo.

Nu, neniu problemo. La Docker-bildo venas kun malferma fonto, do vi povas rekonstruu ĝin mem.

Bedaŭrinde, la bildo de Docker ne plu estas konstruita el la nuna deponejo MediaGoblin. Mi provis sinkronigi ĝin kun la versio de la lasta sukcesa konstruo, sed ankaŭ tio ne funkciis. Kvankam mi uzis ĝuste la saman kodon, la eksteraj dependecoj de MediaGoblin ŝanĝiĝis, rompante la konstruon. Dekoj da horoj poste, mi kuris la 10-15-minutan konstruprocezon de MediaGoblin denove kaj denove ĝis ĝi finfine funkciis.

La sama afero okazis kelkajn monatojn poste. Entute, dum la pasintaj du jaroj, la dependeca ĉeno de MediaGoblin rompis mian konstruon plurajn fojojn, kaj la lastan fojon ĝi okazis ĝuste kiam mi skribis ĉi tiun artikolon. Mi finfine afiŝis propra forko de MediaGoblin c malfacile kodigitaj dependecoj kaj eksplicite specifitaj bibliotekversioj. Alivorte, anstataŭ la dubinda aserto, ke MediaGoblin funkcias kun ajna versio celerio >= 3.0, mi instalis specifan dependecon de versio celerio 4.2.1, ĉar mi testis MediaGoblin kun ĉi tiu versio. Ŝajnas, ke la produkto bezonas reproduktebla konstrumekanismosed mi ankoraŭ ne faris ĝin.

Ĉiuokaze, post multaj horoj da lukto, mi finfine povis konstrui kaj agordi MediaGoblin en bildo de Docker. Estis jam facile preterpasi nenecesan transkodigon и instalu Nginx por aŭtentigo.

Paŝo 4. Gastigado

Ĉar MediaGoblin funkciis Docker sur mia loka maŝino, la sekva paŝo estis deploji al nuba servilo por ke la familio povu spekti la videon.

MediaGoblin kaj la problemo pri konservado de video

Estas multaj platformoj, kiuj prenas Docker-bildon kaj gastigas ĝin en publika URL. La kapto estas, ke krom la programo mem, 33 GB da videodosieroj devis esti publikigitaj. Eblis malfacile kodi ilin en docker-bildon, sed ĝi montriĝis maloportuna kaj malbela. Ŝanĝi unu linion de agordo postulus redeplojon de 33 GB da datumoj.

Kiam mi uzis ClipBucket, mi solvis la problemon kun gcsfuse - ilo, kiu permesas al la operaciumo alŝuti dosierujojn al la nuba stokado de Google Cloud kiel regulaj vojoj al la dosiersistemo. Mi gastigis la videodosierojn en Google Cloud kaj uzis gcsfuse por montri ilin kiel lokajn dosierojn en ClipBucket.

La diferenco estis, ke ClipBucket funkciis en reala virtuala maŝino, dum MediaGoblin funkciis en Docker-ujo. Ĉi tie, munti dosierojn el la nuba stokado montriĝis multe pli malfacila. Mi pasigis dekojn da horoj solvante ĉiujn problemojn kaj skribis pri ĝi tuta bloga afiŝo.

Mia okjara serĉo por ciferecigi 45 videkasedojn. Parto 2
La komenca integriĝo de MediaGoblin kun Google Cloud-stokado, kiun mi rakontita en 2018

Post pluraj semajnoj ĝustigi ĉiujn komponantojn, ĉio funkciis. Sen fari ajnajn ŝanĝojn al la MediaGoblin-kodo, mi trompas por legi kaj skribi amaskomunikilarajn dosierojn al Google-nuba stokado.

La nura problemo estis, ke MediaGoblin komencis labori maldece malrapide. Necesis 20 sekundoj por alŝuti videobildetojn al la hejmpaĝo. Se vi saltis antaŭen rigardante videon, MediaGoblin paŭzis senfinajn 10 sekundojn antaŭ rekomenci la reproduktadon.

La ĉefa problemo estis, ke la videoj kaj bildoj iris al la uzanto laŭ longa, ĉirkaŭvojo. Ili devis iri de Google-nuba stokado per gcsfuse al MediaGoblin, Nginx - kaj nur tiam ili eniris la retumilon de la uzanto. La ĉefa proplemkolo estis gcsfuse, kiu ne estas optimumigita por rapida rendimento. Programistoj avertas pri grandaj malfruoj en la utileco ĝuste sur la ĉefa paĝo de la projekto:

Mia okjara serĉo por ciferecigi 45 videkasedojn. Parto 2
Avertoj pri malbona agado en la dokumentado de gcsfuse

Ideale, la retumilo devus tiri dosierojn rekte de Google Cloud, preterirante ĉiujn mezajn tavolojn. Kiel mi faru tion sen profundiĝi en la kodbazon de MediaGoblin kaj aldoni kompleksan integrigan logikon de Google Cloud?

sub_filtrilo en nginx

Feliĉe mi tamen trovis facilan solvon iomete malbela. Mi aldonis al la default.conf agordo en Nginx tia filtrilo:

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

En mia aranĝo, Nginx funkciis kiel prokurilo inter MediaGoblin kaj la fina uzanto. La supra direktivo diras al Nginx serĉi kaj anstataŭigi ĉiujn respondojn HTML de MediaGoblin antaŭ ol servi ilin al la fina uzanto. Nginx anstataŭigas ĉiujn relativajn vojojn al mediaj dosieroj de MediaGoblin per URL-oj de Google-nuba stokado.

Ekzemple, MediaGoblin generas ĉi tiun 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 ŝanĝas la respondon:

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

Nun ĉio funkcias kiel ĝi devus:

Mia okjara serĉo por ciferecigi 45 videkasedojn. Parto 2
Nginx reverkas respondojn de MediaGoblin por ke klientoj povu peti amaskomunikilarajn dosierojn rekte de Google-nuba stokado

La plej bona parto pri mia solvo estas, ke ĝi ne postulas ŝanĝojn al la MediaGoblin-kodo. La dulinia direktivo Nginx perfekte integras MediaGoblin kaj Google Cloud, kvankam la du servoj scias nenion pri unu la alian.

Примечание: Ĉi tiu solvo postulas, ke la dosieroj en Google Cloud Storage estu legeblaj de ĉiuj. Por redukti la riskon de neaŭtorizita aliro, mi uzas longan hazardan sitelon nomon (ekzemple, mediagoblin-39dpduhfz1wstbprmyk5ak29) kaj kontrolu, ke la alirkontrolpolitiko de la sitelo ne permesas al neaŭtorizitaj uzantoj montri la enhavon de la dosierujo.

Fina produkto

Je ĉi tiu punkto, mi havis kompletan, funkciantan solvon. MediaGoblin feliĉe funkciis en sia propra ujo sur la Google Cloud Platform, do ĝi ne bezonis ofte fliki aŭ ĝisdatigi. Ĉio en mia procezo estis aŭtomatigita kaj reproduktebla, permesante simplajn redaktojn aŭ retrovigojn al antaŭaj versioj.

Mia familio tre ŝatis kiom facile estas spekti filmetojn. Kun la helpo de la Nginx-hako priskribita supre, labori kun video fariĝis tiel rapide kiel ĉe Jutubo.

La vido-ekrano aspektas jene:

Mia okjara serĉo por ciferecigi 45 videkasedojn. Parto 2
Enhavo de la katalogo de familiaj filmetoj per etikedo "Plej bona"

Alklakante la bildeton aperas la sekva ekrano:

Mia okjara serĉo por ciferecigi 45 videkasedojn. Parto 2
Vidante individuan klipo sur amaskomunikila servilo

Post multjara laboro, mi estis nekredeble ĝoja doni al parencoj la ŝancon spekti niajn filmetojn en la sama oportuna interfaco kiel ĉe Jutubo, kion mi origine volis.

Gratifiko: Kostoredukto al malpli ol $1 monate

Vi spektas hejmajn filmetojn malofte, nur ĉiujn kelkajn monatojn. Mia familio kolektive generis ĉirkaŭ 20 horojn da trafiko jare, sed la servilo funkciis 15/99,7. Mi pagis $XNUMX monate por servilo, kiu malfunkciis XNUMX% de la tempo.

Fine de 2018, Google publikigis produkton Nuba Kuro. La mortiga funkcio funkciis Docker-ujoj tiel rapide, ke la aplikaĵo povis respondi al HTTP-petoj. Tio estas, la servilo povus resti en standby - kaj komenci nur kiam iu volis iri al ĝi. Por malofte rulitaj programoj kiel la mia, kostoj iris de $15 monate al kelkaj cendoj jare.

Pro kialoj, kiujn mi ne memoras, Cloud Run ne funkciis kun mia MediaGoblin-bildo. Sed kun la apero de Cloud Run, mi rememoris tion Heroku ofertas similan servon senpage, kaj iliaj iloj estas multe pli oportunaj ol tiuj de Guglo.

Kun senpaga aplikaĵoservilo, la sola elspezo estas konservado de datumoj. La norma regiona stokado de Google kostas 2,3 cendojn/GB. La video-arkivo estas 33 GB, do mi pagas nur 77 cendojn monate.

Mia okjara serĉo por ciferecigi 45 videkasedojn. Parto 2
Ĉi tiu solvo kostas nur $0,77 monate

Konsiloj por tiuj, kiuj provos

Evidente, la procezo prenis min longan tempon. Sed mi esperas, ke ĉi tiu artikolo helpos vin ŝpari 80-90% de viaj hejmvideo-ciferecigaj kaj eldonaj klopodoj. En aparta sekcio vi povas trovi detala gvidilo paŝo post paŝo dum la tuta procezo, sed jen kelkaj ĝeneralaj konsiletoj:

  • Konservu kiel eble plej multe da metadatenoj dum la cifereciga kaj redakta fazo.
    • Valoraj informoj ofte estas registritaj sur videokasedaj etikedoj.
    • Registro kiu klipo estis prenita de kiu kasedo kaj en kiu ordo.
    • Skribu la daton de pafado, kiu povas esti indikita sur la video.
  • Konsideru pagi por profesiaj ciferecaj servoj.
    • Vi faros ekstreme estas malfacile kaj multekoste egali ilin laŭ cifereciga kvalito.
    • Sed restu for de firmao nomita EverPresent (informu min se vi bezonas pliajn detalojn).
  • Se vi mem faras la ciferecigon, aĉetu HDD.
    • Nekunpremita normdifina video prenas 100-200 MB je minuto.
    • Mi konservis ĉion sur mia Synology DS412 + (10 TB).
  • Skribu metadatenojn en iu komuna formato, kiu ne estas ligita al specifa aplikaĵo.
    • Clippriskriboj, tempokodoj, datoj, ktp.
    • Se vi konservas metadatumojn en aplikaĵ-specifa formato (aŭ pli malbone, tute ne konservu), vi ne povos refari la laboron se vi decidas uzi alian solvon.
    • Dum redaktado, vi vidas multajn utilajn metadatenojn sur la video. Vi perdos ilin se vi ne savos ilin.
      • Kio okazas en la video?
      • Kiu estas registrita tie?
      • Kiam ĝi estis registrita?
  • Etikedu viajn plej ŝatatajn filmetojn.
    • Por esti honesta, la plej multaj hejmaj videoenhavoj estas sufiĉe enuiga.
    • Mi aplikas la etikedon "bone de" al miaj plej ŝatataj klipoj kaj malfermas ilin kiam mi volas spekti amuzajn filmetojn.
  • Organizu ampleksan solvon kiel eble plej frue, por ke la procezo iru tuj de komenco ĝis fino.
    • Mi provis unue ciferecigi ĉiujn kasedojn, poste redakti ĉiujn kasedojn ktp.
    • Domaĝe, ke mi ne komencis per unu kasedo kaj faris la tutan laboron per ĝi. Tiam mi komprenus, kiaj decidoj kaj en kiuj stadioj influas la finan rezulton.
  • Minimumigu rekodigon.
    • Ĉiufoje kiam vi redaktas aŭ rekodas klipon, vi malbonigas ĝian kvaliton.
    • Ciferecigu krudan filmaĵon je maksimuma kvalito, tiam transkodu ĉiun klipon ĝuste unufoje en la formaton, kiun retumiloj denaske ludas.
  • Uzu la plej simplan eblan solvon por afiŝi filmetojn.
    • Postvide, MediaGoblin ŝajnas tro kompleksa ilo por sufiĉe simpla scenaro de generado de retpaĝoj kun senmova aro de videodosieroj.
    • Se mi rekomencus, mi uzus senmovan retejan generatoron kiel ekzemple Hugo, JekyllGridsome.
  • Faru muntadon.
    • Videoredaktado estas amuza maniero kombini la plej bonajn momentojn de pluraj videoj.
    • La ĉefa afero en redaktado estas muziko. Ekzemple, la temo estas mirinda Malrapida Neĝo de The National, jen mia persona malkovro.

fonto: www.habr.com