Dissendu viajn videojn sur Jutubo XNUMX/XNUMX

Lastatempe, kiel ŝatokupo, mi filmas prelegojn de psikologo, kiun mi konas. Mi redaktas la filmaĵon kaj publikigas ĝin en mia retejo. Antaŭ unu monato, mi ekhavis la ideon organizi 24/7 elsendon de ĉi tiuj prelegoj en Jutubo. Speco de tema "televida kanalo" dediĉita al persona kresko.

Mi scias kiel fari regulan elsendon. Sed kiel fari ĝin por ke ĝi estu elsendo de videodosieroj? Por ke ĝi funkcias 24/7, estas fleksebla, kiel eble plej aŭtonoma, kaj samtempe ne dependas neniel de mia hejma komputilo. Jen kion mi devis ekscii.

Dissendu viajn videojn sur Jutubo XNUMX/XNUMX

Necesis pluraj tagoj por trovi solvon. Mi studis multajn forumojn kaj diversajn manlibrojn sen kiuj mia elsendo simple ne funkcius. Kaj nun, kiam la petolo estas sukcesa, mi sentas la bezonon dividi mian solvon. Jen kiel ĉi tiu artikolo aperis.

Resume, la fina solvo estis jena: VPS + ffmeg + bash-skripto. Sub la tranĉo, mi priskribas la paŝojn faritajn kaj parolas pri la malfacilaĵoj kiuj estis malkovritaj dum organizado de la elsendo.

Paŝo 1 - de kie venos la elsendo?

En la komenco, estis necese decidi de kie estos la elsendo kaj kie estos ĝia fonto. La unua afero, kiu venis al la menso, estis de via hejma komputilo. Kolektu filmetojn en ludliston kaj komencu ludi ilin en iu ajn videoludilo. Poste kaptu la ekranbildon kaj dissendu ĝin al Jutubo. Sed mi preskaŭ tuj malakceptis ĉi tiun opcion ĉar... Por efektivigi ĝin, vi devas teni vian hejman komputilon konstante ŝaltita, kio signifas bruon de malvarmigiloj eĉ nokte kaj pliigitan elektran konsumon (+100-150 kWh ĉiumonate). Kaj rezultas, ke vi ne povos uzi vian hejman komputilon dum la elsendo. ajna movo de la muso estos videbla en la elsendo.

Tiam mi komencis rigardi flanken nubaj servoj. Mi serĉis pretan servon, kie mi povus alŝuti miajn videojn aŭ, ekzemple, enmeti ligilojn al videoj de Jutubo kaj ĉio estus enpakita en unu senhaltan elsendon. Sed mi trovis nenion taŭgan. Eble mi ne bone serĉis. La sola afero, kiu konvenas al la funkcieco, estas restream.io, servo, kiu helpas elsendi samtempe al pluraj platformoj. Ili ŝajnas permesi al vi alŝuti viajn proprajn filmetojn. Sed ĉi tiu servo estis kreita por tute malsamaj celoj kaj ili atendas, ke la elsendo daŭros nur kelkajn horojn. Mi pensas, ke se per tiu ĉi servo eblus organizi daŭran elsendon, tiam ĝi pafis en dekojn, aŭ eĉ centojn da dolaroj monate. Sed mi ankoraŭ volis organizi la elsendon aŭ senpage aŭ kun minimuma financa investo.

Evidentiĝis, ke por la elsendo necesas aŭ aparta aparato aŭ eĉ aparta komputilo. Mi pensis pri io kiel Raspberri Pi. Kaj kio? Li ne havas malvarmigilon. Mi registris la videon sur poŝmemoro, enŝovis la Ethernet-kablon kaj lasis ĝin kuŝi ie en izolita loko kaj dissendis ĝin. Opcio. Sed mi havis nek la estraron mem nek sperton pri laborado kun ĝi, do ankaŭ mi rifuzis ĉi tiun opcion.

