A mo ricerca di ottu anni per digitalizà 45 videocassette. Parte 2

A prima parte descrive a difficult quest per digitalizà i vechji video di famiglia è sparghje in sceni separati.. Dopu avè trasfurmatu tutti i clips, aghju vulsutu urganizà a so visualizazione in linea cusì cunvene cum'è in YouTube. Siccomu questi sò ricordi persunali di a famiglia, ùn ponu esse publicati in YouTube stessu. Avemu bisognu di un hosting più privatu chì hè à tempu convenientu è sicuru.

Passu 3: Publicazione

ClipBucket, un clone di YouTube open source chì pò esse installatu in u vostru servitore

Prima cosa chì aghju pruvatu ClipBucket, chì si chjama un clone di YouTube open-source chì pudete installà in u vostru servitore.

A mo ricerca di ottu anni per digitalizà 45 videocassette. Parte 2

Curiosamente, ClipBucket ùn hà micca struzzioni di stallazione. Grazie à à a gestione esterna я automatizatu u prucessu di stallazione cun l'aiutu di Ansible, un strumentu di gestione di cunfigurazione di u servitore.

A parte di a difficultà era chì i script di stallazione di ClipBucket eranu completamente rotti. À quellu tempu I hà travagliatu in Google è sicondu i termini di u cuntrattu ùn aghju micca u dirittu di cuntribuisce à u clone di YouTube open source, ma I hà publicatu un rapportu di bug, da quale e correzioni necessarie puderanu esse facilmente fatte. Passavanu mesi, è ùn anu micca capitu quale era u prublema. Invece aghjunghjenu tuttu più di più bug in ogni versione.

ClipBucket hà operatu nantu à un mudellu di cunsultazione - anu liberatu u so codice per liberu è pagatu per l'assistenza di implementazione. Pocu à pocu à pocu, mi hà capitu chì una sucità chì guadagna soldi da u supportu pagatu probabilmente ùn hè micca assai interessata à avè i clienti installà u pruduttu stessu.

MediaGoblin, una alternativa più muderna

Dopu mesi di frustrazione cù ClipBucket, aghju cercatu l'opzioni dispunibili è truvate MediaGoblin.

A mo ricerca di ottu anni per digitalizà 45 videocassette. Parte 2
MediaGoblin hè una piattaforma di spartera di media offline

MediaGoblin hà assai boni. A cuntrariu di ClipBucket in PHP unsightly, MediaGoblin hè scrittu in Python, una lingua chì aghju assai sperienza di codificazione. Manghja interfaccia di linea di cumanda, chì vi permette di automatizà facilmente u scaricamentu di video. U più impurtante, MediaGoblin vene cun Image Docker, chì elimina ogni prublema di stallazione.

Docker hè una tecnulugia chì crea un ambiente autonomu per una applicazione per eseguisce in ogni locu. Aghju utilizatu Docker in parechji di i so prughjetti.

A difficultà sorprendente di re-dockerizing MediaGoblin

Aghju presumitu chì implementà l'imaghjini docker MediaGoblin seria un compitu triviale. Ebbè, ùn hè micca andatu bè cusì.

L'imaghjina finita ùn cuntene dui funzioni necessarii:

  • Autenticazione
    • MediaGoblin crea un portale di media publicu per difettu, è aghju avutu bisognu di un modu per limità l'accessu à l'esterni.
  • Transcodificazione
    • Ogni volta chì scaricate un video, MediaGoblin prova di trascodificà per un streaming ottimale. Se u video hè inizialmente pronta per u streaming, a transcodificazione degrada a qualità.
    • MediaGoblin furnisce disattivà a transcodificazione via l'opzioni di cunfigurazione, ma questu ùn pò micca esse fattu in una maghjina Docker esistente.

Ebbè, senza prublema. L'imaghjini di Docker vene cun fonte aperta, cusì hè pussibule ricustruisce sè stessu.

Sfortunatamente, l'imaghjini di Docker ùn hè più custruitu da l'attuale. Repository MediaGoblin. Aghju pruvatu à sincronizà cù a versione da l'ultima custruzzione di successu, ma ancu hà fiascatu. Ancu s'è aghju utilizatu u listessu codice esattamente, e dipendenze esterne di MediaGoblin anu cambiatu, rompendu a custruzione. Dopu decine d'ore, aghju attraversatu u prucessu di creazione di MediaGoblin di 10-15 minuti una volta è più, finu à chì finalmente hà travagliatu.

