Predvajajte svoje videoposnetke na YouTubu XNUMX/XNUMX

Zadnje čase kot hobi snemam predavanja mojega poznanega psihologa. Posnetek zmontiram in objavim na svoji spletni strani. Pred mesecem dni sem dobil idejo, da bi organiziral 24/7 prenos teh predavanj na YouTubu. Nekakšen tematski "TV kanal", namenjen osebni rasti.

Vem, kako narediti redno oddajo. Toda kako narediti tako, da bo predvajanje video datotek? Tako, da deluje 24/7, je prilagodljiv, čim bolj avtonomen, hkrati pa ni v ničemer odvisen od domačega računalnika. To sem moral izvedeti.

Predvajajte svoje videoposnetke na YouTubu XNUMX/XNUMX

Trajalo je nekaj dni, da smo našli rešitev. Preštudiral sem veliko forumov in raznih priročnikov, brez katerih moja oddaja preprosto ne bi delovala. In zdaj, ko je potegavščina uspela, čutim potrebo, da delim svojo rešitev. Tako se je pojavil ta članek.

Skratka, končna rešitev je bila sledeča: VPS + ffmeg + skript bash. Pod rezom opisujem opravljene korake in govorim o pasteh, ki so bile odkrite pri organizaciji oddaje.

1. korak – od kod prihaja oddaja?

Že na začetku se je bilo treba odločiti, od kod bo oddaja in kje bo njen vir. Prva stvar, ki mi je prišla na misel, je bila iz domačega računalnika. Zberite videoposnetke na seznam predvajanja in jih začnite predvajati v katerem koli video predvajalniku. Nato zajemite sliko zaslona in jo predvajajte na YouTube. Toda to možnost sem skoraj takoj zavrnil, ker ... Za njegovo izvedbo morate imeti domači računalnik stalno prižgan, kar pomeni hrup hladilnikov tudi ponoči in povečano porabo električne energije (+100-150 kWh vsak mesec). In izkazalo se je, da med oddajo ne boste mogli uporabljati domačega računalnika. vsak premik miške bo viden v oddaji.

Potem sem začel gledati vstran storitve v oblaku. Iskal sem že pripravljeno storitev, kamor bi lahko nalagal svoje videoposnetke ali pa recimo vstavljal povezave do videov iz YouTuba in bi bilo vse skupaj zapakirano v eno non-stop oddajo. Ampak nisem našel nič primernega. Mogoče nisem dobro iskal. Edina stvar, ki ustreza funkcionalnosti, je restream.io, storitev, ki pomaga oddajati na več platformah hkrati. Zdi se, da vam omogočajo nalaganje lastnih videoposnetkov. Toda ta storitev je bila ustvarjena za popolnoma druge namene in pričakujejo, da bo oddaja trajala le nekaj ur. Mislim, da če bi bilo prek te storitve mogoče organizirati XNUMX-urno oddajanje, bi to zneslo na desetine ali celo stotine dolarjev na mesec. Še vedno pa sem želel organizirati oddajo brezplačno ali z minimalnimi finančnimi vložki.

Postalo je jasno, da je za oddajo treba oz ločeno napravo ali celo ločen računalnik. Razmišljal sem o nečem podobnem Raspberri Pi. In kaj? Nima hladilnika. Videoposnetek sem posnel na bliskovni pogon, priključil ethernetni kabel in pustil, da leži nekje na osamljenem mestu in ga predvajam. Možnost. Nisem pa imel niti same plošče niti izkušenj z delom z njo, zato sem tudi to možnost zavrnil.

Posledično sem naletel na neko razpravo, kjer so razpravljali o ustvarjanju lasten strežnik oddaje. Ni bilo ravno to, kar sem iskal, vendar sem dobil glavno idejo - lahko uporabite strežnik! V tej razpravi je bila predlagana uporaba kombinacije VPS + nginx + OBS. Postalo je jasno, da bi ta kombinacija lahko ustrezala tudi meni. Edina stvar, ki me je zmedla, je bila, da nisem nikoli upravljal strežnika in zdelo se mi je, da je lasten namenski strežnik zmeden in drag. Odločil sem se izvedeti, koliko bi stal najem strežnika z minimalno konfiguracijo in bil prijetno presenečen.