Kiel rezulto, mi renkontis certan diskuton kie ili diskutis la kreadon propra servilo elsendoj. Ĝi ne estis ĝuste tio, kion mi serĉis, sed mi ricevis la ĉefan ideon - vi povas uzi servilon! En tiu diskuto, oni sugestis uzi kombinaĵon de VPS + nginx + OBS. Evidentiĝis, ke ĉi tiu kombinaĵo ankaŭ povus konveni al mi. La sola afero, kiu konfuzis min, estis ke mi neniam administris servilon kaj ŝajnis al mi, ke havi mian propran dediĉitan servilon estas konfuza kaj multekosta. Mi decidis ekscii kiom kostos lui servilon kun minimuma agordo kaj estis agrable surprizita.

Dissendu viajn videojn sur Jutubo XNUMX/XNUMX

Prezoj estas indikitaj en belorusaj rubloj kaj ĉi tiuj estas nur paneroj. Por kompreni, 8 belorusaj rubloj estas ĉirkaŭ 3.5 dolaroj aŭ 240 rusaj rubloj. Dum unu monato de uzado de plena komputilo, kiu estas ŝaltita 24/7 kaj havas rapidan interretan aliron. Ial, ĉi tiu malkovro fariĝis tre ĝoja por mi kaj dum kelkaj tagoj mi promenis terure feliĉa, kiel infano, kiu malkovris kosmajn raketojn :)

Cetere, mi profitis la oferton de la unua retejo, kiun Google donis al mi por la demando "VPS-luo". Eble ekzistas eĉ pli da buĝetaj solvoj, sed ĉi tiu prezo konvenis al mi kaj mi ne rigardis plu.

Kreante servilon, vi povas elekti la operaciumon sub kiu ĝi funkcios. Vi povas organizi elsendon en iu ajn el la listigitaj sistemoj kaj fari elekton laŭ viaj preferoj kaj financaj kapabloj (por servilo kun Vindozo ili petas aldonan kotizon). Mi elektis CentOS. Simple ĉar mi havis malmulte da sperto pri ĝi antaŭe.

Dissendu viajn videojn sur Jutubo XNUMX/XNUMX

Paŝo 2 - agordo de servilo

La unua afero, kiun vi bezonas post kreado de servilo, estas konekti al ĝi per SSH. Komence mi uzis PuTTy, sed poste mi komencis uzi la Secure Shell App, kiu funkcias en Google Chrome. Ĝi montriĝis pli oportuna por mi.

Poste mi ŝanĝis la gastigan nomon, agordis tempan sinkronigon en la servilo, ĝisdatigis la sistemon, tuŝis iptables... kaj faris amason da aliaj aferoj, sed ne ĉar ĝi estis necesa. Mi nur interesiĝis pri agordo de la servilo kaj ĝi funkciis por mi. Mi amas ĝin kiam ĝi funkcias :)

Jen la paŝoj, kiujn vi devas fari:

  1. Konektu la deponejon de EPEL.
  2. Agordu FTP-servilon (mi elektis vsftp).
  3. Instalu ffmpeg.

Mi ne donos la ordonojn detale; ĉi tiuj instrukcioj estas sufiĉe koncipaj por transdoni la ĝeneralan agadplanon. Se vi havas malfacilaĵojn kun iu ajn el la paŝoj, ili povas esti rapide solvitaj per serĉo-demando kiel "CentOS konekti EPEL" aŭ "CentOS instali FTP-servilon". Kaj sur la unuaj ligiloj vi povas trovi detalajn paŝon post paŝo instrukciojn.

Do, kiel mi skribis pli frue, mi bezonis kombinaĵon de VPS + nginx + OBS. VPS - preta. Sed demandoj ekestis pri aliaj punktoj. OBS estas elsenda programo, Open Broadcaster Software. Kaj ĝi funkcias nur kun riveretoj t.e. ekzemple, ĝi prenas bildon de retkamerao kaj elsendas ĝin. Aŭ ekranregistrado. Aŭ jam daŭra elsendo estas redirektita al alia retejo. Sed mi ne havas rivereton, mi havas nur aron da videodosieroj, kiujn oni devas transformi en rivereton.

