A miña procura de oito anos para dixitalizar 45 videocasetes. Parte 2

A primeira parte describe a difícil procura de dixitalizar vídeos familiares antigos e dividilos en escenas separadas.. Despois de procesar todos os clips, quería organizar a súa visualización en liña tan cómodo como en YouTube. Dado que estes son recordos persoais da familia, non se poden publicar en YouTube. Necesitamos un hospedaxe máis privado que sexa cómodo e seguro.

Paso 3: Publicación

ClipBucket, un clon de YouTube de código aberto que se pode instalar no teu propio servidor

O primeiro que probei ClipBucket, que se denomina clon de YouTube de código aberto que podes instalar no teu servidor.

A miña procura de oito anos para dixitalizar 45 videocasetes. Parte 2

Sorprendentemente, ClipBucket non ten instrucións de instalación. Grazas a á xestión externa я automatizar o proceso de instalación coa axuda Ansible, unha ferramenta de xestión de configuración do servidor.

Parte da dificultade foi que os scripts de instalación de ClipBucket estaban completamente rotos. Daquela eu traballou en Google e segundo os termos do contrato non tiña dereito a contribuír ao clon de YouTube de código aberto, pero eu publicou un informe de erro, a partir do cal se poderían facer facilmente as correccións necesarias. Pasaron os meses, e aínda non entendían cal era o problema. En cambio, engadiron todo máis que erros en cada versión.

ClipBucket operaba nun modelo de consultoría: lanzaron o seu código de xeito gratuíto e cobraron por asistencia de implantación. Pouco a pouco entendín que unha empresa que gaña cartos co apoio de pago probablemente non está moi interesada en que os clientes instalen o produto eles mesmos.

MediaGoblin, unha alternativa máis moderna

Despois de meses de frustración con ClipBucket, busquei as opcións dispoñibles e atopei MediaGoblin.

A miña procura de oito anos para dixitalizar 45 videocasetes. Parte 2
MediaGoblin é unha plataforma para compartir medios fóra de liña

MediaGoblin ten moitas vantaxes. A diferenza de ClipBucket en PHP antiestético, MediaGoblin está escrito en Python, unha linguaxe coa que teño moita experiencia en codificación. Comer interface de liña de comandos, que che permite automatizar facilmente a descarga de vídeos. O máis importante é que MediaGoblin vén con Imaxe de Docker, o que elimina calquera problema de instalación.

Estivador é unha tecnoloxía que crea un ambiente autónomo para que unha aplicación se execute en calquera lugar. Eu uso Docker en moitos dos seus proxectos.

A sorprendente dificultade de volver a atracar MediaGoblin

Supuxín que implementar a imaxe docker de MediaGoblin sería unha tarefa trivial. Ben, iso non funcionou así.

A imaxe rematada non contiña dúas funcións necesarias:

  • Autenticación
    • MediaGoblin crea un portal de medios públicos por defecto, e necesitaba unha forma de restrinxir o acceso a persoas alleas.
  • Transcodificación
    • Cada vez que descargas un vídeo, MediaGoblin tenta transcodificalo para unha transmisión óptima. Se o vídeo está inicialmente listo para transmitir, a transcodificación degrada a calidade.
    • MediaGoblin ofrece desactivando a transcodificación mediante opcións de configuración, pero isto non se pode facer nunha imaxe de Docker existente.

Pois non hai problema. A imaxe de Docker inclúe código aberto, polo que é posible reconstruílo ti mesmo.

Desafortunadamente, a imaxe de Docker xa non está construída a partir da actual. Repositorio MediaGoblin. Tentei sincronizalo coa versión da última compilación exitosa, pero tamén fallou. Aínda que usei o mesmo código, as dependencias externas de MediaGoblin cambiaron, rompendo a compilación. Despois de ducias de horas, repasei o proceso de creación de MediaGoblin de 10 a 15 minutos unha e outra vez ata que finalmente funcionou.

Uns meses despois pasou o mesmo. En total, a cadea de dependencia de MediaGoblin rompeu a miña compilación varias veces durante os últimos dous anos, e a última vez que pasou foi xusto cando escribía este artigo. Por fin publiquei propio fork de MediaGoblin c dependencias codificadas e versións especificadas explícitamente das bibliotecas. Noutras palabras, en lugar da dubidosa afirmación de que MediaGoblin funciona con calquera versión apio >= 3.0, instalei unha dependencia de versión específica apio 4.2.1porque probei MediaGoblin con esta versión. Parece que o produto necesita mecanismo de construción reproducible, pero aínda non o fixen.

De todos os xeitos, despois de moitas horas de loita, por fin puiden construír e configurar MediaGoblin nunha imaxe de Docker. Alí xa era fácil omita transcodificación innecesaria и instalar Nginx para a autenticación.

Paso 4. Aloxamento

Dado que MediaGoblin estaba a executar Docker no meu ordenador local, o seguinte paso foi implementalo nun servidor na nube para que a familia puidese ver o vídeo.

