Pencarian saya selama delapan tahun untuk mendigitalkan 45 kaset video. Bagian 2

Bagian pertama menjelaskan upaya yang sulit untuk mendigitalkan video keluarga lama dan memecahnya menjadi beberapa adegan . Setelah memproses semua klip, saya ingin menontonnya secara online senyaman di YouTube. Karena ini adalah kenangan pribadi keluarga, maka tidak dapat diposting di YouTube sendiri. Kami membutuhkan hosting yang lebih pribadi yang nyaman dan aman.



Langkah 3. Penerbitan



ClipBucket, klon YouTube sumber terbuka yang dapat dipasang di server Anda sendiri



Percobaan pertama saya adalah ClipBucket , yang menyebut dirinya klon YouTube open source yang dapat Anda instal di server Anda.







Anehnya, ClipBucket tidak memiliki petunjuk pemasangan apa pun. Berkat tutorial pihak ketiga, saya mengotomatiskan proses instalasi menggunakan Ansible , alat manajemen konfigurasi server.



Bagian dari kesulitannya adalah skrip instalasi ClipBucket benar-benar rusak. Saat itu, saya bekerja di Google dan berdasarkan persyaratan kontrak, saya tidak memiliki hak untuk berkontribusi pada klon YouTube sumber terbuka, tetapi saya memposting laporan bug yang memudahkan untuk melakukan koreksi yang diperlukan. Berbulan-bulan berlalu, dan mereka masih tidak mengerti apa masalahnya. Sebaliknya, mereka menambahkan lebih banyak bug dengan setiap rilis.



ClipBucket mengerjakan model konsultasi - mereka merilis kode mereka secara gratis dan mengenakan biaya untuk membantu penerapan. Perlahan-lahan saya sadar bahwa perusahaan yang menghasilkan uang dari dukungan berbayar mungkin tidak terlalu tertarik untuk meminta pelanggan memasang produk sendiri.



MediaGoblin, alternatif yang lebih modern



Setelah berbulan-bulan frustrasi dengan ClipBucket, saya meninjau opsi yang tersedia dan menemukan MediaGoblin .





MediaGoblin  adalah platform berbagi media mandiri



. MediaGoblin memiliki banyak hal. Tidak seperti ClipBucket dalam PHP yang tidak sedap dipandang, MediaGoblin ditulis dengan Python, bahasa yang saya kuasai dengan banyak pengalaman. Ada antarmuka baris perintah yang memudahkan pengunduhan video otomatis. Yang terpenting, MediaGoblin hadir dalam image Docker yang menghilangkan masalah instalasi apa pun.



Docker adalah teknologi yang menciptakan lingkungan mandiri untuk aplikasi yang berjalan di mana saja. Saya menggunakan Docker di banyak proyek saya .


Kesulitan Luar Biasa dalam Memasang Kembali MediaGoblin



Saya berasumsi bahwa menerapkan gambar buruh pelabuhan MediaGoblin akan sepele. Yah, itu tidak berhasil seperti itu.



Gambar yang sudah selesai kehilangan dua fungsi yang diperlukan:



  • Autentikasi
    • MediaGoblin membuat portal media publik secara default, dan saya membutuhkan cara untuk membatasi akses yang tidak sah.
  • Transcoding
    • Setiap kali Anda mengupload video, MediaGoblin mencoba mengodekan ulang untuk streaming yang optimal. Jika video awalnya siap untuk streaming, transcoding menurunkan kualitasnya.
    • MediaGoblin menyediakan untuk menonaktifkan transcoding melalui opsi konfigurasi , tetapi ini tidak dapat dilakukan pada image Docker yang sudah ada.


Tidak masalah. Image Docker adalah open source , jadi Anda dapat membuatnya sendiri .



Sayangnya, image Docker tidak lagi dibuat dari repositori MediaGoblin saat ini . Saya mencoba menyinkronkannya dengan versi dari build terakhir yang berhasil, tetapi tidak berhasil juga. Meskipun saya menggunakan kode yang persis sama, dependensi eksternal MediaGoblin berubah, merusak build. Setelah puluhan jam, saya menjalankan proses pembuatan MediaGoblin selama 10-15 menit berulang kali hingga akhirnya berhasil.



