Siarkan video anda di YouTube XNUMX/XNUMX

Sejak kebelakangan ini, sebagai hobi, saya telah menjalani penggambaran kuliah ahli psikologi yang saya kenali. Saya mengedit rakaman dan menerbitkannya di tapak web saya. Sebulan yang lalu, saya mendapat idea untuk menganjurkan siaran kuliah ini 24/7 di YouTube. Sejenis "saluran TV" bertema khusus untuk pertumbuhan peribadi.

Saya tahu cara membuat siaran biasa. Tetapi bagaimana untuk membuatnya supaya ia adalah penyiaran fail video? Supaya ia berjalan 24/7, adalah fleksibel, autonomi yang mungkin, dan pada masa yang sama tidak bergantung dalam apa-apa cara pada komputer rumah saya. Inilah yang saya perlu ketahui.

Siarkan video anda di YouTube XNUMX/XNUMX

Ia mengambil masa beberapa hari untuk mencari penyelesaian. Saya mempelajari banyak forum dan pelbagai manual yang tanpanya siaran saya tidak akan berkesan. Dan sekarang gurauan itu berjaya, saya rasa perlu untuk berkongsi penyelesaian saya. Ini adalah bagaimana artikel ini muncul.

Ringkasnya, penyelesaian akhir adalah seperti berikut: VPS + ffmeg + skrip bash. Di bawah potongan, saya menerangkan langkah-langkah yang diambil dan bercakap tentang perangkap yang ditemui semasa menganjurkan siaran.

Langkah 1 – dari manakah siaran itu akan datang?

Pada awalnya, adalah perlu untuk memutuskan dari mana siaran itu akan datang dan dari mana sumbernya. Perkara pertama yang terlintas di fikiran ialah daripada komputer rumah anda. Kumpul video ke dalam senarai main dan mula memainkannya dalam mana-mana pemain video. Kemudian tangkap imej skrin dan siarkan ke YouTube. Tetapi saya hampir serta-merta menolak pilihan ini kerana... Untuk melaksanakannya, anda perlu memastikan komputer rumah anda sentiasa dihidupkan, yang bermaksud bunyi dari penyejuk walaupun pada waktu malam dan peningkatan penggunaan elektrik (+100-150 kWj setiap bulan). Dan ternyata anda tidak akan dapat menggunakan komputer rumah anda semasa siaran. sebarang pergerakan tetikus akan kelihatan dalam siaran.

Kemudian saya mula melihat ke tepi perkhidmatan awan. Saya sedang mencari perkhidmatan sedia untuk memuat naik video saya atau, sebagai contoh, memasukkan pautan ke video daripada YouTube dan semuanya akan dibungkus ke dalam satu siaran tanpa henti. Tetapi saya tidak menemui apa-apa yang sesuai. Mungkin saya tidak mencari dengan baik. Satu-satunya perkara yang sesuai dengan fungsi tersebut ialah restream.io, perkhidmatan yang membantu menyiarkan serentak ke beberapa platform. Mereka nampaknya membenarkan anda memuat naik video anda sendiri. Tetapi perkhidmatan ini dicipta untuk tujuan yang sama sekali berbeza dan mereka menjangkakan bahawa siaran itu akan berlangsung hanya beberapa jam. Saya fikir bahawa jika melalui perkhidmatan ini adalah mungkin untuk menganjurkan siaran sepanjang masa, maka ia akan mencapai puluhan, atau bahkan ratusan dolar sebulan. Tetapi saya masih mahu menganjurkan siaran sama ada secara percuma atau dengan pelaburan kewangan yang minimum.

Ia menjadi jelas bahawa untuk siaran itu perlu atau peranti berasingan atau komputer yang berasingan. Saya sedang memikirkan sesuatu seperti Raspberri Pi. Dan apa? Dia tidak mempunyai penyejuk. Saya merakam video pada pemacu denyar, memasangkan kabel Ethernet dan biarkan ia terletak di suatu tempat di tempat terpencil dan menyiarkannya. Pilihan. Tetapi saya tidak mempunyai lembaga itu sendiri mahupun pengalaman bekerja dengannya, jadi saya juga menolak pilihan ini.