Uni pochi mesi dopu hè accadutu a listessa cosa. In tuttu, a catena di dependenza di MediaGoblin hà rottu a mo custruzzione parechje volte in l'ultimi dui anni, è l'ultima volta chì hè accadutu era ghjustu mentre scriveva stu articulu. Infine aghju publicatu propria forchetta di MediaGoblin c dipendenze hard-coded e versioni esplicitamente specificate di biblioteche. In altri palori, invece di u dubbitu chì MediaGoblin travaglia cù ogni versione apure >= 3.0, aghju installatu una dependenza di versione specifica sedaru 4.2.1perchè aghju pruvatu MediaGoblin cù sta versione. Sembra chì u pruduttu hà bisognu mecanismu di costruzione riproducibile, ma ùn l'aghju micca ancu fattu.

In ogni casu, dopu à parechje ore di lotta, aghju finalmente pussutu custruisce è cunfigurà MediaGoblin in una maghjina Docker. Era digià faciule quì saltà a transcodificazione inutile и installate Nginx per l'autentificazione.

Passu 4. Hosting

Siccomu MediaGoblin eseguiva Docker in u mo urdinatore lucale, u prossimu passu era di implementà in un servitore nuvola per chì a famiglia puderia vede u video.

MediaGoblin è u prublema di almacenamiento di video

Ci sò parechje piattaforme chì piglianu una maghjina Docker è l'ospitu in un URL publicu. A catch hè chì in più di l'app stessu, 33 GB di schedarii video anu da esse publicati. Era pussìbule di codificarli in una maghjina Docker, ma questu seria ingombrante è bruttu. U cambiamentu di una linea di cunfigurazione richiederà a ridistribuzione di 33 GB di dati.

Quandu aghju utilizatu ClipBucket, aghju risoltu u prublema gcsfuse - una utilità chì permette à u sistema operatore di cullà cartulari in u almacenamentu in nuvola di Google Cloud cum'è percorsi regulari à u sistema di fugliale. Aghju allughjatu i fugliali video in Google Cloud è aghju utilizatu gcsfuse per fà cumparisce in ClipBucket cum'è schedarii lucali.

A diferenza era chì ClipBucket curria in una vera macchina virtuale, mentri MediaGoblin curria in un containeru Docker. Quì, a stallazione di i fugliali da u almacenamentu in nuvola hè diventatu assai più difficiule. Aghju passatu decine d'ore à risolve tutti i prublemi è hà scrittu annantu tuttu u blog post.

A mo ricerca di ottu anni per digitalizà 45 videocassette. Parte 2
L'integrazione iniziale di MediaGoblin cù l'almacenamiento di Google Cloud, chì parlu dettu in 2018

Dopu parechje settimane di aghjustà tutti i cumpunenti, tuttu hà travagliatu. Senza fà cambiamenti à u codice di MediaGoblin, l'aghju ingannatu in lettura è scrittura di schedarii media in u almacenamentu in nuvola di Google.

L'unicu prublema era chì MediaGoblin hè diventatu obscenely slow. Ci hà pigliatu 20 seconde per i video miniature per caricate in a pagina di casa. Se saltate in avanti mentre guardate un video, MediaGoblin si mette in pausa per 10 seconde senza fine prima di ripiglià a riproduzione.

U prublema principali era chì i video è l'imaghjini anu pigliatu una strada longa è rotonda à l'utilizatori. Anu avutu da passà da u almacenamentu in nuvola di Google attraversu gcsfuse à MediaGoblin, Nginx - è solu dopu ghjunghjenu à u navigatore di l'utilizatori. U collu principale era gcsfuse, chì ùn hè micca ottimizatu per a velocità. I sviluppatori avvisanu di grandi ritardi in l'operazione di l'utilità ghjustu nantu à a pagina principale di u prugettu:

A mo ricerca di ottu anni per digitalizà 45 videocassette. Parte 2
Editu Adverbe nantu à u rendiment bassu in a documentazione di gcsfuse

