Transmetoni videot tuaja në YouTube XNUMX/XNUMX

Kohët e fundit, si hobi, kam filmuar leksionet e një psikologu që njoh. Unë redaktoj pamjet dhe i publikoj në faqen time të internetit. Një muaj më parë, më lindi ideja të organizoja një transmetim 24/7 të këtyre leksioneve në YouTube. Një lloj "kanali televiziv" tematik kushtuar rritjes personale.

Unë di të bëj një transmetim të rregullt. Por si ta bëjmë atë në mënyrë që të jetë një transmetim i skedarëve video? Që të funksionojë 24/7, të jetë fleksibël, sa më autonom dhe në të njëjtën kohë të mos varet në asnjë mënyrë nga kompjuteri im i shtëpisë. Kjo është ajo që duhej të zbuloja.

Transmetoni videot tuaja në YouTube XNUMX/XNUMX

U deshën disa ditë për të gjetur një zgjidhje. Kam studiuar shumë forume dhe manuale të ndryshme pa të cilat transmetimi im thjesht nuk do të kishte funksionuar. Dhe tani që shakaja është një sukses, ndjej nevojën të ndaj zgjidhjen time. Kështu u shfaq ky artikull.

Shkurtimisht, zgjidhja përfundimtare ishte si më poshtë: VPS + ffmeg + skript bash. Nën prerje, unë përshkruaj hapat e ndërmarrë dhe flas për grackat që u zbuluan gjatë organizimit të transmetimit.

Hapi 1 - nga do të vijë transmetimi?

Që në fillim ishte e nevojshme të vendosej se nga do të ishte transmetimi dhe ku do të ishte burimi i tij. Gjëja e parë që më erdhi në mendje ishte nga kompjuteri juaj i shtëpisë. Mblidhni videot në një listë dëgjimi dhe filloni t'i luani ato në çdo luajtës video. Më pas kapni imazhin e ekranit dhe transmetojeni në YouTube. Por unë pothuajse menjëherë e refuzova këtë opsion sepse ... Për ta zbatuar atë, duhet ta mbani kompjuterin tuaj të shtëpisë vazhdimisht ndezur, që do të thotë zhurmë nga ftohësit edhe gjatë natës dhe rritje të konsumit të energjisë elektrike (+100-150 kWh çdo muaj). Dhe rezulton se nuk do të jeni në gjendje të përdorni kompjuterin tuaj në shtëpi gjatë transmetimit. çdo lëvizje e miut do të jetë e dukshme në transmetim.

Pastaj fillova të shikoja anash shërbimet cloud. Po kërkoja një shërbim të gatshëm ku të mund të ngarkoja videot e mia ose, për shembull, të fusja lidhje me video nga YouTube dhe të gjitha do të paketoheshin në një transmetim pa ndalesë. Por nuk gjeta asgjë të përshtatshme. Ndoshta nuk e kam kërkuar mirë. E vetmja gjë që i përshtatet funksionalitetit është restream.io, një shërbim që ndihmon transmetimin në të njëjtën kohë në disa platforma. Ata duket se ju lejojnë të ngarkoni videot tuaja. Por ky shërbim është krijuar për qëllime krejtësisht të ndryshme dhe ata presin që transmetimi të zgjasë vetëm disa orë. Mendoj se nëse nëpërmjet këtij shërbimi do të ishte e mundur të organizohej një transmetim XNUMX orëve, atëherë ai do të qëllonte në dhjetëra, madje edhe qindra dollarë në muaj. Por gjithsesi doja ta organizoja transmetimin ose falas ose me investime minimale financiare.

U bë e qartë se për transmetim ishte e nevojshme ose pajisje të veçantë apo edhe një kompjuter të veçantë. Po mendoja për diçka si Raspberri Pi. Dhe ç'farë? Ai nuk ka ftohës. E regjistrova videon në një flash drive, futa kabllon Ethernet dhe e lashë të shtrihej diku në një vend të izoluar dhe e transmetova. Opsioni. Por unë nuk kisha as vetë bordin dhe as përvojë në të punuar me të, kështu që edhe unë e refuzova këtë opsion.