Akibatnya, saya menemui perbincangan tertentu di mana mereka membincangkan penciptaan pelayan sendiri siaran. Ia bukan apa yang saya cari, tetapi saya mendapat idea utama - anda boleh menggunakan pelayan! Dalam perbincangan itu, dicadangkan untuk menggunakan gabungan VPS + nginx + OBS. Ia menjadi jelas bahawa gabungan ini juga sesuai dengan saya. Satu-satunya perkara yang mengelirukan saya ialah saya tidak pernah mentadbir pelayan dan nampaknya saya mempunyai pelayan khusus saya sendiri adalah mengelirukan dan mahal. Saya memutuskan untuk mengetahui berapa banyak kos untuk menyewa pelayan dengan konfigurasi minimum dan terkejut.

Siarkan video anda di YouTube XNUMX/XNUMX

Harga ditunjukkan dalam rubel Belarusia dan ini hanyalah serbuk. Untuk memahami, 8 rubel Belarusia adalah kira-kira 3.5 dolar atau 240 rubel Rusia. Selama sebulan menggunakan komputer penuh yang dihidupkan 24/7 dan mempunyai akses Internet yang pantas. Atas sebab tertentu, penemuan ini menjadi sangat menggembirakan saya dan selama beberapa hari saya berjalan-jalan dengan sangat gembira, seperti kanak-kanak yang menemui roket angkasa :)

Ngomong-ngomong, saya mengambil kesempatan daripada tawaran tapak pertama yang Google berikan kepada saya untuk pertanyaan "sewaan VPS". Mungkin terdapat lebih banyak penyelesaian bajet, tetapi harga ini sesuai dengan saya dan saya tidak melihat lebih jauh.

Apabila membuat pelayan, anda boleh memilih sistem pengendalian di mana ia akan dijalankan. Anda boleh mengatur siaran pada mana-mana sistem yang disenaraikan dan membuat pilihan berdasarkan keutamaan dan keupayaan kewangan anda (untuk pelayan dengan Windows mereka meminta bayaran tambahan). Saya memilih CentOS. Semata-mata kerana saya mempunyai sedikit pengalaman dengannya sebelum ini.

Siarkan video anda di YouTube XNUMX/XNUMX

Langkah 2 - persediaan pelayan

Perkara pertama yang anda perlukan selepas mencipta pelayan ialah menyambungkannya melalui SSH. Pada mulanya saya menggunakan PuTTy, tetapi kemudian saya mula menggunakan Apl Secure Shell, yang dijalankan dalam Google Chrome. Ia ternyata lebih memudahkan saya.

Kemudian saya menukar nama hos, menyediakan penyegerakan masa pada pelayan, mengemas kini sistem, bermain-main dengan iptables... dan melakukan banyak perkara lain, tetapi bukan kerana ia perlu. Saya hanya berminat untuk menyediakan pelayan dan ia berfungsi untuk saya. Saya suka apabila ia berjaya :)

Berikut adalah langkah-langkah yang perlu anda lakukan:

  1. Sambungkan repositori EPEL.
  2. Sediakan pelayan FTP (saya memilih vsftp).
  3. Pasang ffmpeg.

Saya tidak akan memberikan arahan secara terperinci; arahan ini agak konseptual untuk menyampaikan pelan tindakan umum. Jika anda menghadapi sebarang masalah dengan mana-mana langkah, ia boleh diselesaikan dengan cepat dengan menggunakan pertanyaan enjin carian seperti "CentOS connect EPEL" atau "CentOS install FTP server". Dan pada pautan pertama anda boleh menemui arahan langkah demi langkah yang terperinci.

Jadi, seperti yang saya tulis sebelum ini, saya memerlukan gabungan VPS + nginx + OBS. VPS - sedia. Tetapi persoalan mula timbul mengenai perkara lain. OBS ialah program penyiaran, Open Broadcaster Software. Dan ia hanya berfungsi dengan aliran i.e. contohnya, ia mengambil imej daripada kamera web dan menyiarkannya. Atau rakaman skrin. Atau siaran yang sedang berjalan dialihkan ke tapak lain. Tetapi saya tidak mempunyai strim, saya hanya mempunyai satu set fail video yang perlu dijadikan strim.