Mi komencis fosi en ĉi tiu direkto kaj renkontis ffmpeg. FFmpeg estas aro de senpagaj kaj malfermfontaj bibliotekoj, kiuj permesas vin registri, konverti kaj flui ciferecan audion kaj videon en diversaj formatoj.

Kaj mi estis tre surprizita kiom multe povas fari ffmpeg. Se vi volas, ĝi ĉerpos la sonon de la video. Se vi volas, ĝi tranĉos fragmenton de la video sen rekodigo. Se vi volas, ĝi konvertiĝos de unu formato al alia. Kaj multe, multe pli. Ĝis la punkto, ke vi povas specifi dosieron al ĝi, ĝi konvertos ĝin en rivereton kaj transdonos ĝin al Jutubo mem. Jen ĝi, la ĉeno estas kunmetita. Restas nur fini la nuancojn.

Paŝo 3 - elsenda aranĝo

Ni kreas elsendon en Jutubo. En ĉi tiu etapo ni bezonas nur la ligilon kaj la elsendan ŝlosilon. En la suba ekrankopio ili estas elstarigitaj ruĝe.

Dissendu viajn videojn sur Jutubo XNUMX/XNUMX

plia alŝutu videodosierojn al la servilo, kiun ni planas elsendi. Fakte, FTP estas nur necesa por ĉi tiu etapo. Se vi havas alian oportunan manieron alŝuti dosierojn al la servilo, tiam vi ne devas agordi FTP-servilon.

Ni transdonas la fluon al Jutubo. Por komenci dissendi, vi devas ruli ffmpeg kun pluraj atributoj. Jen kiel aspektas la plej mallonga komando, kiun mi ricevis:

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

Malkodado de atributoj-re – indikas, ke la dosiero devas esti konvertita al rivereto.

-i – indikas, kiun dosieron oni ludu. Gravas, ke la komando estas lanĉita de la sama dosierujo, kie troviĝas la videodosiero mem. Alie, vi devus specifi absolutan ligon al la dosiero, kiel /usr/media/lecture1.mp4.

-f – fiksas la eligdosierformaton. En mia kazo, rezultas ke ffmpeg konvertas mian dosieron de mp4 al flv sur la flugo.

Kaj fine ni indikas la datumojn, kiujn ni prenis de Jutubo, en la paĝo pri elsendaj agordoj, t.e. la adreson, al kiu vi devas transdoni datumojn, kaj la elsendan ŝlosilon, por ke la elsendo montriĝu specife sur via kanalo.

Se vi faris ĉion ĝuste, tiam post rulado de ĉi tiu komando, Jutubo vidos la transdonitan rivereton. Por komenci la elsendon, vi nur bezonas alklaki la butonon "Komenci elsendon" en Jutubo mem.

Paŝo 4 - aldonu aŭtonomion

Gratulon! Nun vi scias kiel komenci dissendi de videodosiero. Sed ĉi tio ne sufiĉas por XNUMX/XNUMX elsendo. Gravas, ke post kiam la unua video finiĝis, la sekva tuj komenciĝas, kaj kiam ĉiuj videoj estas montritaj, reproduktado komenciĝas.

Mi elpensis la jenan opcion: krei .sh-dosieron en kiu mi skribis komandon por ĉiu videodosiero kaj fine indikis komandon por ruli la saman skripton denove. La rezulto estas rekursio kiel ĉi tio:

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

Kaj, jes, ĝi funkciis. Kontenta pri mi mem, mi lanĉis provan elsendon kaj enlitiĝis.