Si rezultat, hasa në një diskutim të caktuar ku ata diskutuan krijimin serverin e vet transmetimet. Nuk ishte saktësisht ajo që kërkoja, por mora idenë kryesore - mund të përdorni një server! Në atë diskutim, u sugjerua të përdoret një kombinim i VPS + nginx + OBS. U bë e qartë se ky kombinim mund të më përshtatet edhe mua. E vetmja gjë që më ngatërroi ishte se nuk kisha administruar kurrë një server dhe më dukej se të kisha serverin tim të dedikuar ishte konfuze dhe e shtrenjtë. Vendosa të zbuloj se sa do të kushtojë të marrësh me qira një server me një konfigurim minimal dhe u befasova këndshëm.

Transmetoni videot tuaja në YouTube XNUMX/XNUMX

Çmimet tregohen në rubla bjelloruse dhe këto janë vetëm thërrime. Për të kuptuar, 8 rubla bjelloruse janë rreth 3.5 dollarë ose 240 rubla ruse. Për një muaj përdorimi i një kompjuteri të plotë që është i ndezur 24/7 dhe ka akses të shpejtë në internet. Për disa arsye, ky zbulim u bë shumë i gëzueshëm për mua dhe për disa ditë eca tmerrësisht i lumtur, si një fëmijë që zbuloi raketa hapësinore :)

Meqë ra fjala, përfitova nga oferta e faqes së parë që më dha Google për pyetjen “VPS rental”. Ndoshta ka edhe më shumë zgjidhje buxhetore, por ky çmim më përshtatej dhe nuk kërkova më tej.

Kur krijoni një server, mund të zgjidhni sistemin operativ nën të cilin do të funksionojë. Mund të organizoni një transmetim në cilindo nga sistemet e listuara dhe të bëni një zgjedhje bazuar në preferencat tuaja dhe aftësitë financiare (për një server me Windows ata kërkojnë një tarifë shtesë). Unë zgjodha CentOS. Thjesht sepse kisha pak përvojë me të më parë.

Transmetoni videot tuaja në YouTube XNUMX/XNUMX

Hapi 2 - konfigurimi i serverit

Gjëja e parë që ju nevojitet pas krijimit të një serveri është të lidheni me të nëpërmjet SSH. Në fillim përdora PuTTy, por më pas fillova të përdor aplikacionin Secure Shell, i cili funksionon në Google Chrome. Doli të ishte më i përshtatshëm për mua.

Pastaj ndryshova emrin e hostit, vendosa sinkronizimin e kohës në server, përditësova sistemin, ndërhyra me iptables... dhe bëra një mori gjërash të tjera, por jo sepse ishte e nevojshme. Unë thjesht isha i interesuar të konfiguroja serverin dhe funksionoi për mua. Më pëlqen kur funksionon :)

Këtu janë hapat që duhet të ndërmerrni:

  1. Lidhni depon e EPEL.
  2. Vendosni një server FTP (zgjodha vsftp).
  3. Instaloni ffmpeg.

Unë nuk do t'i jap komandat në detaje; këto udhëzime janë më tepër konceptuale për të përcjellë planin e përgjithshëm të veprimit. Nëse keni ndonjë vështirësi me ndonjë nga hapat, ato mund të zgjidhen shpejt duke përdorur një pyetje të motorit të kërkimit si "CentOS Connect EPEL" ose "CentOS install FTP server". Dhe në lidhjet e para mund të gjeni udhëzime të hollësishme hap pas hapi.

Pra, siç shkrova më herët, më duhej një kombinim i VPS + nginx + OBS. VPS – gati. Por filluan të lindin pyetje për pika të tjera. OBS është një program transmetimi, Open Broadcaster Software. Dhe funksionon vetëm me prurje d.m.th. për shembull, merr një imazh nga një webcam dhe e transmeton atë. Ose regjistrimi i ekranit. Ose një transmetim tashmë në vazhdim ridrejtohet në një faqe tjetër. Por unë nuk kam një transmetim, kam vetëm një grup skedarësh video që duhet të shndërrohen në një transmetim.