Predvajajte svoje videoposnetke na YouTubu XNUMX/XNUMX

Cene so navedene v beloruskih rubljih in to so le drobtinice. Za razumevanje je 8 beloruskih rubljev približno 3.5 dolarja ali 240 ruskih rubljev. Za mesec dni uporabe polnopravnega računalnika, ki je vključen 24/7 in ima hiter dostop do interneta. Iz nekega razloga me je to odkritje postalo zelo veselo in nekaj dni sem hodil naokoli strašno vesel, kot otrok, ki je odkril vesoljske rakete :)

Mimogrede, izkoristil sem ponudbo prvega mesta, ki mi ga je dal Google za poizvedbo “VPS najem”. Morda obstaja še več proračunskih rešitev, vendar mi je ta cena ustrezala in nisem iskal več.

Pri ustvarjanju strežnika lahko izberete operacijski sistem, pod katerim se bo izvajal. Oddajo lahko organizirate na katerem koli od navedenih sistemov in se odločite glede na svoje želje in finančne zmožnosti (za strežnik z Windows zahtevajo doplačilo). Izbral sem CentOS. Preprosto zato, ker sem prej imel malo izkušenj s tem.

Predvajajte svoje videoposnetke na YouTubu XNUMX/XNUMX

2. korak – nastavitev strežnika

Prva stvar, ki jo potrebujete po ustvarjanju strežnika, je, da se nanj povežete prek SSH. Sprva sem uporabljal PuTTy, potem pa sem začel uporabljati aplikacijo Secure Shell, ki deluje v brskalniku Google Chrome. Izkazalo se je, da je zame bolj priročno.

Potem sem spremenil ime gostitelja, nastavil časovno sinhronizacijo na strežniku, posodobil sistem, se poigral z iptables... in naredil še kup stvari, pa ne zato, ker bi bilo treba. Zanimala me je le nastavitev strežnika in mi je uspelo. Všeč mi je, ko uspe :)

Tu so koraki, ki jih morate storiti:

  1. Povežite repozitorij EPEL.
  2. Nastavite FTP strežnik (izbral sem vsftp).
  3. Namestite ffmpeg.

Ukazov ne bom navajal podrobno; ta navodila so precej konceptualna, da bi posredovali splošni akcijski načrt. Če imate kakršne koli težave pri katerem od korakov, jih lahko hitro rešite z uporabo poizvedbe v iskalniku, kot je »CentOS connect EPEL« ali »CentOS install FTP server«. In na prvih povezavah najdete podrobna navodila po korakih.

Torej, kot sem že napisal, sem potreboval kombinacijo VPS + nginx + OBS. VPS – pripravljen. Vendar so se začela pojavljati vprašanja o drugih točkah. OBS je program za oddajanje, Open Broadcaster Software. In deluje samo s tokovi, tj. na primer vzame sliko iz spletne kamere in jo predvaja. Ali snemanje zaslona. Ali pa je oddaja, ki že poteka, preusmerjena na drugo spletno mesto. Vendar nimam toka, imam samo nabor video datotek, ki jih je treba pretvoriti v tok.

Začel sem kopati v tej smeri in naletel na ffmpeg. FFmpeg je nabor brezplačnih in odprtokodnih knjižnic, ki vam omogočajo snemanje, pretvorbo in pretakanje digitalnega zvoka in videa v različnih formatih.

In bil sem zelo presenečen, koliko zmore ffmpeg. Če želite, bo iz videoposnetka izvlekel zvok. Če želite, bo izrezal del videoposnetka brez ponovnega kodiranja. Če želite, se bo pretvoril iz ene oblike v drugo. In še veliko, veliko več. Do te mere, da mu lahko določite datoteko, jo bo pretvoril v tok in sam posredoval YouTubu. To je to, veriga je sestavljena. Ostaja le še dokončati nianse.

3. korak – nastavitev oddaje

Ustvarjamo oddajo na YouTubu. Na tej stopnji potrebujemo samo povezavo in ključ za oddajanje. Na spodnjem posnetku zaslona so označeni z rdečo.

Predvajajte svoje videoposnetke na YouTubu XNUMX/XNUMX

Več nalaganje video datotek na strežnik, ki jih nameravamo predvajati. Pravzaprav je FTP potreben le za to stopnjo. Če imate drug priročen način za nalaganje datotek na strežnik, vam ni treba nastaviti strežnika FTP.