Matene atendis min malagrabla surprizo. Montriĝis, ke la elsendo daŭris nur kelkajn minutojn kaj preskaŭ tuj finiĝis kiam mi malŝaltis mian komputilon. La esploro montris, ke ordonoj lanĉitaj tiamaniere estas ekzekutitaj dum la uzanto estas ensalutinta al la servilo. Tuj kiam mi malkonektis, la komandoj, kiujn mi funkciis, estis interrompitaj. Por eviti ke tio okazu, sufiĉas antaŭ la teamo bash aldonu la komandon nohup. Ĉi tio permesos al la kuranta procezo funkcii sendepende de via ĉeesto.

La fina minimuma versio de la skripto aspektas jene:

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 $

Kie start.sh estas la dosiero en kiu ĉi tiu skripto estas skribita. Kaj ĉi tiu dosiero devas troviĝi en la sama dosierujo kiel la videodosieroj.

Aldonante dolarsignon ĉe la fino permesas la procezon funkcii en la fono, por ke vi povu daŭrigi uzi la konzolon sen interrompi la elsendon.

La gratifikoj inkludis la sekvajn bonaĵojn:

  • Vi povas mane ŝanĝi dosierludadon. Por fari tion, vi devas "mortigi" la nun funkciantan ffmpeg-procezon. Post tio, reproduktado de la sekva dosiero el la listo aŭtomate komenciĝos.
  • Novaj filmetoj povas esti aldonitaj al la elsendo sen ĉesigi la elsendon. Nur alŝutu la videon al la servilo, aldonu komandon por ruli ĉi tiun dosieron en la skripto kaj konservu ĝin. Tio estas ĉio. En la sekva raŭndo de reprodukto, la nova dosiero estos elsendo kune kun la malnovaj dosieroj.

Paŝo 5 - personecigi ffmpeg

Principe ni povus halti tie. Sed mi volis fari la elsendon iom pli amika por spektantoj.

Ni diru, ke homo iris al la elsendo, komencis spekti, ŝatis ĝin kaj volis spekti ĉi tiun prelegon ekde la komenco, sed la elsendo ne permesas rebobenadon. Por spekti prelegon dekomence, persono devos iri al mia retejo kaj ricevi registradon de la interesa prelego. Kiel vi povas diri, kiu prelego interesas lin? Jam estas 16 prelegoj en la retejo kaj estas nur pli da ili ĉiusemajne. Mi pensas, ke eĉ mi, kiu filmis kaj redaktis ĉiujn ĉi prelegojn, ne povos determini el hazarda fragmento kiu prelego temas. Tial necesas, ke ĉiu prelego estu iel indikita.

La opcio aldoni subtitolojn al la fontaj videodosieroj en la redakta programo ne konvenis al mi. Necesis certigi, ke la originalaj dosieroj estas uzataj. Por ke subteni la elsendon necesas de mi kiel eble plej malgrandaj korpaj movoj.

Montriĝis, ke ankaŭ ffmpeg povus helpi min pri tio. Ĝi havas specialan atributon -vf, kiu permesas tekston esti metita super video. Por aldoni tekston al video, vi devas aldoni la sekvan fragmenton al la komando:

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

Klarigo de parametrojfontfile= – ligo al la tipardosiero. Sen ĉi tio, la bildoteksto ne estos aldonita al la video. La plej facila maniero estas meti la tipardosieron en la sama dosierujo kiel la video. Aŭ vi devos specifi la plenan vojon al la dosiero.

text= – fakte, la teksto mem, kiu devas esti metita super la video.

fontsize= - tiparo grandeco en pikseloj.

fontcolor= - tiparo koloro.

borderw= – la dikeco de la konturo ĉirkaŭ la teksto en pikseloj (mi havas blankan tekston kun nigra konturo 1 pikselo dika).

bordercolor= – konturokoloro.

x= и y= – tekstaj koordinatoj. Punkto 0;0 situas en la supra maldekstra angulo. Miaj koordinatoj estas elektitaj tiel, ke la teksto estas metita en la malsupran maldekstran angulon kun video-rezolucio de 1280x720 pikseloj.

