Ang aking walong taong pagsisikap na i-digitize ang 45 na videocassette. Bahagi 2

Inilalarawan ng unang bahagi ang mahirap na pagsisikap na i-digitize ang mga lumang video ng pamilya at hatiin ang mga ito sa magkakahiwalay na mga eksena.. Matapos iproseso ang lahat ng mga clip, gusto kong ayusin ang kanilang panonood online na kasing maginhawa ng sa YouTube. Dahil ito ay mga personal na alaala ng pamilya, hindi ito maaaring i-post sa YouTube mismo. Kailangan namin ng mas pribadong pagho-host na parehong maginhawa at secure.

Hakbang 3: Pag-publish

ClipBucket, isang open source na clone ng YouTube na maaaring i-install sa iyong sariling server

Unang bagay na sinubukan ko ClipBucket, na tinatawag ang sarili nito na isang open-source na clone ng YouTube na maaari mong i-install sa iyong server.

Ang aking walong taong pagsisikap na i-digitize ang 45 na videocassette. Bahagi 2

Nakakagulat, ang ClipBucket ay walang anumang mga tagubilin sa pag-install. Salamat kay sa pamamahala sa labas я awtomatiko ang proseso ng pag-install sa tulong Ansible, isang tool sa pamamahala ng configuration ng server.

Bahagi ng kahirapan ay ang mga script ng pag-install ng ClipBucket ay ganap na nasira. Sa oras na iyon ako nagtrabaho sa Google at ayon sa mga tuntunin ng kontrata wala akong karapatang mag-ambag sa open source na clone ng YouTube, ngunit ako nag-post ng ulat ng bug, kung saan ang mga kinakailangang pagwawasto ay madaling magawa. Lumipas ang mga buwan, at hindi pa rin nila naiintindihan kung ano ang problema. Sa halip, idinagdag nila ang lahat higit sa mga bug sa bawat paglabas.

Nagpatakbo ang ClipBucket sa isang modelo ng pagkonsultaβ€”inilabas nila ang kanilang code nang libre at sinisingil para sa tulong sa pag-deploy. Unti-unting napagtanto ko na ang isang kumpanyang kumikita mula sa bayad na suporta ay malamang na hindi masyadong interesado sa pagkakaroon ng mga customer na sila mismo ang mag-install ng produkto.

MediaGoblin, isang mas modernong alternatibo

Pagkatapos ng mga buwan ng pagkadismaya sa ClipBucket, tiningnan ko ang mga opsyon na magagamit at nakita ko MediaGoblin.

Ang aking walong taong pagsisikap na i-digitize ang 45 na videocassette. Bahagi 2
MediaGoblin ay isang offline na platform sa pagbabahagi ng media

Maraming goodies ang MediaGoblin. Hindi tulad ng ClipBucket sa hindi magandang tingnan na PHP, ang MediaGoblin ay nakasulat sa Python, isang wikang marami akong karanasan sa coding. Kumain interface ng command line, na nagbibigay-daan sa iyong madaling i-automate ang pag-download ng video. Pinakamahalaga, kasama ang MediaGoblin Larawan ng docker, na nag-aalis ng anumang mga problema sa pag-install.

Manggagawa sa pantalan ay isang teknolohiya na lumilikha ng isang autonomous na kapaligiran para sa isang application na tumakbo kahit saan. Gumagamit ako ng Docker in marami sa kanyang mga proyekto.

Ang nakakagulat na kahirapan ng muling pag-docker sa MediaGoblin

Ipinapalagay ko na ang pag-deploy ng imahe ng MediaGoblin docker ay isang maliit na gawain. Well, hindi iyon nagtagumpay sa ganoong paraan.

