. Dopo aver elaborato tutti i clip, volevo organizzare la loro visione online in modo altrettanto comodo come su YouTube. Poiché si tratta di ricordi personali della famiglia, non è possibile caricarli su YouTube. Serve un hosting più privato, che sia al tempo stesso comodo e sicuro.
Step 3. Pubblicazione
ClipBucket, un clone open source di YouTube che può essere installato su un proprio server
Per prima cosa ho provato , che si presenta come un clone open source di YouTube, installabile sul proprio server.

Sorprendentemente, ClipBucket non ha alcuna guida all'installazione. Grazie a io utilizzando , uno strumento di gestione della configurazione dei server.
Parte della difficoltà era dovuta al fatto che gli script di installazione di ClipBucket erano completamente rotti. All'epoca io e secondo i termini del contratto non potevo contribuire a un clone open source di YouTube, ma io , da cui era facile apportare le modifiche necessarie. Passarono mesi e non capirono qual era il problema. Invece, continuavano ad aggiungere tutto maggiore i bug in ogni versione.
L'azienda ClipBucket operava secondo un modello di consulenza: rilasciava il proprio codice gratuitamente e addebitava il costo dell'assistenza nel deploy. Col tempo, mi sono reso conto che un'azienda che guadagna con l'assistenza a pagamento probabilmente non è molto interessata a far installare il prodotto dai clienti da soli.
MediaGoblin, un'alternativa più moderna
Dopo diversi mesi di delusione con ClipBucket, ho riesaminato le opzioni disponibili e trovato .

— è una piattaforma autonoma per la condivisione di file multimediali.
MediaGoblin ha molte funzionalità interessanti. A differenza di ClipBucket, che usa un PHP poco gradevole, MediaGoblin è scritto in Python — ho una vasta esperienza nella programmazione in questo linguaggio. Ha , che consente di automatizzare facilmente il caricamento dei video. La cosa più importante è che MediaGoblin viene fornito in , che elimina eventuali problemi di installazione.
— è una tecnologia che crea un ambiente autonomo per l'applicazione, funzionante ovunque. Utilizzo Docker in .
La sorprendente difficoltà di riconfigurare Docker per MediaGoblin
Ho presumito che il deploy dell'immagine Docker di MediaGoblin fosse un compito banale. Beh, non è andata proprio così.
Nell'immagine finale mancavano due funzionalità necessarie:
- Autenticazione
- MediaGoblin crea di default un portale multimediale pubblico, mentre io avevo bisogno di un modo per limitare l'accesso ai non autorizzati.
- Transcodifica
- Ogni volta che carichi un video, MediaGoblin cerca di ricodificarlo per uno streaming ottimale. Se il video è già pronto per lo streaming, la transcodifica ne riduce la qualità.
- MediaGoblin prevede , ma nell'immagine Docker esistente non è possibile farlo.
Beh, nessun problema. L'immagine Docker è fornita con , quindi si può .
Sfortunatamente, l'immagine Docker non è più compilata dal corrente . Ho cercato di sincronizzarlo con la versione dell'ultima build riuscita, ma neanche questo ha funzionato. Anche se ho utilizzato esattamente lo stesso codice, le dipendenze esterne di MediaGoblin sono cambiate, causando un errore nella build. Dopo decine di ore, ho eseguito ripetutamente il processo di build di MediaGoblin, che durava 10-15 minuti, fino a quando non ha finalmente funzionato.
Qualche mese dopo è accaduta la stessa cosa. In totale, negli ultimi anni, la catena delle dipendenze di MediaGoblin ha interrotto la mia build diverse volte, e l'ultima volta è successo proprio mentre scrivevo questo articolo. Alla fine ho pubblicato c e versioni delle librerie esplicitamente specificate. In altre parole, invece di un'affermazione discutibile secondo cui MediaGoblin funziona con qualsiasi versione >= 3.0, ho installato una dipendenza specifica per la versione , perché ho testato MediaGoblin con questa versione. Sembra che il prodotto necessiti di , ma non mi sono ancora occupato di questo.
In ogni caso, dopo molte ore di lotta, sono finalmente riuscito a compilare e configurare MediaGoblin in un'immagine Docker. Non è stato difficile e .
Passo 4. Hosting
Poiché MediaGoblin funzionava su Docker sul mio computer locale, il passaggio successivo è stato il deployment su un server cloud, in modo che la mia famiglia potesse vedere i video.
MediaGoblin e il problema dell'archiviazione video
Ci sono molte piattaforme che accettano un'immagine Docker e la ospitano su un URL pubblico. Il problema è che, oltre all'applicazione stessa, dovevo pubblicare 33 GB di file video. Avrei potuto codificarli nel contenitore Docker, ma sarebbe stato ingombrante e poco pratico. Modificare una riga di configurazione richiederebbe un nuovo deployment di 33 GB di dati.
Quando ho utilizzato ClipBucket, ho risolto il problema con — un'utilità che consente al sistema operativo di montare directory nello storage cloud di Google Cloud come normali percorsi del file system. Ho posizionato i file video su Google Cloud e ho usato gcsfuse per farli apparire in ClipBucket come file locali.
La differenza stava nel fatto che ClipBucket funzionava su una vera macchina virtuale, mentre MediaGoblin utilizzava un container Docker. Qui, il montaggio dei file dallo storage cloud si è rivelato molto più complicato. Ho speso decine di ore per risolvere tutti i problemi e ho scritto a riguardo .