Tok prenašamo na YouTube. Za začetek oddajanja morate zagnati ffmpeg z več atributi. Tako izgleda najkrajši ukaz, ki sem ga dobil:

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

Dekodiranje atributov-re – označuje, da je treba datoteko pretvoriti v tok.

-i – označuje, katero datoteko je treba predvajati. Pomembno je, da se ukaz zažene iz istega imenika, kjer se nahaja sama video datoteka. V nasprotnem primeru bi morali navesti absolutno povezavo do datoteke, na primer /usr/media/lecture1.mp4.

-f – nastavi format izhodne datoteke. V mojem primeru se je izkazalo, da ffmpeg pretvori mojo datoteko iz mp4 v flv sproti.

In na koncu na strani z nastavitvami oddajanja navedemo podatke, ki smo jih vzeli iz YouTuba, tj. naslov, na katerega morate prenesti podatke, in ključ oddaje, tako da bo oddaja prikazana posebej na vašem kanalu.

Če ste vse naredili pravilno, bo po zagonu tega ukaza YouTube videl preneseni tok. Če želite začeti oddajo, morate samo klikniti gumb »Začni oddajo« v samem YouTubu.

4. korak – dodajte avtonomijo

čestitke! Zdaj veste, kako začeti oddajanje iz video datoteke. Toda to ni dovolj za XNUMX/XNUMX oddajanje. Pomembno je, da se po končanem predvajanju prvega videoposnetka takoj začne naslednji in ko se prikažejo vsi videoposnetki, se predvajanje začne znova.

Prišel sem do naslednje možnosti: ustvariti datoteko .sh, v katero sem za vsako video datoteko napisal ukaz in čisto na koncu navedel ukaz za ponovni zagon iste skripte. Rezultat je rekurzija, kot je ta:

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

In ja, uspelo je. Zadovoljna sama s seboj sem sprožila testno oddajo in odšla spat.

Zjutraj me je čakalo neprijetno presenečenje. Izkazalo se je, da je oddaja trajala le nekaj minut in se je končala skoraj takoj, ko sem ugasnil računalnik. Preiskava je pokazala, da se tako sproženi ukazi izvajajo, ko je uporabnik prijavljen na strežnik. Takoj ko sem prekinil povezavo, so bili ukazi, ki sem jih izvajal, prekinjeni. Da se to ne bi zgodilo, je dovolj pred ekipo bash dodajte ukaz nohup. To bo omogočilo, da tekoči proces teče ne glede na vašo prisotnost.

Končna minimalna različica skripta izgleda takole:

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 $

Kjer je start.sh datoteka, v kateri je zapisan ta skript. In ta datoteka mora biti v istem imeniku kot video datoteke.

Če na koncu dodate znak za dolar, lahko postopek teče v ozadju, tako da lahko nadaljujete z uporabo konzole, ne da bi prekinili oddajanje.

Bonusi so vključevali naslednje dobrote:

  • Predvajanje datotek lahko preklopite ročno. Če želite to narediti, morate "ubiti" trenutno delujoči proces ffmpeg. Po tem se samodejno začne predvajanje naslednje datoteke s seznama.
  • V oddajo je mogoče dodati nove videe, ne da bi ustavili oddajo. Preprosto naložite video na strežnik, dodajte ukaz za zagon te datoteke v skriptu in jo shranite. To je vse. V naslednjem krogu predvajanja bo nova datoteka predvajana skupaj s starimi datotekami.

5. korak – prilagodite ffmpeg

Načeloma bi se tam lahko ustavili. Želel pa sem narediti oddajo malo bolj prijazno do gledalcev.

Oseba je recimo šla na oddajo, začela gledati, ji je bilo všeč in je želela to predavanje gledati od začetka, pa oddaja ne omogoča previjanja nazaj. Za ogled predavanja od začetka mora oseba iti na mojo spletno stran in dobiti posnetek predavanja, ki ga zanima. Kako lahko ugotovite, katero predavanje ga zanima? Na strani je že 16 predavanj in vsak teden jih je samo še več. Mislim, da tudi jaz, ki sem vsa ta predavanja posnel in zmontiral, ne bom mogel iz naključnega fragmenta ugotoviti, za katero predavanje gre. Zato je nujno, da je vsako predavanje nekako označeno.