Ideale, u navigatore deve piglià i fugliali direttamente da Google Cloud, saltendu qualsiasi strati intermedi. Cumu pudete fà questu senza immersione in a basa di codice MediaGoblin o aghjunghje una logica cumplessa di integrazione di Google Cloud?

Sub_filter truccu in nginx

Per furtuna aghju trovu una suluzione simplice, ancu un pocu bruttu. Aghju aghjustatu à a cunfigurazione default.conf in Nginx un tali filtru:

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

In a mo cunfigurazione, Nginx hà agitu cum'è un proxy trà MediaGoblin è l'utilizatore finale. A direttiva sopra indica à Nginx per circà è rimpiazzà tutte e risposte HTML MediaGoblin prima di serve à l'utilizatori finali. Nginx rimpiazza tutti i percorsi relative à i schedarii media MediaGoblin cù URL da u almacenamentu in nuvola di Google.

Per esempiu, MediaGoblin genera HTML cusì:

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

Nginx cambia a risposta:

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

Avà tuttu funziona cum'è previstu:

A mo ricerca di ottu anni per digitalizà 45 videocassette. Parte 2
Nginx riscrive e risposte da MediaGoblin per chì i clienti ponu dumandà i fugliali multimediali direttamente da u Google cloud storage

U megliu di a mo suluzione hè chì ùn hà micca bisognu di cambiamenti in u codice MediaGoblin. A direttiva di duie linee di Nginx integra perfettamente MediaGoblin è Google Cloud, ancu s'è i servizii ùn sanu assolutamente nunda di l'altru.

Vita: Sta suluzione richiede chì i schedari in u almacenamentu in nuvola di Google sò leghjite da tutti. Per riduce u risicu di l'accessu micca autorizatu, aghju utilizatu un nome di bucket longu è aleatoriu (p.e. mediagoblin-39dpduhfz1wstbprmyk5ak29) è verificate chì a pulitica di cuntrollu di l'accessu di u bucket ùn permette micca à l'utilizatori micca autorizati di vede u cuntenutu di u repertoriu.

Pruduttu finali

À questu puntu aghju avutu una suluzione cumpleta è di travagliu. MediaGoblin curriava felice in u so propiu containeru nantu à a piattaforma di nuvola di Google, per quessa, ùn avia micca bisognu di patch o aghjurnatu spessu. Tuttu in u mo prucessu era automatizatu è riproducibile, permettendu edizioni simplici o rollbacks à e versioni precedenti.

A mo famiglia hà veramente piaciutu quantu era faciule per fighjà i video. Cù l'aiutu di u pirate di Nginx descrittu sopra, u travagliu cù i video hè diventatu cum'è in YouTube.

A pantalla di visualizazione hè cusì:

A mo ricerca di ottu anni per digitalizà 45 videocassette. Parte 2
Cuntenutu di u catalogu di video di famiglia per tag "Best"

Cliccà nant'à a miniatura porta una schermata cum'è questu:

A mo ricerca di ottu anni per digitalizà 45 videocassette. Parte 2
Vede un clip unicu nantu à un servitore media

Dopu anni di travagliu, hè stata incredibilmente gratificante per dà à i membri di a famiglia l'uppurtunità di fighjà i nostri video in a listessa interfaccia user-friendly simile à YouTube chì vulia inizialmente.

Bonus: Reduce i costi à menu di $ 1 per mese

Ùn guardate micca i video in casa spessu, solu ogni pochi mesi. A mo famiglia hà generatu in modu cullettivu circa 20 ore di trafficu in un annu, ma u servitore funzionava 15/99,7. Aghju pagatu $ XNUMX mensili per un servitore chì era falatu XNUMX% di u tempu.

À a fine di 2018, Google hà liberatu u pruduttu Cloud Run. A funzione killer era in esecuzione di cuntenituri Docker cusì rapidamente chì l'applicazione puderia risponde à e richieste HTTP. Questu hè, u servitore puderia stà in modu standby è principià solu quandu qualchissia vulia accede. Per l'applicazioni in esecuzione rara cum'è a mo, u costu hè cascatu da $ 15 per mese à uni pochi centesimi annu.