Fillova të gërmoj në këtë drejtim dhe hasa në ffmpeg. FFmpeg është një grup bibliotekash falas dhe me burim të hapur që ju lejojnë të regjistroni, konvertoni dhe transmetoni audio dhe video dixhitale në një sërë formatesh.

Dhe u habita shumë se sa shumë mund të bëjë ffmpeg. Nëse dëshironi, ai do të nxjerrë tingullin nga video. Nëse dëshironi, ai do të presë një fragment të videos pa rikodim. Nëse dëshironi, ai do të konvertohet nga një format në tjetrin. Dhe shumë, shumë më tepër. Deri në atë pikë sa të mund të specifikoni një skedar në të, ai do ta shndërrojë atë në një transmetim dhe do ta transmetojë atë në vetë YouTube. Kjo është ajo, zinxhiri është mbledhur. Mbetet vetëm për të finalizuar nuancat.

Hapi 3 - konfigurimi i transmetimit

Ne krijojmë një transmetim në YouTube. Në këtë fazë na duhet vetëm lidhja dhe çelësi i transmetimit. Në pamjen e mëposhtme të ekranit ato janë të theksuara me të kuqe.

Transmetoni videot tuaja në YouTube XNUMX/XNUMX

Më tej ngarkoni skedarë video në server, që ne planifikojmë të transmetojmë. Në fakt, FTP nevojitet vetëm për këtë fazë. Nëse keni një mënyrë tjetër të përshtatshme për të ngarkuar skedarë në server, atëherë nuk keni nevojë të konfiguroni një server FTP.

Ne e transmetojmë transmetimin në YouTube. Për të filluar transmetimin, duhet të ekzekutoni ffmpeg me disa atribute. Ja si duket komanda më e shkurtër që kam marrë:

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

Dekodimi i atributeve-re – tregon se skedari duhet të konvertohet në një transmetim.

-i – tregon se cili skedar duhet të luhet. Është e rëndësishme që komanda të niset nga e njëjta direktori ku ndodhet vetë skedari video. Përndryshe, duhet të specifikoni një lidhje absolute me skedarin, si p.sh /usr/media/lecture1.mp4.

-f – vendos formatin e skedarit të daljes. Në rastin tim, rezulton se ffmpeg konverton skedarin tim nga mp4 në flv në fluturim.

Dhe në fund tregojmë të dhënat që kemi marrë nga YouTube në faqen e cilësimeve të transmetimit, d.m.th. adresën në të cilën ju duhet të transferoni të dhënat dhe çelësin e transmetimit, në mënyrë që transmetimi të shfaqet posaçërisht në kanalin tuaj.

Nëse keni bërë gjithçka siç duhet, atëherë pasi të ekzekutoni këtë komandë, YouTube do të shohë transmetimin e transmetuar. Për të nisur transmetimin, thjesht duhet të klikoni butonin "Fillimi i transmetimit" në vetë YouTube.

Hapi 4 - shtoni autonominë

urime! Tani e dini se si të filloni transmetimin nga një skedar video. Por kjo nuk mjafton për transmetim XNUMX/XNUMX. Është e rëndësishme që pasi të ketë përfunduar riprodhimi i videos së parë, të fillojë menjëherë tjetra dhe kur të shfaqen të gjitha videot, riprodhimi të fillojë përsëri.

Dola me opsionin e mëposhtëm: krijoni një skedar .sh në të cilin shkrova një komandë për çdo skedar video dhe në fund tregova një komandë për të ekzekutuar përsëri të njëjtin skenar. Rezultati është një rekursion si ky:

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

Dhe, po, funksionoi. I kënaqur me veten, nisa një transmetim provë dhe shkova në shtrat.