Možnost dodajanja napisov izvornim video datotekam v programu za urejanje mi ni ustrezala. Treba je bilo zagotoviti uporabo originalnih datotek. Tako, da podpiranje oddaje od mene zahteva čim manj telesnih gibov.

Izkazalo se je, da bi mi pri tem lahko pomagal tudi ffmpeg. Ima poseben atribut -vf, ki omogoča postavitev besedila čez video. Če želite videoposnetku dodati besedilo, morate ukazu dodati naslednji fragment:

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

Razlaga parametrovfontfile= – povezava do datoteke s pisavami. Brez tega napis ne bo dodan videoposnetku. Najlažji način je, da datoteko pisave postavite v isto mapo kot video. Ali pa boste morali določiti celotno pot do datoteke.

text= – pravzaprav samo besedilo, ki ga je treba postaviti na vrh videa.

fontsize= – velikost pisave v slikovnih pikah.

fontcolor= – barva pisave.

borderw= – debelina obrisa okoli besedila v slikovnih pikah (imam belo besedilo s črnim obrisom debeline 1 piksel).

bordercolor= – barva obrisa.

x= и y= – besedilne koordinate. Pika 0;0 se nahaja v zgornjem levem kotu. Moje koordinate so izbrane tako, da je besedilo postavljeno v spodnji levi kot z ločljivostjo videa 1280x720 slikovnih pik.

Videti je takole:

Predvajajte svoje videoposnetke na YouTubu XNUMX/XNUMX

6. korak – določite kakovost oddajanja

To je to, oddaja je pripravljena. FFmpeg oddaja, datoteke se predvajajo, moja prisotnost ni potrebna za oddajanje. Tudi vsako predavanje je podpisano. Videti je, da je to to.

Vendar se je pojavil še en odtenek - izbral sem minimalno konfiguracijo strežnika in oddajanja ni zagnal. Konfiguracija strežnika: 1 jedro (npr. 2.2 GHz), 1 gigabajt RAM-a, 25 GB SSD. RAM-a je bilo dovolj, vendar je bil procesor skoraj popolnoma obremenjen na 100% (in na trenutke celo 102-103% :) Zaradi tega je oddaja zamrznila vsakih nekaj sekund. Ni lepo.

Preprosto bi lahko vzeli dražjo konfiguracijo z dvema jedroma, na srečo s tehnologijami v oblaku se spremeni konfiguracija strežnika s pritiskom na nekaj gumbov. Vendar sem se želel prilegati minimalni konfiguracijski zmogljivosti. Začel sem preučevati dokumentacijo ffmpeg in ja, tam so tudi nastavitve, ki vam omogočajo uravnavanje obremenitve sistema.

Visoko kakovost slike je mogoče doseči na dva načina: z visoko obremenitvijo procesorja ali z velikim odhodnim prometom. Izkazalo se je, da večjo obremenitev, ki jo lahko prenese procesor, manjša bo potrebna pasovna širina kanala. Ali pa procesorja ne morete preveč naložiti, potem pa boste potrebovali širok kanal z velikim prometnim prostorom. Če obstajajo omejitve tako glede procesorja kot velikosti odhodnega kanala/prometa, boste morali zmanjšati kakovost slike, da bo oddajanje potekalo gladko.

Moj strežnik ima dostop do 10 Mbit/s širokega kanala. Ta širina je ravno pravšnja. Vendar obstaja omejitev prometa - 1 TB na mesec. Zaradi upoštevanja prometnih omejitev moj odhodni tok torej ne sme preseči ~300 KB na sekundo, tj. Bitna hitrost odhodnega toka ne sme biti večja od 2,5 Mbit/s. Mimogrede, YouTube priporoča oddajanje pri tej bitni hitrosti.

Za uravnavanje obremenitve sistema ffmpeg uporablja različne pristope. Dobro napisano o tem tukaj. Na koncu sem uporabil dva atributa: -crf и -preset.