Ang natapos na imahe ay hindi naglalaman ng dalawang kinakailangang function:

  • Pagpapatunay
    • Gumagawa ang MediaGoblin ng pampublikong portal ng media bilang default, at kailangan ko ng paraan upang paghigpitan ang pag-access sa mga tagalabas.
  • Transcoding
    • Sa tuwing magda-download ka ng video, sinusubukan ng MediaGoblin na i-transcode ito para sa pinakamainam na streaming. Kung ang video sa simula ay handa na para sa streaming, ang transcoding ay nagpapababa sa kalidad.
    • Nagbibigay ang MediaGoblin hindi pagpapagana ng transcoding sa pamamagitan ng mga opsyon sa pagsasaayos, ngunit hindi ito magagawa sa isang umiiral na larawan ng Docker.

Well, walang problema. Kasama ang imahe ng Docker open source, kaya posible muling itayo ito sa iyong sarili.

Sa kasamaang palad, ang imahe ng Docker ay hindi na binuo mula sa kasalukuyang isa. imbakan ng MediaGoblin. Sinubukan kong i-sync ito sa bersyon mula sa huling matagumpay na build, ngunit nabigo din iyon. Kahit na ginamit ko ang eksaktong parehong code, nagbago ang mga panlabas na dependency ng MediaGoblin, na sinira ang build. Pagkatapos ng dose-dosenang oras, paulit-ulit kong tinakbo ang 10-15 minutong proseso ng pagbuo ng MediaGoblin hanggang sa tuluyan itong gumana.

Makalipas ang ilang buwan ay ganoon din ang nangyari. Sa kabuuan, ilang beses na sinira ng MediaGoblin dependency chain ang aking build sa nakalipas na ilang taon, at ang huling pagkakataong nangyari ito ay habang sinusulat ko ang artikulong ito. Na-publish ko na rin sa wakas sariling tinidor ng MediaGoblin c hard-coded dependencies at tahasang tinukoy na mga bersyon ng mga aklatan. Sa madaling salita, sa halip na ang kahina-hinalang pag-aangkin na gumagana ang MediaGoblin sa anumang bersyon kintsay >= 3.0, nag-install ako ng partikular na dependency sa bersyon kintsay 4.2.1dahil sinubukan ko ang MediaGoblin sa bersyong ito. Mukhang kailangan ng produkto reproducible build mechanism, pero hindi ko pa nagagawa.

Gayon pa man, pagkatapos ng maraming oras ng pakikibaka, sa wakas ay nagawa at na-configure ko ang MediaGoblin sa isang imahe ng Docker. Naging madali na doon laktawan ang hindi kinakailangang transcoding ΠΈ i-install ang Nginx para sa pagpapatunay.

Hakbang 4. Pagho-host

Dahil ang MediaGoblin ay nagpapatakbo ng Docker sa aking lokal na computer, ang susunod na hakbang ay i-deploy ito sa isang cloud server para mapanood ng pamilya ang video.

MediaGoblin at ang problema sa storage ng video

Maraming mga platform na kumukuha ng larawan ng Docker at i-host ito sa isang pampublikong URL. Ang catch ay na bilang karagdagan sa app mismo, 33 GB ng mga video file ay kailangang i-publish. Posibleng i-hard-code ang mga ito sa isang imahe ng Docker, ngunit iyon ay magiging mahirap at pangit. Ang pagbabago ng isang linya ng configuration ay mangangailangan ng muling pag-deploy ng 33 GB ng data.

Noong ginamit ko ang ClipBucket nalutas ko ang problema sa gcsfuse - isang utility na nagpapahintulot sa operating system na mag-upload ng mga direktoryo sa Google Cloud cloud storage bilang mga regular na landas patungo sa file system. Nag-host ako ng mga video file sa Google Cloud at gumamit ng gcsfuse para ipakita ang mga ito sa ClipBucket bilang mga lokal na file.

Ang pagkakaiba ay ang ClipBucket ay tumakbo sa isang tunay na virtual machine, habang ang MediaGoblin ay tumakbo sa isang Docker container. Dito, naging mas mahirap ang pag-mount ng mga file mula sa cloud storage. Gumastos ako ng dose-dosenang oras sa paglutas ng lahat ng mga problema at nagsulat tungkol dito buong blog post.