Saya mula menggali ke arah ini dan terjumpa ffmpeg. FFmpeg ialah satu set perpustakaan percuma dan sumber terbuka yang membolehkan anda merakam, menukar dan menstrim audio dan video digital dalam pelbagai format.

Dan saya sangat terkejut betapa ffmpeg boleh lakukan. Jika anda mahu, ia akan mengeluarkan bunyi daripada video. Jika anda mahu, ia akan memotong serpihan video tanpa pengekodan semula. Jika anda mahu, ia akan menukar dari satu format ke format yang lain. Dan banyak lagi. Sehingga anda boleh menentukan fail kepadanya, ia akan menukarnya menjadi strim dan menghantarnya ke YouTube sendiri. Itu sahaja, rantai itu dipasang. Apa yang tinggal adalah untuk memuktamadkan nuansa.

Langkah 3 – persediaan siaran

Kami membuat siaran di YouTube. Pada peringkat ini kita hanya memerlukan pautan dan kunci siaran. Dalam tangkapan skrin di bawah mereka diserlahkan dengan warna merah.

Siarkan video anda di YouTube XNUMX/XNUMX

Seterusnya muat naik fail video ke pelayan, yang kami rancang untuk siarkan. Sebenarnya, FTP hanya diperlukan untuk peringkat ini. Jika anda mempunyai cara lain yang mudah untuk memuat naik fail ke pelayan, maka anda tidak perlu menyediakan pelayan FTP.

Kami menghantar strim ke YouTube. Untuk memulakan penyiaran, anda perlu menjalankan ffmpeg dengan beberapa atribut. Inilah yang kelihatan seperti arahan terpendek yang saya dapat:

ffmpeg -re -i lecture1.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%

Penyahkodan atribut-re – menunjukkan bahawa fail mesti ditukar kepada strim.

-i – menunjukkan fail mana yang harus dimainkan. Adalah penting bahawa arahan itu dilancarkan dari direktori yang sama di mana fail video itu sendiri berada. Jika tidak, anda harus menentukan pautan mutlak ke fail, seperti /usr/media/lecture1.mp4.

-f – menetapkan format fail output. Dalam kes saya, ternyata ffmpeg menukar fail saya daripada mp4 kepada flv dengan cepat.

Dan pada akhirnya kami menunjukkan data yang kami ambil daripada YouTube pada halaman tetapan siaran, i.e. alamat yang anda perlukan untuk memindahkan data, dan kunci siaran, supaya siaran dipaparkan secara khusus pada saluran anda.

Jika anda melakukan semuanya dengan betul, maka selepas menjalankan arahan ini, YouTube akan melihat strim yang dihantar. Untuk memulakan siaran, anda hanya perlu mengklik butang "Mulakan Siaran" dalam YouTube itu sendiri.

Langkah 4 – tambahkan autonomi

tahniah! Sekarang anda tahu bagaimana untuk memulakan penyiaran dari fail video. Tetapi ini tidak mencukupi untuk penyiaran XNUMX/XNUMX. Adalah penting bahawa selepas video pertama selesai dimainkan, video seterusnya bermula serta-merta, dan apabila semua video ditunjukkan, main semula bermula semula.

Saya datang dengan pilihan berikut: buat fail .sh di mana saya menulis arahan untuk setiap fail video dan pada penghujungnya menunjukkan arahan untuk menjalankan skrip yang sama sekali lagi. Hasilnya ialah rekursi seperti ini:

Команда 1... (запуск трансляции файла lecture1.mp4)
Команда 2... (запуск трансляции файла lecture2.mp4)
Команда 3... (запуск трансляции файла lecture3.mp4)
bash start.sh

Dan, ya, ia berjaya. Puas dengan diri sendiri, saya melancarkan siaran ujian dan tidur.