Ĝi aspektas jene:

Dissendu viajn videojn sur Jutubo XNUMX/XNUMX

Paŝo 6 - determini la kvaliton de la elsendo

Jen, la elsendo estas preta. FFmpeg elsendas, dosieroj ludas, mia ĉeesto ne estas bezonata por elsendado. Eĉ ĉiu prelego estas subskribita. Aspektu, ke tio estas.

Sed unu plia nuanco ekaperis - mi elektis la minimuman servilan agordon kaj ĝi ne altigis la elsendon. Servila agordo: 1 kerno (kiel 2.2 GHz), 1 gigabajto da RAM, 25 GB SSD. Estis sufiĉe da RAM, sed la procesoro estis preskaŭ tute ŝarĝita je 100% (kaj foje eĉ 102-103% :) Ĉi tio kaŭzis la elsendon frostiĝi ĉiujn kelkajn sekundojn.Ne agrable.

Vi simple povus preni pli multekostan agordon kun du kernoj, feliĉe, kun nubaj teknologioj, ŝanĝi la servilan agordon okazas premante kelkajn butonojn. Sed mi volis konveni en la minimuma agorda kapacito. Mi komencis studi la ffmpeg-dokumentadon kaj jes, ekzistas ankaŭ agordoj tie, kiuj ebligas al vi reguligi la ŝarĝon sur la sistemo.

Alta bildkvalito povas esti atingita en du manieroj: aŭ alta CPU-ŝarĝo aŭ alta eksiĝinta trafiko. Rezultas, ke ju pli da ŝarĝo la procesoro povas preni, des malpli da kanala bendolarĝo bezonos. Aŭ vi ne povas tro ŝarĝi la procesoron, sed tiam vi bezonos larĝan kanalon kun granda trafika kapspaco. Se estas limigoj pri kaj la procesoro kaj la grandeco de la eliranta kanalo/trafiko, tiam vi devos redukti la kvaliton de la bildo por ke la elsendo iras glate.

Mia servilo havas aliron al larĝa kanalo 10 Mbit/s. Ĉi tiu larĝo pravas. Sed estas trafiklimo - 1 TB monate. Tial, por plenumi trafiklimigojn, mia elira fluo ne superu ~300 KB sekundo t.e. La bitrapideco de la elira fluo devus esti ne pli ol 2,5 Mbit/s. Jutubo, cetere, rekomendas dissendi je ĉi tiu bitrapideco.

Por reguligi la ŝarĝon sur la sistemo, ffmpeg uzas malsamajn alirojn. Bone skribita pri ĉi tio tie. Mi finis uzi du atributojn: -crf и -preset.

Konstanta Rapida Faktoro (CRF) - ĉi tio estas koeficiento dank' al kiu vi povas ĝustigi la kvaliton de la bildo. CRF povas havi valorojn de 0 ĝis 51, kie 0 estas la kvalito de la fontdosiero, 51 estas la plej malbona ebla kvalito. Oni rekomendas uzi valorojn de 17 ĝis 28, la defaŭlta estas 23. Kun koeficiento de 17, la video estos vide identa al la originalo, sed teknike ĝi ne estos la sama. La dokumentaro ankaŭ deklaras ke la grandeco de la fina video, depende de la specifita CRF, ŝanĝiĝas eksponente, t.e. pliigi la koeficienton je 6 poentoj duobligos la bitratecon de la eliranta video.

Se vi uzas CRF, vi povas elekti la "pezon" de la eliranta bildo, poste uzante antaŭdifiniloj (-malpostagordita) vi povas determini kiom peze la procesoro estos ŝarĝita. Ĉi tiu atributo havas la sekvajn parametrojn:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - defaŭlta valoro
  • slow
  • slower
  • veryslow

Ju pli "rapide" la parametro estas specifita, des pli alta estos la ŝarĝo sur la procesoro.