MediaGoblin e o problema de almacenamento de vídeo

Hai moitas plataformas que toman unha imaxe de Docker e a aloxan nun URL público. O problema é que, ademais da propia aplicación, houbo que publicar 33 GB de ficheiros de vídeo. Era posible codificalos nunha imaxe de Docker, pero iso sería engorroso e feo. Cambiar unha liña de configuración requiriría volver a implantar 33 GB de datos.

Cando usei ClipBucket resolvín o problema con gcsfuse - unha utilidade que permite ao sistema operativo cargar directorios ao almacenamento na nube de Google Cloud como camiños habituais ao sistema de ficheiros. Aloxei os ficheiros de vídeo en Google Cloud e usei gcsfuse para facelos aparecer en ClipBucket como ficheiros locais.

A diferenza era que ClipBucket funcionaba nunha máquina virtual real, mentres que MediaGoblin funcionaba nun contedor Docker. Aquí, montar ficheiros desde o almacenamento na nube resultou ser moito máis difícil. Pasei ducias de horas resolvendo todos os problemas e escribín sobre iso entrada enteira do blog.

A miña procura de oito anos para dixitalizar 45 videocasetes. Parte 2
A integración inicial de MediaGoblin co almacenamento de Google Cloud, do que estou a falar contou en 2018

Despois de varias semanas de axustar todos os compoñentes, todo funcionou. Sen facer ningún cambio no código de MediaGoblin, enganeino para ler e escribir ficheiros multimedia no almacenamento na nube de Google.

O único problema foi que MediaGoblin se tornou obscenamente lento. Tardaron 20 segundos en cargar as miniaturas dos vídeos na páxina de inicio. Se saltabas cara adiante mentres ves un vídeo, MediaGoblin faría unha pausa durante 10 segundos interminables antes de retomar a reprodución.

O principal problema foi que os vídeos e as imaxes levaban un longo e indirecto camiño ata o usuario. Tiveron que pasar do almacenamento na nube de Google a través de gcsfuse a MediaGoblin, Nginx e só entón chegaron ao navegador do usuario. O pescozo de botella principal foi gcsfuse, que non está optimizado para a velocidade. Os desenvolvedores advirten sobre grandes atrasos no funcionamento da utilidade directamente na páxina principal do proxecto:

A miña procura de oito anos para dixitalizar 45 videocasetes. Parte 2
Advertencias sobre o baixo rendemento na documentación de gcsfuse

Idealmente, o navegador debería buscar ficheiros directamente de Google Cloud, evitando as capas intermedias. Como pode facelo sen mergullarse na base de código de MediaGoblin ou engadir unha complexa lóxica de integración de Google Cloud?

Truco de sub_filtro en nginx

Por sorte atopei unha solución sinxela, aínda que un pouco feo. Engadín á configuración default.conf en Nginx tal filtro:

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

Na miña configuración, Nginx actuou como un proxy entre MediaGoblin e o usuario final. A directiva anterior indica a Nginx que busque e substitúa todas as respostas HTML de MediaGoblin antes de entregalas ao usuario final. Nginx substitúe todas as rutas relativas aos ficheiros multimedia de MediaGoblin con URL do almacenamento na nube de Google.

Por exemplo, MediaGoblin xera HTML deste xeito:

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

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

Agora todo está funcionando como se esperaba:

A miña procura de oito anos para dixitalizar 45 videocasetes. Parte 2
Nginx reescribe as respostas de MediaGoblin para que os clientes poidan solicitar ficheiros multimedia directamente desde o almacenamento na nube de Google

A mellor parte da miña solución é que non require ningún cambio no código de MediaGoblin. A directiva de dúas liñas de Nginx integra perfectamente MediaGoblin e Google Cloud, aínda que os servizos non se saben absolutamente nada un do outro.

Nota: Esta solución require que todos os ficheiros do almacenamento na nube de Google poidan lelos. Para reducir o risco de acceso non autorizado, uso un nome de depósito longo e aleatorio (p. ex. mediagoblin-39dpduhfz1wstbprmyk5ak29) e verifique que a política de control de acceso do depósito non permite que usuarios non autorizados mostren o contido do directorio.

Produto final

Neste punto tiña unha solución completa e funcional. MediaGoblin funcionou felizmente no seu propio contedor na plataforma na nube de Google, polo que non necesitaba parchear nin actualizarse con frecuencia. Todo o meu proceso foi automatizado e reproducible, permitindo edicións sinxelas ou retroceder a versións anteriores.

A miña familia gustoulle moito o fácil que era ver os vídeos. Coa axuda do hack de Nginx descrito anteriormente, traballar con vídeos fíxose tan rápido como en YouTube.

A pantalla de visualización ten o seguinte aspecto:

A miña procura de oito anos para dixitalizar 45 videocasetes. Parte 2
Contido do catálogo de vídeos familiar coa etiqueta "Mellor"

Facendo clic na miniatura aparecerá unha pantalla como esta:

A miña procura de oito anos para dixitalizar 45 videocasetes. Parte 2
Visualización dun único clip nun servidor multimedia

Despois de anos de traballo, foi incriblemente gratificante ofrecer aos membros da familia a oportunidade de ver os nosos vídeos na mesma interface amigable de YouTube que eu quería orixinalmente.

Bonificación: reduce os custos a menos de $ 1 ao mes

Non ves vídeos domésticos con frecuencia, só cada poucos meses. A miña familia xerou colectivamente unhas 20 horas de tráfico nun ano, pero o servidor funcionaba as 15 horas do día, os 99,7 días da semana. Paguei XNUMX dólares mensuais por un servidor que caía o XNUMX % do tempo.

A finais de 2018, Google lanzou o produto Cloud Run. A función asasina estaba executando contedores Docker tan rápido que a aplicación podía responder ás solicitudes HTTP. É dicir, o servidor podería permanecer en modo de espera e comezar só cando alguén quere acceder a el. Para aplicacións que se executan con pouca frecuencia como a miña, o custo baixou de 15 dólares ao mes a algúns céntimos ao ano.

Por razóns que xa non recordo, Cloud Run non funcionou coa miña imaxe de MediaGoblin. Pero coa chegada de Cloud Run lembreime diso Heroku ofrece un servizo similar de balde e as súas ferramentas son moito máis fáciles de usar que as de Google.

Cun servidor de aplicacións gratuíto, o único custo é o almacenamento de datos. O almacenamento rexional estándar de Google custa 2,3 céntimos/GB. O arquivo de vídeo ocupa 33 GB, polo que só pago 77 céntimos ao mes.

A miña procura de oito anos para dixitalizar 45 videocasetes. Parte 2
Esta solución custa só 0,77 dólares ao mes

Consellos para os que planean probar

Obviamente o proceso levoume moito tempo. Pero espero que este artigo che axude a aforrar un 80-90 % do esforzo de dixitalizar e publicar os teus vídeos domésticos. Nunha sección separada podes atopar guía detallada paso a paso durante todo o proceso, pero aquí tes algúns consellos xerais:

  • Durante a fase de dixitalización e edición, conserva a maior cantidade de metadatos posible.
    • A información valiosa adoita gravarse en etiquetas de videocasetes.
    • Fai un seguimento de que clip se grabou desde que cinta e en que orde.
    • Anota a data da rodaxe, que pode aparecer no vídeo.
  • Considere pagar por servizos profesionais de dixitalización.
    • Vai extremadamente é difícil e custoso igualalos en canto á calidade da dixitalización.
    • Pero mantéñase lonxe dunha empresa chamada EverPresent (envíame unha mensaxe se precisas detalles).
  • Se realizas a dixitalización ti mesmo, compra un disco duro.
    • O vídeo de definición estándar sen comprimir leva entre 100 e 200 MB por minuto.
    • Eu gardaba todo no meu Synology DS412 + (10 TB).
  • Grava metadatos nalgún formato común que non estea vinculado a unha aplicación específica.
    • Descricións de clips, códigos de tempo, datas, etc.
    • Se gardas metadatos nun formato específico da aplicación (ou peor aínda, non os gardas en absoluto), non poderás refacer o traballo se decides utilizar unha solución diferente.
    • Mentres editas, ves moitos metadatos útiles no vídeo. Perderas se non os gardas.
      • Que está a pasar no vídeo?
      • Quen está rexistrado alí?
      • Cando se gravou isto?
  • Marca os teus vídeos favoritos.
    • Para ser honesto, a maioría dos vídeos domésticos son bastante aburridos.
    • Aplico a etiqueta "o mellor de" aos meus clips favoritos e ábroos cando quero ver vídeos divertidos.
  • Organice unha solución integral o antes posible para que o proceso vaia directo de principio a fin.
    • Primeiro tentei dixitalizar todas as cintas, logo editar todas as cintas, etc.
    • Gustaríame comezar cunha cinta e facer todo o traballo con ela. Entón entendería que decisións e en que fases afectan ao resultado final.
  • Mantén a recodificación ao mínimo.
    • Cada vez que editas ou codificas de novo un clip, reduces a súa calidade.
    • Digitaliza a túa imaxe en bruto coa máxima calidade e, a continuación, transcodifica cada clip exactamente unha vez ao formato que os navegadores renderizan de forma nativa.
  • Use a solución máis sinxela posible para publicar videoclips.
    • En retrospectiva, MediaGoblin parece unha ferramenta excesivamente complexa para o escenario bastante sinxelo de xerar páxinas web cun conxunto estático de ficheiros de vídeo.
    • Se estivese comezando de novo, usaría un xerador de sitios estáticos como Hugo, Jekyll ou cuadriculado.
  • Fai a instalación.
    • A edición de vídeo é unha forma divertida de combinar os mellores momentos de varios vídeos.
    • O principal na edición é a música. Por exemplo, o tema é incrible Neve lenta de The National, este é o meu descubrimento persoal.

Fonte: www.habr.com