L'integrazione iniziale di MediaGoblin con Google Cloud Storage, di cui ho
Dopo alcune settimane di messa a punto di tutti i componenti, tutto ha funzionato. Senza apportare alcuna modifica al codice di MediaGoblin, sono riuscito a fargli leggere e scrivere file multimediali nello storage cloud di Google.
L'unico problema era che MediaGoblin era diventato incredibilmente lento. Il caricamento delle miniature video sulla home page impiegava ben 20 secondi. Se durante la visione di un video saltavi in avanti, MediaGoblin si bloccava per interminabili 10 secondi prima di riprendere la riproduzione.
Il problema principale era che i video e le immagini raggiungevano l'utente attraverso un percorso lungo e contorto. Dovevano passare dallo storage cloud di Google attraverso gcsfuse in MediaGoblin, Nginx, e solo allora arrivavano al browser dell'utente. Il collo di bottiglia principale era gcsfuse, che non è ottimizzato per un'operatività veloce. Gli sviluppatori avvertono di significativi ritardi nell'uso dello strumento direttamente nella homepage del progetto:

Avvisi nella documentazione di gcsfuse
Idealmente, il browser dovrebbe estrarre i file direttamente da Google Cloud, saltando tutti i livelli intermedi. Come fare ciò, senza immergersi nel codice di MediaGoblin e senza aggiungere una logica d'integrazione complessa con Google Cloud?
Il trucco sub_filter in nginx
Fortunatamente, ho trovato una soluzione semplice, anche se un po' non molto esteticamente gradevole. Ho aggiunto alla configurazione default.conf di Nginx :
sub_filter "/mgoblin_media/media_entries/" "https://storage.googleapis.com/MY-GCS-BUCKET/media_entries/";
sub_filter_once off;Nel mio setup, Nginx fungeva da proxy tra MediaGoblin e l'utente finale. La direttiva sopra riportata richiede a Nginx di cercare e sostituire tutte le risposte HTML di MediaGoblin prima di passarle all'utente finale. Nginx sostituisce tutti i percorsi relativi ai media di MediaGoblin con gli URL del Google Cloud Storage.
Ad esempio, MediaGoblin genera questo HTML:
Nginx modifica la risposta:
Ora tutto funziona come dovrebbe:

Nginx riscrive le risposte da MediaGoblin in modo che i clienti possano richiedere i media direttamente dal Google Cloud Storage.
La cosa migliore della mia soluzione è che non richiede alcuna modifica al codice di MediaGoblin. La direttiva di Nginx lunga due righe integra facilmente MediaGoblin e Google Cloud, anche se questi servizi non sanno nulla l'uno dell'altro.
Nota: questa soluzione richiede che i file nel cloud di Google siano accessibili in lettura per tutti. Per ridurre il rischio di accessi non autorizzati, utilizzo un nome del bucket lungo e casuale (ad esempio,
mediagoblin-39dpduhfz1wstbprmyk5ak29) e controllo che la politica di accesso del bucket non consenta agli utenti non autorizzati di visualizzare il contenuto della directory.
Prodotto finale
Fino a questo momento avevo una soluzione completa e funzionante. MediaGoblin funzionava felicemente nel proprio container sulla piattaforma cloud di Google, quindi non era necessario correggerlo o aggiornarlo frequentemente. Tutto nel mio processo era automatizzato e riproducibile, consentendo semplici modifiche o rollback a versioni precedenti.
La mia famiglia ha apprezzato molto quanto fosse facile sfogliare i video. Con l'hack di Nginx sopra descritto, lavorare con i video è diventato veloce come su YouTube.
La schermata di visualizzazione appare come segue:

Contenuto della directory video familiare per il tag 'Migliore'
Cliccando sulla miniatura si ottiene questa schermata:

Visualizzazione di un singolo clip sul server multimediale
Dopo molti anni di lavoro, è stato incredibilmente gratificante offrire ai miei familiari la possibilità di vedere i nostri video con un'interfaccia tanto comoda quanto quella di YouTube, proprio come avevo inizialmente desiderato.
Bonus: riduzione dei costi a meno di 1 dollaro al mese
Non guardi video a casa molto spesso, solo ogni pochi mesi. La mia famiglia ha generato collettivamente circa 20 ore di traffico in un anno, ma il server era attivo 24 ore su 24. Pagavo mensilmente 15 dollari per un server che era inattivo il 99,7% del tempo.
Alla fine del 2018, Google ha lanciato un prodotto . La caratteristica principale era la capacità di avviare contenitori Docker così rapidamente che l'applicazione poteva rispondere a richieste HTTP. In altre parole, il server poteva rimanere in standby e avviarsi solo quando qualcuno voleva collegarsi. Per applicazioni avviate raramente come la mia, i costi sono scesi da 15 dollari al mese a pochi centesimi all'anno.
Per motivi che non ricordo più, Cloud Run non funzionava con la mia immagine MediaGoblin. Ma con l'arrivo di Cloud Run, ho ricordato che offre un servizio simile gratuitamente, e i loro strumenti sono molto più comodi di quelli di Google.
Con un server applicativo gratuito, l'unico costo è rappresentato dallo storage dei dati. Il costo standard per lo storage regionale di Google è di 2,3 centesimi/GB. L'archivio video occupa 33 GB, quindi pago solo 0,77 dollari al mese.

Il costo di questa soluzione è solo di 0,77 dollari al mese.
Consigli per chi sta per provare.
È evidente che il mio processo ha richiesto molto tempo. Ma spero che questo articolo vi aiuti a risparmiare l'80-90% degli sforzi nella digitalizzazione e pubblicazione di video domestici. In una sezione separata potete trovare per l'intero processo, ma ecco alcuni consigli generali:
- Durante la digitalizzazione e l'editing, cercate di conservare il maggior numero possibile di metadata.
- Informazioni preziose sono spesso registrate sulle etichette delle videocassette.
- Annotate quale clip è stata registrata da quale cassetta e in quale ordine.
- Annotate la data delle riprese, che potrebbe essere indicata nel video.
- Considerate di pagare per i servizi di digitalizzazione professionale.
- Vi sarà estremamente difficile e costoso eguagliare la qualità della digitalizzazione.
- Ma state alla larga da un'azienda chiamata EverPresent (contattatemi se avete bisogno di dettagli).
- Se digitalizzi da solo, acquista un HDD.
- Un video non compresso in risoluzione standard occupa 100-200 MB al minuto.
- Ho sempre archiviato tutto sul mio (10 TB).
- Registra i metadati in un formato comune, che non sia legato a un'applicazione specifica.
- Descrizioni dei videoclip, codici temporali, date, ecc.
- Se salvi i metadati in un formato di applicazione specifico (o, peggio ancora, non li salvi affatto), non potrai ripetere il lavoro se decidi di utilizzare un'altra soluzione.
- Durante la modifica, vedrai molti utili metadati nel video. Li perderai se non li salvi.
- Cosa sta succedendo nel video?
- Chi è registrato?
- Quando è stato registrato?
- Segna i video preferiti.
- A dire il vero, la maggior parte dei video domestici è piuttosto noiosa.
- Applico l'etichetta 'best of' ai miei videoclip preferiti e li riapro quando voglio vedere video divertenti.
- Organizza una soluzione completa il prima possibile, in modo che il processo scorra dall'inizio alla fine.
- Ho cercato prima di digitalizzare tutte le cassette, poi di modificarle e così via.
- È un peccato che non abbia iniziato con una sola cassetta e non abbia fatto tutto il lavoro su di essa. Allora avrei capito quali soluzioni e in quali fasi influenzano il risultato finale.
- Riduci al minimo la ricodifica.
- Ogni volta che modifichi o ricodifichi un clip, ne deteriori la qualità.
- Digitalizza i filmati grezzi con la massima qualità e poi ricodifica ogni clip esattamente una volta nel formato che i browser riproducono nativamente.
- Usa la soluzione più semplice possibile per pubblicare i video.
- Guardando indietro, MediaGoblin sembra uno strumento troppo complesso per un semplice scenario di generazione di pagine web con un insieme statico di file video.
- Se dovessi ricominciare, utilizzerei un generatore di siti statici come , o .
- Fai il montaggio.
- Il montaggio video è un modo interessante per unire i momenti migliori di diversi video.
- La cosa principale nel montaggio è la musica. Ad esempio, la tema di The National, è la mia scoperta personale.
Fonte: habr.com