Në mëngjes më priste një surprizë e pakëndshme. Doli që transmetimi zgjati vetëm disa minuta dhe përfundoi pothuajse menjëherë pasi fika kompjuterin tim. Hetimi tregoi se komandat e lëshuara në këtë mënyrë ekzekutohen ndërsa përdoruesi është i kyçur në server. Sapo u shkëputa, komandat që drejtoja u ndërprenë. Që kjo të mos ndodhë, mjafton para skuadrës bash shtoni komandën nohup. Kjo do të lejojë që procesi i ekzekutimit të funksionojë pavarësisht nga prania juaj.

Versioni përfundimtar minimal i skenarit duket si ky:

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 $

Ku start.sh është skedari në të cilin është shkruar ky skript. Dhe ky skedar duhet të jetë i vendosur në të njëjtën direktori si skedarët video.

Shtimi i një shenje dollari në fund lejon që procesi të funksionojë në sfond, në mënyrë që të mund të vazhdoni të përdorni konsolën pa ndërprerë transmetimin.

Bonuset përfshinin të mirat e mëposhtme:

  • Mund ta ndërroni manualisht riprodhimin e skedarit. Për ta bërë këtë, ju duhet të "vrisni" procesin ffmpeg që po funksionon aktualisht. Pas kësaj, riprodhimi i skedarit tjetër nga lista do të fillojë automatikisht.
  • Videot e reja mund të shtohen në transmetim pa ndërprerë transmetimin. Thjesht ngarkoni videon në server, shtoni një komandë për të ekzekutuar këtë skedar në skript dhe ruani atë. Kjo eshte e gjitha. Në raundin tjetër të riprodhimit, skedari i ri do të transmetohet së bashku me skedarët e vjetër.

Hapi 5 – personalizoni ffmpeg

Në parim, ne mund të kishim ndalur atje. Por doja ta bëja transmetimin pak më miqësor për shikuesit.

Le të themi se një person shkoi në transmetim, filloi të shikonte, i pëlqeu dhe donte ta shikonte këtë leksion që në fillim, por transmetimi nuk lejon rikthimin. Për të parë një leksion nga fillimi, një person do të duhet të shkojë në faqen time të internetit dhe të marrë një regjistrim të leksionit me interes. Si mund ta dalloni se cili leksion i intereson atij? Ka tashmë 16 leksione në faqe dhe ka vetëm më shumë prej tyre çdo javë. Mendoj se edhe unë që kam filmuar dhe montuar të gjitha këto leksione, nuk do të mund të përcaktoj nga një fragment i rastësishëm se për cilin ligjëratë bëhet fjalë. Prandaj, është e nevojshme që çdo leksion të jetë disi i caktuar.

Opsioni për të shtuar titrat në skedarët e videove burimore në programin e redaktimit nuk më përshtatej. Ishte e nevojshme të sigurohej që skedarët origjinalë të ishin përdorur. Kështu që mbështetja e transmetimit kërkon sa më pak lëvizje të trupit nga unë.

Doli që ffmpeg mund të më ndihmonte edhe me këtë. Ka një atribut të veçantë -vf, i cili lejon që teksti të vendoset mbi video. Për të shtuar tekst në një video, duhet të shtoni fragmentin e mëposhtëm në komandën:

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

Shpjegimi i parametravefontfile= – lidhje me skedarin e shkronjave. Pa këtë, titulli nuk do të shtohet në video. Mënyra më e lehtë është të vendosni skedarin e shkronjave në të njëjtën dosje me videon. Ose do t'ju duhet të specifikoni rrugën e plotë të skedarit.

text= – në fakt, vetë teksti që duhet të vendoset në krye të videos.

fontsize= - madhësia e shkronjave në pixel.

fontcolor= – ngjyra e shkronjave.

borderw= – trashësia e skicës rreth tekstit në piksel (kam tekst të bardhë me një skicë të zezë 1 piksel të trashë).

bordercolor= – ngjyra e konturit.

x= и y= – koordinatat e tekstit. Pika 0;0 ndodhet në këndin e sipërm të majtë. Koordinatat e mia janë zgjedhur në atë mënyrë që teksti të vendoset në këndin e poshtëm të majtë me një rezolucion video prej 1280x720 piksele.

