Strimujte svoje video zapise XNUMX/XNUMX na YouTubeu

Odnedavno iz hobija snimam predavanja prijatelja psihologa. Montiram snimak i objavljujem ga na svojoj web stranici. Prije mjesec dana pao sam na ideju da organiziram 24-satni prijenos ovih predavanja na YouTube-u 7/XNUMX. Neka vrsta tematskog "TV kanala" posvećenog ličnom razvoju.

Znam da napravim normalan prenos. Ali kako to učiniti tako da to bude emitiranje video datoteka? Tako da radi 24/7, fleksibilan je, što autonomniji, a da pritom ni na koji način ne zavisi od mog kućnog računara. Ovo sam morao da saznam.

Strimujte svoje video zapise XNUMX/XNUMX na YouTubeu

Trebalo je nekoliko dana da se pronađe rješenje. Proučio sam mnoge forume i razne priručnike, bez kojih do mog emitovanja jednostavno ne bi došlo. I sada kada je šala uspjela, osjećam potrebu da podijelim svoje rješenje. Tako je nastao ovaj članak.

Ukratko, konačno rješenje je sljedeće: VPS + ffmeg + bash skripta. Ispod reza opisujem preduzete korake i govorim o "zamkama" koje su otkrivene tokom organizacije emisije.

Korak 1 - Odakle će ići emitiranje?

Na samom početku bilo je potrebno odlučiti odakle će biti emitovanje, odakle će biti njegov izvor. Prva stvar koja mi je pala na pamet - sa kućnog računara. Sakupite videozapise u listu za reprodukciju i počnite ih reproducirati u bilo kojem video playeru. Zatim snimite sliku sa ekrana i emitujte je na YouTube. Ali sam skoro odmah odbacio ovu opciju. da biste ga implementirali, potrebno je da vaš kućni računar bude stalno uključen, a to je buka iz hladnjaka čak i noću i povećana potrošnja električne energije (+ 100-150 kWh svakog mjeseca). I ispostavilo se da će tokom emitovanja biti nemoguće koristiti kućni računar. svaki pokret miša će biti vidljiv u emisiji.

Onda sam počeo da skrećem pogled usluge u oblaku. Tražio sam gotov servis u koji bih mogao da postavim svoje video zapise ili, na primer, da ubacim linkove ka videima sa YouTube-a i sve bi to bilo upakovano u jedno non-stop emitovanje. Ali nisam našao ništa prikladno. Možda nisam dobro tražio. Jedina stvar koja odgovara ovome je restream.io, usluga koja vam pomaže da strimujete na više platformi u isto vrijeme. Čini se da su u mogućnosti da postavljaju svoje video zapise. Ali ovaj servis je kreiran za sasvim drugu svrhu, a očekuju da će emitiranje trajati samo nekoliko sati. Mislim da kada bi se preko ovog servisa moglo organizovati danonoćno emitovanje, onda bi to skočilo na desetine ili čak stotine dolara mesečno. Ali ipak sam želio organizirati emitiranje bilo besplatno ili uz minimalna finansijska ulaganja.

Postalo je jasno da vam je ispod emitovanja potrebno ili poseban uređaj Ili čak poseban računar. Razmišljao sam u pravcu nečega poput Raspberry Pi-ja. I šta? On nema hladnjak. Video sam snimio na USB fleš disk, priključio Ethernet kabl i pustio da leži negdje na osami, emituje. Opcija. Ali nisam imao samu ploču, niti iskustvo rada sa njom, pa sam i ovu opciju odbio.

Kao rezultat toga, naišao sam na određenu diskusiju u kojoj su raspravljali o stvaranju vlastiti server emisije. Nije bilo baš ono što sam tražio, ali sam dobio glavnu ideju - možete koristiti server! U toj diskusiji je predloženo korištenje gomile VPS + nginx + OBS. Postalo je jasno da mi ovaj paket može odgovarati. Jedina sramotna stvar je to što nikada nisam administrirao server i činilo mi se da je moj vlastiti namenski server zbunjujući i skup. Odlučio sam saznati koliko bi koštalo iznajmljivanje servera u minimalnoj konfiguraciji i bio sam ugodno iznenađen.