Pada waktu pagi kejutan yang tidak menyenangkan menanti saya. Ternyata siaran itu hanya berlangsung beberapa minit dan tamat hampir serta-merta apabila saya mematikan komputer saya. Siasatan menunjukkan bahawa arahan yang dilancarkan dengan cara ini dilaksanakan semasa pengguna log masuk ke pelayan. Sebaik sahaja saya memutuskan sambungan, arahan yang saya jalankan terganggu. Untuk mengelakkan perkara ini berlaku, cukuplah di hadapan pasukan bash tambah arahan nohup. Ini akan membolehkan proses berjalan berjalan tanpa mengira kehadiran anda.

Versi minimum terakhir skrip kelihatan seperti ini:

ffmpeg -re -i lecture1.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%
ffmpeg -re -i lecture2.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%
ffmpeg -re -i lecture3.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%
nohup bash start.sh $

Di mana start.sh ialah fail di mana skrip ini ditulis. Dan fail ini mesti terletak dalam direktori yang sama dengan fail video.

Menambah tanda dolar pada penghujung membolehkan proses berjalan di latar belakang supaya anda boleh terus menggunakan konsol tanpa mengganggu siaran.

Bonus termasuk barangan berikut:

  • Anda boleh menukar main balik fail secara manual. Untuk melakukan ini, anda perlu "membunuh" proses ffmpeg yang sedang berjalan. Selepas ini, main balik fail seterusnya daripada senarai akan bermula secara automatik.
  • Video baharu boleh ditambah pada siaran tanpa menghentikan siaran. Cuma muat naik video ke pelayan, tambahkan arahan untuk menjalankan fail ini dalam skrip dan simpannya. Itu sahaja. Pada pusingan main balik seterusnya, fail baharu akan disiarkan bersama dengan fail lama.

Langkah 5 – sesuaikan ffmpeg

Pada dasarnya, kita boleh berhenti di sana. Tetapi saya mahu menjadikan siaran itu lebih mesra untuk penonton.

Katakan seseorang pergi ke siaran, mula menonton, menyukainya dan ingin menonton kuliah ini dari awal, tetapi siaran tidak membenarkan gulung semula. Untuk menonton kuliah dari awal, seseorang perlu pergi ke laman web saya dan mendapatkan rakaman kuliah yang diminati. Bagaimana anda boleh tahu kuliah mana yang menarik minatnya? Terdapat 16 kuliah di laman web ini dan hanya terdapat lebih banyak setiap minggu. Saya berpendapat bahawa walaupun saya, yang merakam dan menyunting semua kuliah ini, tidak akan dapat menentukan dari serpihan rawak yang kuliah itu. Oleh itu, adalah perlu bahawa setiap kuliah ditetapkan dengan cara tertentu.

Pilihan untuk menambah kapsyen pada fail video sumber dalam program penyuntingan tidak sesuai dengan saya. Ia adalah perlu untuk memastikan bahawa fail asal telah digunakan. Supaya menyokong siaran memerlukan sedikit pergerakan badan daripada saya.

Ternyata ffmpeg boleh membantu saya dengan ini juga. Ia mempunyai ciri khas -vf, yang membenarkan teks diletakkan di atas video. Untuk menambah teks pada video, anda perlu menambah serpihan berikut pada arahan:

-vf drawtext="fontfile=OpenSans.ttf:text='Лекция 13: Психология эмоций. Как создавать радость?':fontsize=26:fontcolor=white:borderw=1:bordercolor=black:x=40:y=670"

Penjelasan parameterfontfile= – pautan ke fail fon. Tanpa ini, kapsyen tidak akan ditambahkan pada video. Cara paling mudah ialah meletakkan fail fon dalam folder yang sama dengan video. Atau anda perlu menentukan laluan penuh ke fail.

text= – sebenarnya, teks itu sendiri yang perlu diletakkan di atas video.

fontsize= – saiz fon dalam piksel.

fontcolor= – warna fon.

borderw= – ketebalan garis besar di sekeliling teks dalam piksel (saya mempunyai teks putih dengan garis hitam setebal 1 piksel).

bordercolor= - warna garis besar.

x= и y= – koordinat teks. titik 0;0 terletak di sudut kiri atas. Koordinat saya dipilih sedemikian rupa sehingga teks diletakkan di sudut kiri bawah dengan resolusi video 1280x720 piksel.