Faktor konstantne stopnje (CRF) – to je koeficient, s katerim lahko prilagodite kakovost slike. CRF ima lahko vrednosti od 0 do 51, kjer je 0 kakovost izvorne datoteke, 51 je najslabša možna kakovost. Priporočljivo je, da uporabite vrednosti od 17 do 28, privzeto je 23. S koeficientom 17 bo videoposnetek vizualno enak izvirniku, tehnično pa ne bo enak. V dokumentaciji je tudi navedeno, da se velikost končnega videa, odvisno od podanega CRF, spreminja eksponentno, tj. povečanje koeficienta za 6 točk bo podvojilo bitno hitrost odhodnega videa.

Če uporabljate CRF, lahko izberete "težo" odhodne slike in nato uporabite prednastavitve (-prednastavitev) lahko določite, kako močno bo procesor obremenjen. Ta atribut ima naslednje parametre:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - privzeta vrednost
  • slow
  • slower
  • veryslow

Čim "hitreje" je določen parameter, večja bo obremenitev procesorja.

Najprej sem izbral prednastavitev, ki je bila v bistvu pretežka za moj procesor, nato pa sem natančneje izbral obremenitev s CRF. V mojem primeru je prednastavitev delovala fast, za crf pa sem se odločil za vrednost 24.

Zaključek

To je vse. Končni ukaz za začetek oddajanja je bil naslednji:

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

Tu sta ostali samo še dve neopisani točki:

1) -c:v libx264 – določitev posebnega kodeka za delo z izvorno datoteko.
2) -g 3 – eksplicitna navedba števila ključnih sličic. V tem primeru je določeno, da mora biti vsak tretji okvir ključni okvir. Standardna vrednost je 5 ali 8, vendar YouTube prisega in zahteva vsaj 3.

Vidite lahko, kakšna kakovost je bila oddaja tukaj.

Obremenitev strežnika je bila naslednja:

Predvajajte svoje videoposnetke na YouTubu XNUMX/XNUMX

Predvajajte svoje videoposnetke na YouTubu XNUMX/XNUMX

Na podlagi podatkov spremljanja je razvidno, da se obremenitev procesorja giblje od 70% do 95%, med tednom pa oddajanje nikoli ni doseglo 100%. To pomeni, da je s temi nastavitvami procesorja dovolj.

Po obremenitvi diska lahko rečem, da skoraj ni obremenjen in bi moral za oddajanje zadostovati navaden HDD.

Skrbi pa me količina odhodnega prometa. Izkazalo se je, da se moj odhodni tok giblje od 450 do 650 KB na sekundo. V enem mesecu bo to približno 1,8 terabajta. Morda boste morali kupiti dodaten promet ali preklopiti na konfiguracijo z dvema jedroma, ker ... Ne bi rad zmanjšal kakovosti slike.

***

Kot rezultat bom rekel, da nastavitev takšnega oddajanja iz nič traja približno 1-2 uri. Poleg tega bo nalaganje videa na strežnik vzelo večino časa.

Uvedba takšne oddaje se ni upravičila kot marketinško orodje. Morda bi se nekaj izšlo, če povečamo oglede, tako da algoritmi YouTuba poberejo to oddajo in jo začnejo aktivno kazati v priporočilih. V mojem primeru je bil v 16 dneh neprekinjenega predvajanja gledan 58-krat.

To je v redu. Oddaja se harmonično prilega glavni strani moje spletne strani. To mi je dalo možnost, da sem si hitro ustvarila lastno mnenje o predavatelju in samih predavanjih.

In trenutek. Pomembno je, da oddaja nikomur ne krši avtorskih pravic, sicer bo blokirana. Miren sem glede svoje oddaje, ker ... Posebej sem izbral glasbene vložke z brezplačno uporabo, avtorica vsebine pa sedi za bližnjim računalnikom in prav nič ne nasprotuje temu, da uporabljam njeno vsebino :)

Če pa imate nekje v oddaji v ozadju radio ali ste med montažo uporabili svojo najljubšo skladbo ali vzeli video sekvenco iz priljubljenega glasbenega videa, televizijske serije ali filma, potem je vaša oddaja ogrožena. Pomembno je tudi, da ima oddaja vsaj minimalno semantično obremenitev, sicer je lahko blokirana kot neželena pošta.

***

To je vse kar imam. Upam, da bo ta priročnik komu dobro služil. No, če imate kaj dodati, napišite, z veseljem bom prebral dodatke in pojasnila k članku.

Vir: www.habr.com

Dodaj komentar