Strimujte svoje video zapise XNUMX/XNUMX na YouTubeu

Cijene su u bjeloruskim rubljama i to su samo mrvice. Za razumijevanje, 8 bjeloruskih rubalja je oko 3.5 dolara ili 240 ruskih rubalja. Za mjesec dana korištenja punog računara koji je uključen 24/7 i ima brz pristup internetu. Iz nekog razloga, ovo otkriće mi je postalo jako radosno i nekoliko dana sam hodao užasno zadovoljan kao dijete koje je otkrilo svemirske rakete 🙂

Inače, iskoristio sam ponudu prve stranice koju mi ​​je Google dao na upit „rent a VPS“. Možda ima još jeftinijih rješenja, ali ova cijena mi je odgovarala i nisam tražio dalje.

Prilikom kreiranja servera možete odabrati operativni sistem pod kojim će se pokrenuti. Na bilo kom od navedenih sistema možete organizovati emitovanje i napraviti izbor na osnovu vaših preferencija i finansijskih mogućnosti (za server sa Windows-om traže dodatnu naknadu). Odabrao sam CentOS. Samo zato što sam ranije imao malo iskustva sa njom.

Strimujte svoje video zapise XNUMX/XNUMX na YouTubeu

Korak 2 - Podešavanje servera

Prva stvar nakon kreiranja servera je povezivanje na njega preko SSH-a. Prvo sam koristio PuTTy, ali sam onda počeo koristiti aplikaciju Secure Shell, koja radi u Google Chrome-u. Zbog toga sam se osjećao ugodnije.

Zatim sam promijenio ime hosta, podesio sinhronizaciju vremena na serveru, ažurirao sistem, petljao po iptables-u... i radio gomilu drugih stvari, ali ne zato što je bilo potrebno. Samo sam bio zainteresovan za postavljanje servera i to sam uradio. Volim kada radi 🙂

Evo koraka koje treba poduzeti:

  1. Povežite EPEL spremište.
  2. Podesite FTP server (ja sam izabrao vsftp).
  3. Instalirajte ffmpeg.

Neću davati naredbe u detalje, ovo uputstvo je prilično konceptualno da bi se prenio opšti plan akcije. Ako imate bilo kakvih poteškoća s bilo kojim od koraka, oni se brzo rješavaju upitom u tražilici poput “CentOS connect EPEL” ili “CentOS FTP server Installation”. A na prvim linkovima možete pronaći detaljne upute korak po korak.

Dakle, kao što sam ranije napisao, trebala mi je gomila VPS + nginx + OBS. VPS - gotovo. Ali po drugim tačkama, počela su se postavljati pitanja. OBS je program za emitovanje, Open Broadcaster Software. I radi samo sa streamovima, tj. na primjer, uzima sliku sa web kamere i emituje je. Ili snimanje ekrana. Ili preusmerava emitovanje koje je već u toku na drugu lokaciju. I nemam stream, imam samo set video fajlova koji su mi potrebni da napravim stream.

Počeo sam kopati u ovom pravcu i naišao na ffmpeg. FFmpeg je skup besplatnih biblioteka otvorenog koda koji vam omogućavaju snimanje, pretvaranje i striming digitalnih audio i video zapisa u različitim formatima.

I bio sam veoma iznenađen koliko ffmpeg može da uradi. Ako želite - povucite zvuk iz videa. Ako želite, izrezat će fragment videa bez transkodiranja. Ako želite, pretvorit će se iz jednog formata u drugi. I mnogo, mnogo više. Sve dok može odrediti fajl, on će ga pretvoriti u stream i sam prenijeti na YouTube. Sve, lanac je sastavljen. Ostaje samo precizirati nijanse.

Korak 3 - Podešavanje emitovanja

Kreiramo emitovanje na YouTube-u. U ovoj fazi, potrebna nam je samo veza i ključ za emitiranje. Oni su označeni crvenom bojom na slici ispod.

Strimujte svoje video zapise XNUMX/XNUMX na YouTubeu

dalje otpremanje video fajlova na server, koje planiramo emitovati. Zapravo, FTP je potreban samo za ovu fazu. Ako imate drugi zgodan način za učitavanje datoteka na server, onda se FTP server ne može podići.