Ia kelihatan seperti ini:

Siarkan video anda di YouTube XNUMX/XNUMX

Langkah 6 – tentukan kualiti siaran

Itu sahaja, siaran sudah siap. Siaran FFmpeg, fail dimainkan, kehadiran saya tidak diperlukan untuk penyiaran. Malah setiap kuliah ditandatangani. Nampak macam tu je.

Tetapi satu lagi nuansa muncul - saya memilih konfigurasi pelayan minimum dan ia tidak menarik siaran. Konfigurasi pelayan: 1 teras (seperti 2.2 GHz), 1 gigabait RAM, 25 GB SSD. Terdapat RAM yang mencukupi, tetapi pemproses hampir dimuatkan sepenuhnya pada 100% (dan kadang-kadang 102-103% :) Ini menyebabkan siaran membeku setiap beberapa saat. Tidak bagus.

Anda hanya boleh mengambil konfigurasi yang lebih mahal dengan dua teras, mujurlah, dengan teknologi awan, perubahan konfigurasi pelayan berlaku dengan menekan beberapa butang. Tetapi saya mahu muat dalam kapasiti konfigurasi minimum. Saya mula mengkaji dokumentasi ffmpeg dan ya, terdapat juga tetapan di sana yang membolehkan anda mengawal beban pada sistem.

Kualiti imej yang tinggi boleh dicapai dalam dua cara: sama ada beban CPU yang tinggi atau trafik keluar yang tinggi. Ternyata semakin banyak beban yang boleh ditanggung oleh pemproses, semakin sedikit jalur lebar saluran yang diperlukan. Atau anda tidak boleh memuatkan pemproses terlalu banyak, tetapi kemudian anda memerlukan saluran yang luas dengan ruang kepala lalu lintas yang besar. Jika terdapat sekatan pada kedua-dua pemproses dan saiz saluran/trafik keluar, maka anda perlu mengurangkan kualiti gambar supaya siaran berjalan lancar.

Pelayan saya mempunyai akses kepada saluran lebar 10 Mbit/s. Lebar ini tepat. Tetapi terdapat had trafik - 1 TB sebulan. Oleh itu, untuk memenuhi sekatan lalu lintas, aliran keluar saya tidak boleh melebihi ~300 KB sesaat i.e. Kadar bit aliran keluar hendaklah tidak lebih daripada 2,5 Mbit/s. YouTube, dengan cara ini, mengesyorkan penyiaran pada kadar bit ini.

Untuk mengawal beban pada sistem, ffmpeg menggunakan pendekatan yang berbeza. Baik ditulis tentang ini di sini. Saya akhirnya menggunakan dua atribut: -crf и -preset.

Faktor Kadar Malar (CRF) – ini adalah pekali terima kasih yang anda boleh melaraskan kualiti gambar. CRF boleh mempunyai nilai dari 0 hingga 51, di mana 0 ialah kualiti fail sumber, 51 ialah kualiti yang paling teruk. Adalah disyorkan untuk menggunakan nilai dari 17 hingga 28, lalainya ialah 23. Dengan pekali 17, video akan kelihatan sama dengan yang asal, tetapi secara teknikal ia tidak akan sama. Dokumentasi juga menyatakan bahawa saiz video akhir, bergantung pada CRF yang ditentukan, berubah secara eksponen, i.e. meningkatkan pekali sebanyak 6 mata akan menggandakan kadar bit video keluar.

Jika menggunakan CRF anda boleh memilih "berat" gambar keluar, kemudian gunakan pratetap (-preset) anda boleh menentukan berapa berat pemproses akan dimuatkan. Atribut ini mempunyai parameter berikut:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - nilai asal
  • slow
  • slower
  • veryslow

"Lebih cepat" parameter ditentukan, semakin tinggi beban pada pemproses.

Saya mula-mula memilih pratetap yang pada asasnya terlalu sukar untuk pemproses saya, dan kemudian memilih beban dengan lebih halus menggunakan CRF. Dalam kes saya, pratetap berfungsi fast, dan untuk crf saya menetapkan nilai 24.