Beberapa bulan kemudian, hal yang sama terjadi. Secara total selama beberapa tahun terakhir, rantai ketergantungan MediaGoblin telah merusak bangunan saya beberapa kali, dan terakhir kali hal itu terjadi tepat ketika saya menulis artikel ini. Saya akhirnya menerbitkan fork saya sendiri dari MediaGoblin, dengan dependensi hardcode dan versi pustaka eksplisit. Dengan kata lain, alih-alih secara ragu mengklaim bahwa MediaGoblin bekerja dengan versi apa pun dari seledri > = 3.0, saya memasang ketergantungan khusus pada seledri 4.2.1 karena saya menguji MediaGoblin dengan versi tersebut. Sepertinya produk tersebut memerlukan mekanisme build yang dapat direproduksi , tetapi saya belum melakukannya.



Bagaimanapun, setelah berjam-jam berjuang, saya akhirnya bisa membangun dan mengkonfigurasi MediaGoblin dalam image Docker. Di sana sudah mudah untuk melewati transcoding yang tidak perlu dan mengatur Nginx untuk otentikasi .



Langkah 4. Hosting



Karena MediaGoblin menjalankan Docker di komputer lokal saya, langkah selanjutnya adalah menerapkan ke server cloud sehingga keluarga dapat menonton video tersebut.



MediaGoblin dan masalah penyimpanan video



Ada banyak platform yang mengambil gambar Docker dan menyimpannya di URL publik. Hasil tangkapannya adalah bahwa selain aplikasi itu sendiri, 33GB file video harus dipublikasikan. Dimungkinkan untuk meng-hard-code mereka menjadi gambar buruh pelabuhan, tetapi ternyata itu rumit dan jelek. Mengubah satu baris konfigurasi akan memerlukan penerapan ulang 33 GB data.



Saat saya menggunakan ClipBucket, saya menyelesaikan masalah dengan gcsfuse  , sebuah utilitas yang memungkinkan sistem operasi mengunggah direktori ke Google Cloud sebagai jalur sistem file normal. Saya memposting file video ke Google Cloud dan menggunakan gcsfuse untuk menampilkannya sebagai file lokal di ClipBucket.



Perbedaannya adalah ClipBucket berjalan di mesin virtual nyata, sementara MediaGoblin berjalan di container Docker. Di sini, memasang file dari penyimpanan cloud ternyata jauh lebih sulit. Saya menghabiskan puluhan jam untuk memecahkan semua masalah dan menulis seluruh posting blog tentang itu .





Integrasi awal MediaGoblin dengan penyimpanan Google Cloud, yang saya bicarakan pada tahun 2018. Setelah



beberapa minggu menyesuaikan semua komponen, semuanya berfungsi. Tanpa membuat perubahan apa pun pada kode MediaGoblin, saya dengan curang memaksanya untuk membaca dan menulis file media ke penyimpanan cloud google.



Satu-satunya masalah adalah MediaGoblin menjadi sangat lambat. Butuh waktu 20 detik untuk memuat thumbnail video di beranda. Jika Anda melompat ke depan saat menonton video, MediaGoblin akan berhenti sebentar selama 10 detik sebelum melanjutkan pemutaran.



Masalah utamanya adalah bahwa video dan gambar masuk ke pengguna secara tidak langsung. Mereka harus beralih dari penyimpanan cloud Google melalui gcsfuse ke MediaGoblin, Nginx - dan baru kemudian mereka masuk ke browser pengguna. Hambatan utama adalah gcsfuse, yang tidak dioptimalkan untuk kinerja cepat. Pengembang memperingatkan tentang penundaan besar dalam pekerjaan utilitas langsung di beranda proyek:





Peringatan kinerja di dokumentasi gcsfuse



Idealnya, browser harus mengambil file langsung dari Google Cloud, melewati semua lapisan perantara. Bagaimana saya dapat melakukan ini tanpa mempelajari basis kode MediaGoblin dan menambahkan logika integrasi Google Cloud yang kompleks?



Trik sub_filter nginx



Untungnya, saya menemukan solusi sederhana, meskipun sedikit jelek. Saya menambahkan filter berikut ke konfigurasi default.conf di Nginx :



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


Dalam instalasi saya, Nginx bekerja sebagai proxy antara MediaGoblin dan pengguna akhir. Direktif di atas memberitahu Nginx untuk mencari dan mengganti semua tanggapan HTML MediaGoblin sebelum meneruskannya ke pengguna akhir. Nginx mengganti semua jalur relatif ke file media MediaGoblin dengan URL dari Google Cloud Storage.



Misalnya, MediaGoblin menghasilkan HTML seperti ini:



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


Nginx mengubah respons:



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