Prenesite na YouTube. Da biste započeli emitiranje, trebate pokrenuti ffmpeg sa nekoliko atributa. Ovako izgleda najkraća komanda koju sam dobio:

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

Interpretacija atributa-re - označava da se datoteka treba pretvoriti u stream.

-i – označava koji fajl se reproducira. Važno je da se naredba pokrene iz istog direktorija u kojem se nalazi i sam video fajl. U suprotnom, trebali biste navesti apsolutnu vezu do datoteke, npr /usr/media/lecture1.mp4.

-f – postavlja format izlazne datoteke. U mom slučaju, ispada da ffmpeg konvertuje moj fajl iz mp4 u flv u hodu.

I na kraju navodimo podatke koje smo preuzeli sa YouTube-a na stranici postavki emitiranja, tj. adresu na koju želite da pošaljete podatke i taster za emitovanje tako da se emisija prikazuje na vašem kanalu.

Ako ste sve učinili ispravno, nakon pokretanja ove naredbe, YouTube će vidjeti preneseni prijenos. Da biste započeli emitovanje, sve što treba da uradite je da kliknete na dugme "Pokreni emitovanje" na samom YouTube-u.

Korak 4 - Dodajte autonomiju

Čestitamo! Sada znate kako započeti emitiranje iz video datoteke. Ali to nije dovoljno za emitovanje XNUMX sata dnevno. Važno je da nakon završetka reprodukcije prvog videa odmah krene sljedeći, a kada se svi videi prikažu, reprodukcija počinje ponovo.

Smislio sam sljedeću opciju: kreirati .sh fajl, u koji sam napisao komandu za svaki video fajl i na samom kraju naznačio komandu za ponovno pokretanje iste skripte. Ovo je rezultiralo rekurzijom poput ove:

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

I, da, upalilo je. Zadovoljan sam sobom, pokrenuo sam probno emitovanje i otišao u krevet.

Ujutro me čekalo gadno iznenađenje. Ispostavilo se da je emitovanje trajalo samo nekoliko minuta i da je završilo skoro odmah nakon što sam isključio kompjuter. Istraga je pokazala da se ovako pokrenute komande izvršavaju dok je korisnik autorizovan na serveru. Čim sam prekinuo vezu, izvršenje započetih komandi je prekinuto. Da se to ne dogodi dovoljno je pred timom bash add command nohup. Ovo će omogućiti pokretanje procesa bez obzira na vaše prisustvo.

Konačna minimalna verzija skripte izgleda ovako:

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 $

Gdje je start.sh datoteka u kojoj je napisana ova skripta. I ova datoteka se mora nalaziti u istom direktoriju kao i video datoteke.

Dodavanje znaka dolara na kraju omogućava da se proces izvodi u pozadini tako da možete nastaviti koristiti konzolu bez prekidanja emitiranja.

Od bonusa su dobijeni sljedeći bonusi:

  • Možete ručno prebaciti reprodukciju datoteka. Da biste to učinili, morate "ubiti" trenutno pokrenuti ffmpeg proces. Nakon toga, automatski će početi reprodukcija sljedećeg fajla sa liste.
  • Novi video zapisi se mogu dodati u emisiju bez zaustavljanja emitiranja. Samo prenesite video na server, dodajte naredbu za pokretanje ove datoteke u skriptu i sačuvajte je. I to je to. U sljedećem krugu reprodukcije, novi fajl će se već emitovati uporedo sa starim fajlovima.

Korak 5 - Prilagodite ffmpeg

Na ovome je, u principu, bilo moguće stati. Ali želio sam da emisiju učinim malo ugodnijom za gledaoce.

Pretpostavimo da je osoba otišla na emisiju, počela je gledati, svidjelo joj se i htjela je pogledati ovo predavanje od početka, ali prijenos ne predviđa premotavanje unazad. Da bi pogledala predavanje od početka, osoba će morati otići na moju web stranicu i dobiti snimak predavanja od interesa. I kako shvatiti koje predavanje ga zanima? Na sajtu ima već 16 predavanja i svake nedelje ih je sve više. Mislim da ni ja, koji sam snimao i montirao sva ova predavanja, neću moći iz slučajnog fragmenta odrediti o kakvom je predavanju riječ. Stoga je potrebno da svako predavanje bude na neki način označeno.