Duket kështu:

Transmetoni videot tuaja në YouTube XNUMX/XNUMX

Hapi 6 - përcaktoni cilësinë e transmetimit

Kaq, transmetimi është gati. Transmetimet FFmpeg, skedarët luhen, prania ime nuk është e nevojshme për transmetim. Madje çdo leksion është i firmosur. Dukej se kaq është.

Por u shfaq një nuancë tjetër - zgjodha konfigurimin minimal të serverit dhe ai nuk e tërhoqi transmetimin. Konfigurimi i serverit: 1 bërthamë (si 2.2 GHz), 1 gigabajt RAM, 25 GB SSD. Kishte mjaftueshëm RAM, por procesori ishte pothuajse plotësisht i ngarkuar në 100% (dhe ndonjëherë edhe 102-103% :) Kjo çoi në ngrirjen e transmetimit çdo disa sekonda. Jo bukur.

Ju thjesht mund të merrni një konfigurim më të shtrenjtë me dy bërthama, për fat të mirë, me teknologjitë cloud, ndryshimi i konfigurimit të serverit ndodh duke shtypur disa butona. Por doja të përshtatesha në kapacitetin minimal të konfigurimit. Fillova të studioj dokumentacionin ffmpeg dhe po, ka edhe cilësime atje që ju lejojnë të rregulloni ngarkesën në sistem.

Cilësia e lartë e imazhit mund të arrihet në dy mënyra: ose ngarkesë e lartë CPU ose trafik i lartë në dalje. Rezulton se sa më shumë ngarkesë të marrë procesori, aq më pak gjerësi bande do të nevojitet. Ose nuk mund ta ngarkoni shumë procesorin, por atëherë do t'ju duhet një kanal i gjerë me një hapësirë ​​të madhe trafiku. Nëse ka kufizime si në procesor ashtu edhe në madhësinë e kanalit/trafikut në dalje, atëherë do t'ju duhet të zvogëloni cilësinë e figurës në mënyrë që transmetimi të shkojë pa probleme.

Serveri im ka akses në një kanal të gjerë 10 Mbit/s. Kjo gjerësi është e drejtë. Por ka një kufi trafiku - 1 TB në muaj. Prandaj, për të përmbushur kufizimet e trafikut, fluksi im në dalje nuk duhet të kalojë ~ 300 KB në sekondë d.m.th. Shpejtësia e biteve të rrymës dalëse nuk duhet të jetë më shumë se 2,5 Mbit/s. YouTube, meqë ra fjala, rekomandon transmetimin me këtë shpejtësi bit.

Për të rregulluar ngarkesën në sistem, ffmpeg përdor qasje të ndryshme. E shkruar mirë për këtë këtu. Përfundova duke përdorur dy atribute: -crf и -preset.

Faktori i normës konstante (CRF) - ky është një koeficient falë të cilit mund të rregulloni cilësinë e figurës. CRF mund të ketë vlera nga 0 në 51, ku 0 është cilësia e skedarit burimor, 51 është cilësia më e keqe e mundshme. Rekomandohet përdorimi i vlerave nga 17 në 28, parazgjedhja është 23. Me një koeficient 17, videoja do të jetë vizualisht identike me origjinalin, por teknikisht nuk do të jetë e njëjtë. Në dokumentacion thuhet gjithashtu se madhësia e videos përfundimtare, në varësi të CRF-së së specifikuar, ndryshon në mënyrë eksponenciale, d.m.th. rritja e koeficientit me 6 pikë do të dyfishojë shpejtësinë e biteve të videos në dalje.

Nëse përdorni CRF, mund të zgjidhni "peshën" e figurës në dalje, më pas duke përdorur paravendosjet (-paravendosur) ju mund të përcaktoni se sa shumë do të ngarkohet procesori. Ky atribut ka parametrat e mëposhtëm:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium – vlera e paracaktuar
  • slow
  • slower
  • veryslow

Sa më "i shpejtë" të specifikohet parametri, aq më e lartë do të jetë ngarkesa në procesor.