Ang aking walong taong pagsisikap na i-digitize ang 45 na videocassette. Bahagi 2
Ang paunang pagsasama ng MediaGoblin sa imbakan ng Google Cloud, na pinag-uusapan ko sinabi noong 2018

Pagkatapos ng ilang linggo ng pagsasaayos ng lahat ng mga sangkap, gumana ang lahat. Nang walang anumang pagbabago sa code ng MediaGoblin, dinaya ko ito sa pagbabasa at pagsulat ng mga media file sa Google cloud storage.

Ang tanging problema ay ang MediaGoblin ay naging malaswang mabagal. Tumagal ng buong 20 segundo para ma-load ang mga thumbnail ng video sa home page. Kung sumulong ka habang nanonood ng video, ipo-pause ng MediaGoblin ang walang katapusang 10 segundo bago ipagpatuloy ang pag-playback.

Ang pangunahing problema ay ang mga video at larawan ay tumagal ng mahaba, paikot-ikot na ruta patungo sa user. Kinailangan nilang pumunta mula sa Google cloud storage sa pamamagitan ng gcsfuse patungo sa MediaGoblin, Nginx - at saka lang sila nakarating sa browser ng user. Ang pangunahing bottleneck ay gcsfuse, na hindi na-optimize para sa bilis. Nagbabala ang mga developer tungkol sa malalaking pagkaantala sa pagpapatakbo ng utility sa pangunahing pahina ng proyekto:

Ang aking walong taong pagsisikap na i-digitize ang 45 na videocassette. Bahagi 2
babala tungkol sa mababang pagganap sa dokumentasyon ng gcsfuse

Sa isip, ang browser ay dapat na direktang kumuha ng mga file mula sa Google Cloud, na lampasan ang anumang mga intermediate na layer. Paano mo ito magagawa nang hindi sumisid sa MediaGoblin codebase o nagdaragdag ng kumplikadong lohika ng pagsasama ng Google Cloud?

Sub_filter trick sa nginx

Sa kabutihang palad nakakita ako ng isang simpleng solusyon, bagaman medyo pangit. Nagdagdag ako sa default.conf configuration sa Nginx tulad ng isang filter:

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

Sa aking pag-setup, kumilos si Nginx bilang isang proxy sa pagitan ng MediaGoblin at ng end user. Ang direktiba sa itaas ay nagtuturo sa Nginx na hanapin at palitan ang lahat ng MediaGoblin HTML na tugon bago ihatid ang mga ito sa end user. Pinapalitan ng Nginx ang lahat ng mga kaugnay na landas sa MediaGoblin media file ng mga URL mula sa Google cloud storage.

Halimbawa, ang MediaGoblin ay bumubuo ng HTML tulad nito:

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

Binago ng Nginx ang sagot:

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

Ngayon ang lahat ay gumagana tulad ng inaasahan:

Ang aking walong taong pagsisikap na i-digitize ang 45 na videocassette. Bahagi 2
Sinusulat muli ng Nginx ang mga tugon mula sa MediaGoblin upang ang mga kliyente ay maaaring humiling ng mga media file nang direkta mula sa Google cloud storage

Ang pinakamagandang bahagi tungkol sa aking solusyon ay hindi ito nangangailangan ng anumang mga pagbabago sa MediaGoblin code. Ang dalawang-linya na direktiba ng Nginx ay walang putol na isinasama ang MediaGoblin at Google Cloud, kahit na ang mga serbisyo ay walang alam tungkol sa isa't isa.

Nota: Ang solusyong ito ay nangangailangan na ang mga file sa Google cloud storage ay mababasa ng lahat. Upang mabawasan ang panganib ng hindi awtorisadong pag-access, gumagamit ako ng mahaba, random na pangalan ng bucket (hal. mediagoblin-39dpduhfz1wstbprmyk5ak29) at i-verify na hindi pinapayagan ng patakaran sa access control ng bucket ang mga hindi awtorisadong user na ipakita ang mga nilalaman ng direktoryo.