Mi unue elektis antaŭgordilon, kiu estis esence tro malmola por mia procesoro, kaj poste pli fajne elektis la ŝarĝon per CRF. En mia kazo, la antaŭdiro funkciis fast, kaj por crf mi decidis je la valoro 24.

konkludo

Tio estas ĉio. La fina komando por komenci la elsendon estis jena:

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

Restas nur du nepriskribitaj punktoj ĉi tie:

1) -c:v libx264 – specifi specifan kodekon por labori kun la fontdosiero.
2) -g 3 – eksplicita indiko de la nombro da ŝlosilaj kadroj. En ĉi tiu kazo, estas precize, ke ĉiu tria kadro estu ŝlosila kadro. La norma valoro estas aŭ 5 aŭ 8, sed Jutubo ĵuras kaj petas almenaŭ 3.

Vi povas vidi kian kvaliton montriĝis la elsendo tie.

La ŝarĝo sur la servilo estis jena:

Dissendu viajn videojn sur Jutubo XNUMX/XNUMX

Dissendu viajn videojn sur Jutubo XNUMX/XNUMX

Surbaze de la monitoraj datumoj, estas klare, ke la procesoro-ŝarĝo varias de 70% ĝis 95% kaj dum la semajno la elsendo neniam atingis 100%. Ĉi tio signifas, ke kun ĉi tiuj agordoj la procesoro sufiĉas.

Ŝargante la diskon, mi povas diri, ke ĝi preskaŭ ne estas ŝargita kaj regula HDD devus sufiĉi por elsendado.

Sed la kvanto de elira trafiko maltrankviligas min. Montriĝas, ke mia elira fluo varias de 450 ĝis 650 KB sekundo. Post unu monato ĉi tio estos ĉirkaŭ 1,8 terabajtoj. Vi eble devos aĉeti plian trafikon aŭ ŝanĝi al agordo kun du kernoj ĉar... Mi ne ŝatus redukti la kvaliton de la bildo.

***

Kiel rezulto, mi diros, ke starigi tian elsendon de nulo daŭras ĉirkaŭ 1-2 horojn. Plie, alŝuti la videon al la servilo prenos la plej grandan parton de la tempo.

La lanĉo de tia elsendo ne pravigis sin kiel merkatika ilo. Eble, se ni pliigos vidojn por ke YouTube-algoritmoj kaptu ĉi tiun elsendon kaj komencu aktive montri ĝin en rekomendoj, tiam io funkcios. Miaokaze, en 16 tagoj da daŭra elsendo ĝi estis spektita 58 fojojn.

Tio estas en ordo. La elsendo harmonie konvenas al la ĉefpaĝo de mia retejo. Tio donis al mi la ŝancon rapide formi mian propran opinion pri la preleganto kaj la prelegoj mem.

Kaj unu momenton. Gravas, ke la elsendo ne malobservas ies kopirajton, alie ĝi estos blokita. Mi estas trankvila pri mia elsendo ĉar... Mi specife elektis muzikenigaĵojn kun libera uzo, kaj la aŭtoro de la enhavo sidas ĉe proksima komputilo kaj tute ne kontraŭas ke mi uzu ŝian enhavon :)

Sed se vi havas radion ludantan en la fono ie en via elsendo, aŭ vi uzis vian plej ŝatatan trakon dum redaktado, aŭ prenis videosekvencon de populara muzikfilmeto, televidserio aŭ filmo, tiam via elsendo estas en risko. Ankaŭ gravas, ke la elsendo portas almenaŭ minimuman semantikan ŝarĝon, alie ĝi povas esti blokita kiel spamo.

***

Tion mi havas. Mi esperas, ke ĉi tiu manlibro servos al iu bone. Nu, se vi havas ion por aldoni, skribu, mi volonte legos la aldonojn kaj klarigojn al la artikolo.

fonto: www.habr.com

Aldoni komenton