Së pari zgjodha një paracaktim që ishte në thelb shumë i vështirë për procesorin tim, dhe më pas zgjodha më mirë ngarkesën duke përdorur CRF. Në rastin tim, paracaktimi funksionoi fast, dhe për crf u vendosa në vlerën 24.

Përfundim

Kjo eshte e gjitha. Komanda përfundimtare për fillimin e transmetimit ishte kjo:

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

Këtu kanë mbetur vetëm dy pika të papërshkruara:

1) -c:v libx264 – specifikimi i një kodiku specifik për të punuar me skedarin burimor.
2) -g 3 – tregues i qartë i numrit të kornizave kyçe. Në këtë rast, specifikohet se çdo kornizë e tretë duhet të jetë një kornizë kyçe. Vlera standarde është ose 5 ose 8, por YouTube betohet dhe kërkon të paktën 3.

Ju mund të shihni se çfarë cilësie doli të ishte transmetimi këtu.

Ngarkesa në server ishte si më poshtë:

Transmetoni videot tuaja në YouTube XNUMX/XNUMX

Transmetoni videot tuaja në YouTube XNUMX/XNUMX

Bazuar në të dhënat e monitorimit, është e qartë se ngarkesa e procesorit varion nga 70% në 95% dhe gjatë javës transmetimi nuk arriti kurrë në 100%. Kjo do të thotë se me këto cilësime procesori është i mjaftueshëm.

Duke ngarkuar diskun, mund të them që pothuajse nuk është i ngarkuar dhe një HDD i rregullt duhet të jetë i mjaftueshëm për transmetim.

Por sasia e trafikut në dalje më shqetëson. Rezulton se transmetimi im në dalje varion nga 450 në 650 KB për sekondë. Në një muaj kjo do të jetë rreth 1,8 terabajt. Mund t'ju duhet të blini trafik shtesë ose të kaloni në një konfigurim me dy bërthama sepse... Nuk do të doja të ulja cilësinë e figurës.

***

Si rezultat, unë do të them që vendosja e një transmetimi të tillë nga e para zgjat rreth 1-2 orë. Për më tepër, ngarkimi i videos në server do të marrë shumicën e kohës.

Nisja e një transmetimi të tillë nuk e justifikonte veten si një mjet marketingu. Ndoshta, nëse rrisim shikimet në mënyrë që algoritmet e YouTube të marrin këtë transmetim dhe të fillojnë ta shfaqin në mënyrë aktive në rekomandime, atëherë diçka do të funksiononte. Në rastin tim, në 16 ditë transmetim të vazhdueshëm është shikuar 58 herë.

Kjo është në rregull. Transmetimi përshtatet në mënyrë harmonike në faqen kryesore të faqes sime. Kjo më dha mundësinë të formoj shpejt mendimin tim për pedagogun dhe vetë leksionet.

Dhe një moment. Është e rëndësishme që transmetimi të mos cenojë të drejtat e autorit të askujt, përndryshe do të bllokohet. Jam i qetë për transmetimin tim sepse... Unë zgjodha posaçërisht insertet muzikore me përdorim falas, dhe autori i përmbajtjes ulet në një kompjuter aty pranë dhe nuk është aspak kundër që unë të përdor përmbajtjen e saj :)

Por nëse keni një radio që luan në sfond diku në transmetimin tuaj, ose keni përdorur këngën tuaj të preferuar gjatë redaktimit, ose keni marrë një sekuencë video nga një video muzikore, seri televizive ose film popullor, atëherë transmetimi juaj është në rrezik. Është gjithashtu e rëndësishme që transmetimi të ketë të paktën një ngarkesë minimale semantike, përndryshe mund të bllokohet si postë e padëshiruar.

***

Kaq kam. Shpresoj se ky manual do t'i shërbejë mirë dikujt. Epo, nëse keni diçka për të shtuar, shkruani, do të jem i lumtur të lexoj shtesat dhe sqarimet në artikull.

Burimi: www.habr.com

Shto një koment