Panghuling produkto

Sa puntong ito mayroon akong isang kumpletong, gumaganang solusyon. Masayang tumakbo ang MediaGoblin sa sarili nitong lalagyan sa cloud platform ng Google, kaya hindi na ito kailangang i-patch o i-update nang madalas. Lahat ng nasa proseso ko ay awtomatiko at nagagawa, na nagbibigay-daan para sa mga simpleng pag-edit o pag-rollback sa mga nakaraang bersyon.

Talagang nagustuhan ng aking pamilya kung gaano kadaling panoorin ang mga video. Sa tulong ng Nginx hack na inilarawan sa itaas, ang pagtatrabaho sa mga video ay naging kasing bilis ng sa YouTube.

Ang screen ng pagtingin ay ganito:

Ang aking walong taong pagsisikap na i-digitize ang 45 na videocassette. Bahagi 2
Mga nilalaman ng catalog ng video ng pamilya ayon sa tag na "Pinakamahusay"

Ang pag-click sa thumbnail ay maglalabas ng screen na tulad nito:

Ang aking walong taong pagsisikap na i-digitize ang 45 na videocassette. Bahagi 2
Pagtingin ng isang clip sa isang media server

Pagkatapos ng mga taon ng trabaho, napakalaking kasiyahan na bigyan ang mga miyembro ng pamilya ng pagkakataong panoorin ang aming mga video sa parehong user-friendly na interface na tulad ng YouTube na orihinal na gusto ko.

Bonus: Bawasan ang mga gastos sa mas mababa sa $1 bawat buwan

Hindi ka madalas nanonood ng mga home video, kada ilang buwan lang. Ang aking pamilya ay sama-samang nakabuo ng humigit-kumulang 20 oras ng trapiko sa isang taon, ngunit ang server ay tumatakbo 15/99,7. Nagbayad ako ng $XNUMX buwan-buwan para sa isang server na bumaba nang XNUMX% ng oras.

Sa pagtatapos ng 2018, inilabas ng Google ang produkto Cloud Run. Ang tampok na pamatay ay nagpapatakbo ng mga lalagyan ng Docker nang napakabilis na ang application ay maaaring tumugon sa mga kahilingan sa HTTP. Ibig sabihin, maaaring manatili ang server sa standby mode at magsimula lamang kapag may gustong i-access ito. Para sa madalang na pagpapatakbo ng mga application tulad ng sa akin, ang gastos ay bumaba mula $15 bawat buwan hanggang sa ilang sentimo bawat taon.

Para sa mga kadahilanang hindi ko na matandaan, hindi gumana ang Cloud Run sa aking MediaGoblin image. Ngunit sa pagdating ng Cloud Run naalala ko iyon Heroku nag-aalok ng katulad na serbisyo nang libre, at ang kanilang mga tool ay mas madaling gamitin kaysa sa Google.

Sa isang libreng server ng application, ang tanging gastos ay ang pag-iimbak ng data. Ang karaniwang panrehiyong storage ng Google ay nagkakahalaga ng 2,3 cents/GB. Ang archive ng video ay tumatagal ng 33 GB, kaya nagbabayad lang ako ng 77 cents sa isang buwan.

Ang aking walong taong pagsisikap na i-digitize ang 45 na videocassette. Bahagi 2
Ang solusyon na ito ay nagkakahalaga lamang ng $0,77 bawat buwan

Tips para sa mga nagbabalak sumubok