Kesimpulan

Itu sahaja. Perintah terakhir untuk memulakan siaran adalah ini:

ffmpeg -re -i lecture1.mp4 -vf drawtext="fontfile=OpenSans.ttf:text='Лекция 1: Жонглирование картинами мира':fontsize=26:fontcolor=white:borderw=1:bordercolor=black:x=40:y=670" -c:v libx264 -preset fast -crf 24 -g 3 -f flv rtmp://a.rtmp.youtube.com/live2/%КЛЮЧ_ТРАНСЛЯЦИИ%

Hanya tinggal dua perkara yang tidak diterangkan di sini:

1) -c:v libx264 – menentukan codec khusus untuk bekerja dengan fail sumber.
2) -g 3 – petunjuk jelas bilangan bingkai utama. Dalam kes ini, ia dinyatakan bahawa setiap bingkai ketiga harus menjadi bingkai utama. Nilai standard adalah sama ada 5 atau 8, tetapi YouTube bersumpah dan meminta sekurang-kurangnya 3.

Anda boleh melihat kualiti siaran itu di sini.

Beban pada pelayan adalah seperti berikut:

Siarkan video anda di YouTube XNUMX/XNUMX

Siarkan video anda di YouTube XNUMX/XNUMX

Berdasarkan data pemantauan, jelas bahawa beban pemproses adalah antara 70% hingga 95% dan sepanjang minggu siaran tidak pernah mencapai 100%. Ini bermakna bahawa dengan tetapan ini pemproses sudah mencukupi.

Dengan memuatkan cakera, saya boleh mengatakan bahawa ia hampir tidak dimuatkan dan HDD biasa sepatutnya cukup untuk penyiaran.

Tetapi jumlah trafik keluar membimbangkan saya. Ternyata aliran keluar saya berkisar antara 450 hingga 650 KB sesaat. Dalam sebulan ini akan menjadi kira-kira 1,8 terabait. Anda mungkin perlu membeli trafik tambahan atau bertukar kepada konfigurasi dengan dua teras kerana... Saya tidak mahu mengurangkan kualiti gambar.

***

Akibatnya, saya akan mengatakan bahawa menyediakan siaran sedemikian dari awal mengambil masa kira-kira 1-2 jam. Lebih-lebih lagi, memuat naik video ke pelayan akan mengambil sebahagian besar masa.

Pelancaran siaran sedemikian tidak membenarkan dirinya sebagai alat pemasaran. Mungkin, jika kita meningkatkan tontonan supaya algoritma YouTube mengambil siaran ini dan mula memaparkannya secara aktif dalam pengesyoran, maka sesuatu akan menjadi. Dalam kes saya, dalam 16 hari siaran berterusan ia telah ditonton sebanyak 58 kali.

Tidak mengapa. Siaran itu sesuai dengan harmoni di halaman utama laman web saya. Ini memberi saya peluang untuk cepat membentuk pendapat saya sendiri tentang pensyarah dan kuliah itu sendiri.

Dan seketika. Adalah penting bahawa siaran itu tidak melanggar hak cipta sesiapa, jika tidak, siaran itu akan disekat. Saya tenang dengan siaran saya kerana... Saya secara khusus memilih sisipan muzik dengan penggunaan percuma, dan pengarang kandungan itu duduk di komputer berdekatan dan sama sekali tidak menentang saya menggunakan kandungannya :)

Tetapi jika anda mempunyai radio yang dimainkan di latar belakang di suatu tempat dalam siaran anda, atau anda menggunakan trek kegemaran anda semasa mengedit, atau mengambil urutan video daripada video muzik, siri TV atau filem popular, maka siaran anda berisiko. Ia juga penting bahawa siaran membawa sekurang-kurangnya beban semantik yang minimum, jika tidak, siaran itu mungkin disekat sebagai spam.

***

Itu sahaja yang saya ada. Saya harap manual ini akan memberi manfaat kepada seseorang. Nah, jika anda mempunyai sesuatu untuk ditambah, tulis, saya akan gembira membaca penambahan dan penjelasan kepada artikel itu.

Sumber: www.habr.com

Tambah komen