Opcija dodavanja titlova izvornim video datotekama u programu za uređivanje nije mi odgovarala. Bilo je potrebno osigurati da se koriste originalni fajlovi. Za podršku emitovanju od mene je bilo potrebno što manje pokreta tijela.

Ispostavilo se da mi ffmpeg može pomoći iu ovome. Ima poseban atribut -vf, što vam omogućava da stavite tekst na video. Da dodate tekst u video, morate dodati sljedeći fragment naredbi:

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

Dešifrovanje parametarafontfile= – link do datoteke fonta. Bez toga, natpis na videu se ne dodaje. Najlakši način je da stavite datoteku fonta u isti folder sa video zapisom. Ili ćete morati navesti punu putanju do datoteke.

text= - zapravo, sam tekst, koji se mora postaviti preko videa.

fontsize= – veličina fonta u pikselima.

fontcolor= - boja fonta.

borderw= - debljina obrisa oko teksta u pikselima (imam bijeli tekst sa crnim obrisom debljine 1 piksel).

bordercolor= - boja obrisa.

x= и y= – tekstualne koordinate. Dot 0;0 nalazi se u gornjem lijevom uglu. Moje koordinate su odabrane na način da se tekst nalazi u donjem lijevom uglu u rezoluciji videa od 1280x720 piksela.

izgleda ovako:

Strimujte svoje video zapise XNUMX/XNUMX na YouTubeu

Korak 6 - odredite kvalitet emitovanja

Sve, emitovanje je spremno. FFmpeg emituje, fajlovi se reprodukuju, moje prisustvo nije potrebno za emitovanje. Čak je svako predavanje potpisano. Izgleda da je to to.

Ali pojavila se još jedna nijansa - izabrao sam minimalnu konfiguraciju servera i nije povukla emitovanje. Konfiguracija servera: 1 jezgro (kao 2.2 GHz), 1 gigabajt RAM-a, 25 GB SSD. Bilo je dovoljno RAM-a, ali se procesor skoro potpuno učitao na 100% (a ponekad čak i na 102-103% 🙂 To je dovelo do zamrzavanja emitovanja svakih nekoliko sekundi. Ružno.

Mogli biste samo uzeti skuplju konfiguraciju sa dvije jezgre, srećom, uz cloud tehnologije, promjena konfiguracije servera se događa pritiskom na nekoliko tipki. Ali htio sam se uklopiti u kapacitet minimalne konfiguracije. Počeo sam da proučavam ffmpeg dokumentaciju i da, postoje i postavke koje vam omogućavaju da prilagodite opterećenje sistema.

Visok kvalitet slike može se postići na dva načina: ili velikim opterećenjem procesora ili velikim odlaznim prometom. Ispostavilo se da što više opterećenja procesor može preuzeti, to će biti potrebno manje propusnog opsega. Ili ne možete jako opteretiti procesor, ali tada će vam trebati širok kanal s velikom marginom prometa. Ako postoje ograničenja i za procesor i za veličinu odlaznog kanala/prometa, tada ćete morati smanjiti kvalitetu slike kako bi emitiranje proteklo glatko.

Moj server ima dostupan kanal od 10 Mbps. Ova širina je ravna sa marginom. Ali postoji ograničenje prometa - 1 TB mjesečno. Stoga, da bih ispunio ograničenja saobraćaja, moj odlazni stream ne bi trebao prelaziti ~300 Kb u sekundi, tj. brzina prijenosa odlaznog toka ne smije biti veća od 2,5 Mbps. YouTube, inače, samo preporučuje emitovanje sa ovom brzinom prijenosa.

Da bi regulisao opterećenje sistema, ffmpeg koristi različite pristupe. Dobro napisano o tome ovdje. Na kraju sam koristio dva atributa: -crf и -preset.

Faktor konstantne stope (CRF) - Ovo je koeficijent pomoću kojeg možete podesiti kvalitetu slike. CRF može imati vrijednosti od 0 do 51, gdje je 0 kvalitet izvorne datoteke, 51 je najgori mogući kvalitet. Preporučljivo je koristiti vrijednosti od 17 do 28, zadana vrijednost je 23. Uz faktor 17, video će biti vizualno identičan originalu, ali tehnički neće biti. U dokumentaciji se također navodi da se veličina finalnog videa, ovisno o navedenom CRF-u, eksponencijalno mijenja, tj. povećanje omjera za 6 poena će udvostručiti bitrate odlaznog videa.

Ako koristite CRF, možete pokupiti "težinu" odlazeće slike, a zatim pomoću unapred podešene vrednosti (-preset) možete odrediti koliko će procesor biti opterećen. Ovaj atribut ima sljedeće parametre:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - zadana vrijednost
  • slow
  • slower
  • veryslow

Što je parametar "brži" naveden, veće će biti opterećenje procesora.

Prvo sam podigao unapred podešenu vrednost koja je u principu bila "preteška" za moj procesor, a onda sam finije pokupio opterećenje koristeći CRF. U mom slučaju se pojavila preset fast, a za crf sam se odlučio na vrijednost od 24.

zaključak

To je sve. Posljednju naredbu za početak emitiranja, dobio sam ovo:

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/%КЛЮЧ_ТРАНСЛЯЦИИ%

Ovdje su ostala samo dva neopisana momenta:

1) -c:v libx264 – određivanje specifičnog kodeka za rad sa izvornom datotekom.
2) -g 3 – eksplicitno navođenje broja ključnih kadrova. U ovom slučaju je navedeno da svaki treći okvir mora biti ključni okvir. Standardna vrijednost je 5 ili 8, ali YouTube se kune, tražeći najmanje 3.