Sekarang semuanya berjalan sebagaimana mestinya:





Nginx menulis ulang tanggapan dari MediaGoblin sehingga klien dapat meminta file media langsung dari penyimpanan awan Google



Bagian terbaik tentang solusi saya adalah tidak memerlukan perubahan apa pun dalam kode MediaGoblin. Arahan dua baris Nginx dengan mulus mengintegrasikan MediaGoblin dan Google Cloud, meskipun layanan ini sama sekali tidak tahu apa-apa tentang satu sama lain.



Catatan : Solusi ini mengharuskan file di Google Cloud Storage dapat dibaca oleh semua orang. Untuk mengurangi risiko akses yang tidak sah, saya menggunakan nama keranjang acak yang panjang (misalnya mediagoblin-39dpduhfz1wstbprmyk5ak29) dan memverifikasi bahwa kebijakan kontrol akses keranjang tidak mengizinkan pengguna yang tidak sah untuk menampilkan konten direktori.


Produk akhir



Pada titik ini, saya memiliki solusi yang lengkap dan berfungsi. MediaGoblin dengan senang hati menjalankan wadahnya sendiri di platform cloud Google, sehingga tidak perlu sering ditambal atau diperbarui. Segala sesuatu dalam proses saya otomatis dan dapat direproduksi, memungkinkan untuk pengeditan sederhana atau rollback ke versi sebelumnya.



Keluarga saya menyukai betapa mudahnya menonton video itu. Dengan peretasan Nginx di atas, pemrosesan video sekarang secepat YouTube.



Layar pratinjau terlihat seperti ini:





Konten Direktori Video Keluarga dengan



Tag Unggulan Mengklik thumbnail akan menampilkan layar berikut:





Melihat satu klip di server media



Setelah bertahun-tahun bekerja, saya sangat senang memberi kesempatan kepada kerabat saya untuk menonton video kami dalam antarmuka yang ramah pengguna seperti di YouTube, seperti yang saya inginkan.



Bonus: pengurangan biaya menjadi kurang dari $ 1 per bulan



Anda tidak sering menonton video rumahan, hanya setiap beberapa bulan. Keluarga saya secara kolektif menghasilkan sekitar 20 jam lalu lintas dalam setahun, tetapi server berjalan sepanjang waktu. Saya membayar $ 15 setiap bulan untuk server yang turun 99,7% dari waktu.



Di penghujung tahun 2018, Google merilis produk Cloud Run . Fitur pembunuhnya adalah peluncuran kontainer Docker dengan sangat cepat sehingga aplikasi dapat merespons permintaan HTTP. Artinya, server dapat tetap dalam mode siaga - dan memulai hanya ketika seseorang ingin mengaksesnya. Untuk aplikasi yang jarang diluncurkan seperti milik saya, biaya turun dari $ 15 sebulan menjadi beberapa sen setahun.



Untuk alasan yang tidak dapat saya ingat lagi, Cloud Run tidak berfungsi dengan gambar MediaGoblin saya. Tetapi dengan munculnya Cloud Run, saya ingat Heroku itumenawarkan layanan serupa secara gratis, dan alat mereka jauh lebih nyaman daripada Google.



Dengan server aplikasi gratis, satu-satunya pengeluaran Anda adalah penyimpanan data. Biaya penyimpanan regional standar Google 2,3 sen / GB. Arsip video berukuran 33 GB, jadi saya hanya membayar 77 sen sebulan.





Biaya solusi ini hanya $ 0,77 per bulan



Kiat bagi mereka yang ingin mencoba



Jelas, prosesnya memakan waktu lama bagi saya. Tapi saya harap artikel ini membantu Anda menghemat 80-90% upaya Anda untuk mendigitalkan dan menerbitkan video rumahan. Di bagian terpisah, Anda dapat menemukan panduan langkah demi langkah yang mendetail untuk keseluruhan proses, tetapi berikut adalah beberapa tip umum:



  • Selama fase digitalisasi dan pengeditan, pertahankan metadata sebanyak mungkin.
    • .
    • , .
    • , .
  • .
    • .
    • EverPresent ( , ).
  • , HDD.
  • - , .
    • , , . .
    • (, , ), , .
    • . , .
      • ?
      • ?
      • ?
  • .
    • , .
    • β€œbest of” , .
  • , .
    • , . .
    • , . , .
  • .
    • , , .
    • , , .
  • .
  • .
    •  β€” .
    •  β€” . , Slow Snow The National, .



All Articles