Halatang matagal ang proseso. Ngunit umaasa ako na ang artikulong ito ay makakatulong sa iyo na makatipid ng 80-90% ng pagsisikap ng pag-digitize at pag-publish ng iyong mga home video. Sa isang hiwalay na seksyon na mahahanap mo detalyadong hakbang-hakbang na gabay sa buong proseso, ngunit narito ang ilang pangkalahatang tip:

  • Sa yugto ng digitization at pag-edit, panatilihin ang pinakamaraming metadata hangga't maaari.
    • Ang mahalagang impormasyon ay madalas na naitala sa mga label ng video cassette.
    • Subaybayan kung aling clip ang kinunan mula sa aling tape at sa anong pagkakasunud-sunod.
    • Isulat ang petsa ng pagbaril, na maaaring lumabas sa video.
  • Isaalang-alang ang pagbabayad para sa mga propesyonal na serbisyo sa pag-digitize.
    • gagawin mo labis mahirap at mahal na itugma ang mga ito sa mga tuntunin ng kalidad ng digitization.
    • Ngunit lumayo sa isang kumpanya na tinatawag na EverPresent (mensahe ako kung kailangan mo ng mga detalye).
  • Kung ikaw mismo ang mag-digitize, bumili ng HDD.
    • Ang hindi naka-compress na standard definition na video ay tumatagal ng 100-200 MB bawat minuto.
    • Itinago ko ang lahat sa akin Synology DS412 + (10 TB).
  • Mag-record ng metadata sa ilang karaniwang format na hindi nakatali sa isang partikular na application.
    • Mga paglalarawan ng clip, time code, petsa, atbp.
    • Kung magse-save ka ng metadata sa isang format na tukoy sa application (o mas masahol pa, huwag mo itong i-save), hindi mo magagawang muli ang trabaho kung magpasya kang gumamit ng ibang solusyon.
    • Habang nag-e-edit ka, makakakita ka ng maraming kapaki-pakinabang na metadata sa video. Mawawala sila kapag hindi mo sila nailigtas.
      • Ano ang nangyayari sa video?
      • Sino ang nakarehistro doon?
      • Kailan ito naitala?
  • Markahan ang iyong mga paboritong video.
    • Sa totoo lang, ang karamihan sa mga home video ay medyo boring.
    • Inilapat ko ang "pinakamahusay" na tag sa aking mga paboritong clip at binubuksan ang mga ito kapag gusto kong manood ng mga nakakatawang video.
  • Ayusin ang isang komprehensibong solusyon nang maaga hangga't maaari upang ang proseso ay dumiretso mula simula hanggang matapos.
    • Sinubukan kong i-digitize muna ang lahat ng mga tape, pagkatapos ay i-edit ang lahat ng mga tape, atbp.
    • Nais kong nagsimula ako sa isang tape at ginawa ang lahat ng gawain dito. Pagkatapos ay mauunawaan ko kung aling mga desisyon at sa anong mga yugto ang makakaapekto sa huling resulta.
  • Panatilihin ang recoding sa pinakamababa.
    • Sa tuwing mag-e-edit o mag-re-encode ka ng clip, binabawasan mo ang kalidad nito.
    • I-digitize ang iyong raw footage sa pinakamataas na kalidad, pagkatapos ay i-transcode ang bawat clip nang eksaktong isang beses sa format na native na na-render ng mga browser.
  • Gamitin ang pinakasimpleng solusyon na posible upang mag-publish ng mga video clip.
    • Sa pagbabalik-tanaw, ang MediaGoblin ay tila isang sobrang kumplikadong tool para sa medyo simpleng senaryo ng pagbuo ng mga web page na may static na hanay ng mga video file.
    • Kung ako ay magsisimulang muli, gagamit ako ng isang static na site generator tulad ng Hugo, Jekyll o nakakadiri.
  • Gawin ang pag-install.
    • Ang pag-edit ng video ay isang masayang paraan upang pagsamahin ang pinakamagagandang sandali mula sa maraming video.
    • Ang pangunahing bagay sa pag-edit ay musika. Halimbawa, kamangha-mangha ang tema Mabagal na Niyebe mula sa The National, ito ang aking personal na natuklasan.

Pinagmulan: www.habr.com