Per ragioni chì ùn mi ricordu più, Cloud Run ùn hà micca travagliatu cù a mo imagine MediaGoblin. Ma cù l'avventu di Cloud Run, aghju ricurdatu chì Heroku offre un serviziu simili gratuitamente, è i so arnesi sò assai più amichevuli di Google.

Cù un servitore d'applicazione gratuitu, l'unicu costu hè u almacenamentu di dati. L'almacenamentu regiunale standard di Google costa 2,3 centesimi / GB. L'archiviu video occupa 33 GB, cusì pagu solu 77 centesimi à u mese.

A mo ricerca di ottu anni per digitalizà 45 videocassette. Parte 2
Sta suluzione costa solu $ 0,77 per mese

Cunsiglii per quelli chì pensanu à pruvà

Ovviamente u prucessu m'hà pigliatu assai tempu. Ma speru chì questu articulu vi aiuterà à salvà 80-90% di u sforzu di digitalizà è publicà i vostri video in casa. In una sezione separata pudete truvà guida dettagliata passo-passo in tuttu u prucessu, ma quì sò qualchi cunsiglii generale:

  • Durante a fase di digitalizazione è edizione, priservà quant'è metadata pussibule.
    • L'infurmazione preziosa hè spessu arregistrata nantu à l'etichette di cassette video.
    • Mantene a traccia di quale clip hè statu giratu da quale cinta è in quale ordine.
    • Scrivite a data di sparà, chì pò apparisce nantu à u video.
  • Cunsiderate u pagamentu per i servizii di digitalizazione prufessiunale.
    • Vulete assai hè difficiuli è caru per currisponde à elli in termini di qualità di digitalizazione.
    • Ma stà luntanu da una sucietà chjamata EverPresent (missaghju se avete bisognu di dettagli).
  • Se fate a digitalizazione stessu, cumprà un HDD.
    • U video di definizione standard senza cumpressione piglia 100-200 MB per minutu.
    • Aghju tenutu tuttu nantu à u mio Synology DS412 + (10 TB).
  • Registrate metadata in qualchì formatu cumuni chì ùn hè micca ligatu à una applicazione specifica.
    • Descrizioni di clip, codici di tempu, date, etc.
    • Se salvate i metadati in un formatu specificu di l'applicazione (o peggiu, ùn salve micca in tuttu), ùn puderete micca rifarà u travagliu se decide di utilizà una suluzione diversa.
    • Mentre editate, vedete assai metadati utili nantu à u video. Li perderete s'ellu ùn li salvi micca.
      • Chì succede in u video ?
      • Quale hè registratu quì?
      • Quandu hè statu registratu?
  • Marca i vostri video preferiti.
    • Per esse onesto, a maiò parte di i video in casa sò abbastanza noiosi.
    • Applicà u tag "best of" à i mo clips preferiti è l'apre quandu vogliu vede video divertenti.
  • Organizà una suluzione cumpleta u più prestu pussibule per chì u prucessu vai direttamente da u principiu à a fine.
    • Aghju pruvatu à digitalizà tutte e cassette prima, dopu edità tutte e cassette, etc.
    • Vulariu avè principiatu cù una cinta è fattu tuttu u travagliu cun ella. Allora capisce chì e decisioni è in quali tappe affettanu u risultatu finali.
  • Mantene a recodificazione à u minimu.
    • Ogni volta chì editate o ricudificate un clip, riduce a so qualità.
    • Digitalizeghja i vostri filmati crudi à a qualità massima, poi trascodifica ogni clip una volta esattamente in u furmatu chì i navigatori rendenu nativamente.
  • Aduprate a suluzione più simplice pussibule per publicà video clips.
    • In retrospettiva, MediaGoblin pare cum'è un strumentu troppu cumplessu per u scenariu abbastanza simplice di generazione di pagine web cù un settore staticu di fugliali video.
    • Sè aghju principiatu da novu, aghju aduprà un generatore di situ staticu cum'è Hugo, Jekyll o Gridsome.
  • Fate a stallazione.
    • L'editazione di video hè un modu divertente per cumminà i migliori mumenti da parechji video.
    • A cosa principale in l'edità hè a musica. Per esempiu, u tema hè stupente Neve lenta da The National, questu hè a mo scuperta persunale.

Source: www.habr.com