Kakav je kvalitet emisije koju možete gledati ovdje.

Opterećenje servera je sljedeće:

Strimujte svoje video zapise XNUMX/XNUMX na YouTubeu

Strimujte svoje video zapise XNUMX/XNUMX na YouTubeu

Na osnovu podataka praćenja vidi se da se opterećenje procesora kreće od 70% do 95%, a za nedelju dana emitovanje nikada nije dostiglo 100%. Dakle, sa ovakvim postavkama procesor je dovoljan.

Učitavanjem diska mogu reći da skoro da nije učitan, a za emitiranje bi trebao biti dovoljan običan HDD.

Ali zabrinjava me količina odlaznog saobraćaja. Ispostavilo se da se moj odlazni tok kreće od 450 do 650 KB u sekundi. Za mjesec dana to će biti oko 1,8 terabajta. Možda ćete morati kupiti više prometa ili se ipak prebaciti na konfiguraciju s dvije jezgre. Ne želim da smanjim kvalitet slike.

***

Kao rezultat toga, reći ću da postavljanje takvog emitiranja od nule traje oko 1-2 sata. I većinu vremena će biti potrebno za otpremanje videa na server.

Kao marketinški alat, pokretanje ovakvog emitovanja nije se opravdalo. Možda ako povećate preglede tako da YouTube algoritmi pokupe ovu emisiju i počnu je aktivno prikazivati ​​u preporukama, onda bi nešto uspjelo. U mom slučaju, za 16 dana neprekidnog emitovanja, gledano je 58 puta.

To je ok. Emitiranje se skladno uklapa na glavnu stranicu moje stranice. Dobio sam svojevrsnu priliku da brzo formiram svoje mišljenje o predavaču i samim predavanjima.

I jedan trenutak. Važno je da emitovanje ne krši ničija autorska prava, inače će biti blokirano. Smiren sam za svoj prenos. Posebno sam odabrao muzičke inserte sa besplatnim korištenjem, a autorica sadržaja sjedi za obližnjim kompjuterom i ne smeta mi da koristim njen sadržaj 🙂

Ali ako imate radio koji svira negde u pozadini u vašem emitovanju, ili ste koristili svoju omiljenu numeru tokom montaže, ili ste snimili video sekvencu iz popularnog muzičkog spota, serije ili filma, onda je vaše emitovanje u opasnosti. Također je važno da emitiranje nosi barem minimalno semantičko opterećenje, inače može biti blokirano kao neželjena pošta.

***

To je sve za mene. Nadam se da će ovaj priručnik nekome dobro poslužiti. Pa, ako imate nešto za dodati - pišite, rado ću pročitati dodatke i pojašnjenja članka.

izvor: www.habr.com

Dodajte komentar