Stream dine videoer XNUMX/XNUMX på YouTube

For nylig har jeg som hobby filmet foredrag af en psykologven. Jeg monterer optagelserne og offentliggør dem på min hjemmeside. For en måned siden fik jeg ideen om at arrangere en udsendelse døgnet rundt af disse foredrag på YouTube 24/7. En slags tematisk "tv-kanal" dedikeret til personlig vækst.

Jeg ved, hvordan man laver en normal udsendelse. Men hvordan gør man det, så det var en udsendelse af videofiler? Så den kører 24/7, er fleksibel, så autonom som muligt, og samtidig ikke er afhængig af min hjemmecomputer på nogen måde. Det var det, jeg skulle finde ud af.

Stream dine videoer XNUMX/XNUMX på YouTube

Det tog flere dage at finde en løsning. Jeg studerede mange fora og forskellige manualer, uden hvilke min udsendelse simpelthen ikke ville være sket. Og nu hvor pranken har virket, føler jeg et behov for at dele min løsning. Sådan opstod denne artikel.

Kort sagt er den endelige løsning som følger: VPS + ffmeg + bash script. Under klippet beskriver jeg de skridt, der er taget, og fortæller om de "fælder", der blev opdaget under tilrettelæggelsen af ​​udsendelsen.

Trin 1 - Hvor vil udsendelsen gå fra?

Allerede i begyndelsen var det nødvendigt at beslutte, hvor udsendelsen skulle komme fra, hvor dens kilde skulle være. Det allerførste, der kom til at tænke på - fra hjemmecomputer. Saml videoer i en afspilningsliste, og begynd at afspille dem i en hvilken som helst videoafspiller. Tag derefter billedet fra skærmen og udsend det til YouTube. Men jeg afviste næsten øjeblikkeligt denne mulighed. for at implementere det skal du have din hjemmecomputer tændt konstant, og det er støj fra kølere selv om natten og øget elforbrug (+ 100-150 kWh hver måned). Og det viser sig, at det bliver umuligt at bruge hjemmecomputeren under udsendelsen. enhver bevægelse af musen vil være synlig i udsendelsen.

Så begyndte jeg at kigge væk cloud-tjenester. Jeg ledte efter en færdiglavet tjeneste, hvor jeg kunne uploade mine videoer eller for eksempel indsætte links til videoer fra YouTube, og det hele ville blive pakket i én non-stop udsendelse. Men jeg fandt ikke noget passende. Måske søgte jeg ikke godt. Det eneste, der passer til regningen, er restream.io, en tjeneste, der hjælper dig med at streame til flere platforme på samme tid. De ser ud til at være i stand til at uploade deres videoer. Men denne tjeneste er skabt til et helt andet formål, og de forventer, at udsendelsen kun varer et par timer. Jeg tror, ​​at hvis det gennem denne tjeneste var muligt at organisere en udsendelse døgnet rundt, så ville det skyde op i tiere eller endda hundredvis af dollars om måneden. Men jeg ønskede stadig at organisere udsendelsen enten gratis eller med minimale økonomiske investeringer.

Det blev klart, at under udsendelsen skal du eller separat enhed Eller endda en separat computer. Jeg tænkte i retning af noget som Raspberry Pi. Og hvad? Han har ikke en køler. Jeg optog videoen på et USB-flashdrev, tilsluttede et Ethernet-kabel og lod den ligge et sted et afsondret sted, den sender. Mulighed. Men jeg havde ikke selve bestyrelsen og heller ikke erfaring med at arbejde med den, så jeg takkede også nej til denne mulighed.

Som et resultat faldt jeg over en bestemt diskussion, hvor de diskuterede skabelsen egen server udsendelser. Det var ikke lige det, jeg ledte efter, men jeg fik hovedideen - du kan bruge serveren! I den diskussion blev det foreslået at bruge en masse VPS + nginx + OBS. Det blev klart, at dette bundt kunne passe mig. Det eneste pinlige var, at jeg aldrig havde administreret en server, og det forekom mig, at min egen dedikerede server var forvirrende og dyr. Jeg besluttede at finde ud af, hvor meget det ville koste at leje en server i minimumskonfigurationen og blev positivt overrasket.

Stream dine videoer XNUMX/XNUMX på YouTube

Priserne er i hviderussiske rubler, og disse er kun krummer. For forståelse er 8 hviderussiske rubler omkring 3.5 dollars eller 240 russiske rubler. For en måneds brug af en fuldgyldig computer, der er tændt 24/7 og har hurtig internetadgang. Af en eller anden grund blev denne opdagelse meget glædelig for mig, og i flere dage gik jeg frygtelig glad som et barn, der opdagede rumraketter 🙂

Forresten benyttede jeg mig af tilbuddet om den allerførste side, som Google gav mig til forespørgslen "lej en VPS". Måske er der endnu flere budgetløsninger, men denne pris passede mig, og jeg kiggede ikke længere.

Når du opretter en server, kan du vælge det operativsystem, som den skal køre under. På et hvilket som helst af de anførte systemer kan du organisere en udsendelse og træffe et valg baseret på dine præferencer og økonomiske muligheder (for en server med Windows beder de om et ekstra gebyr). Jeg valgte CentOS. Bare fordi jeg havde lidt erfaring med hende før.

Stream dine videoer XNUMX/XNUMX på YouTube

Trin 2 - Serveropsætning

Den første ting efter at have oprettet en server er at oprette forbindelse til den via SSH. Først brugte jeg PuTTy, men så begyndte jeg at bruge Secure Shell-appen, som kører i Google Chrome. Det fik mig til at føle mig mere komfortabel.

Så ændrede jeg værtsnavnet, satte tidssynkronisering op på serveren, opdaterede systemet, rodede med iptables ... og lavede en masse andre ting, men ikke fordi det var nødvendigt. Jeg var bare interesseret i at konfigurere serveren, og jeg gjorde det. Jeg elsker det, når det virker 🙂

Her er de trin, du skal tage:

  1. Tilslut EPEL-depotet.
  2. Opsæt en FTP-server (jeg valgte vsftp).
  3. Installer ffmpeg.

Jeg vil ikke give kommandoerne i detaljer, denne instruktion er ret konceptuel for at formidle den generelle handlingsplan. Hvis du har problemer med nogen af ​​trinene, løses de hurtigt af en forespørgsel i søgemaskinen som "CentOS connect EPEL" eller "CentOS FTP server installation". Og på de første links kan du finde detaljerede trin-for-trin instruktioner.

Så, som jeg skrev før, havde jeg brug for en masse VPS + nginx + OBS. VPS - færdig. Men på andre punkter begyndte der at dukke spørgsmål op. OBS er et program til udsendelse, Open Broadcaster Software. Og det virker kun med streams dvs. for eksempel tager den et billede fra et webcam og sender det. Eller skærmoptagelse. Eller det omdirigerer en allerede igangværende udsendelse til et andet websted. Og jeg har ikke en stream, jeg har kun et sæt videofiler, som jeg skal bruge for at lave en stream.

Jeg begyndte at grave i denne retning og stødte på ffmpeg. FFmpeg er et sæt gratis og open source-biblioteker, der giver dig mulighed for at optage, konvertere og streame digitale lyd- og videooptagelser i forskellige formater.

Og jeg var meget overrasket over, hvor meget ffmpeg kan gøre. Hvis du vil - træk lyden fra videoen. Hvis du vil, skærer den et fragment af videoen ud uden omkodning. Hvis du vil, vil den konvertere fra et format til et andet. Og mange, mange flere. Indtil han kan angive en fil, konverterer han den til en stream og overfører den selv til YouTube. Alt, kæden er samlet. Det er kun tilbage at forfine nuancerne.

Trin 3 - Udsendelsesopsætning

Vi laver en udsendelse på YouTube. På dette tidspunkt behøver vi kun et link og en udsendelsesnøgle. De er fremhævet med rødt på skærmbilledet nedenfor.

Stream dine videoer XNUMX/XNUMX på YouTube

Næste upload af videofiler til serveren, som vi planlægger at udsende. Faktisk er FTP kun nødvendig for denne fase. Hvis du har en anden bekvem måde at uploade filer til serveren på, kan FTP-serveren ikke hæves.

Stream til YouTube. For at starte udsendelsen skal du køre ffmpeg med flere attributter. Sådan ser den korteste kommando jeg fik ud:

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

Attributfortolkning-re - angiver, at filen skal konverteres til en stream.

-i – angiver, hvilken fil der skal afspilles. Det er vigtigt, at kommandoen køres fra den samme mappe, hvor selve videofilen er placeret. Ellers bør du angive et absolut link til filen, f.eks /usr/media/lecture1.mp4.

-f – indstiller formatet på outputfilen. I mit tilfælde viser det sig, at ffmpeg konverterer min fil fra mp4 til flv on the fly.

Og til sidst angiver vi de data, som vi tog fra YouTube på siden med udsendelsesindstillinger, dvs. adressen, som du vil sende data til, og udsendelsestasten, så udsendelsen vises på din kanal.

Hvis du gjorde alt korrekt, vil YouTube se den overførte stream efter at have kørt denne kommando. For at starte udsendelsen skal du blot klikke på knappen "Start udsendelse" i selve YouTube.

Trin 4 - Tilføj autonomi

Tillykke! Nu ved du, hvordan du begynder at udsende fra en videofil. Men det er ikke nok til en døgnudsendelse. Det er vigtigt, at efter afslutningen af ​​afspilningen af ​​den første video, starter den næste med det samme, og når alle videoerne er vist, starter afspilningen igen.

Jeg kom op med følgende mulighed: opret en .sh-fil, hvor jeg skrev en kommando for hver videofil og til sidst indikerede kommandoen for at genstarte det samme script. Dette resulterede i en rekursion som denne:

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

Og ja, det virkede. Jeg, tilfreds med mig selv, lancerede en testudsendelse og gik i seng.

Om morgenen fik jeg en ubehagelig overraskelse. Det viste sig, at udsendelsen kun var et par minutter og sluttede næsten umiddelbart efter, at jeg slukkede min computer. Undersøgelser viste, at kommandoer, der startes på denne måde, udføres, mens brugeren er autoriseret på serveren. Så snart jeg afbrød forbindelsen, blev udførelsen af ​​de kommandoer, jeg startede, afbrudt. For at forhindre dette i at ske, er det nok foran holdet bash tilføje kommando nohup. Dette vil tillade den kørende proces at køre uanset din tilstedeværelse.

Den endelige minimumsversion af scriptet ser sådan ud:

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 $

Hvor start.sh er filen, hvor dette script er skrevet. Og denne fil skal være placeret i samme mappe som videofilerne.

Tilføjelse af et dollartegn i slutningen tillader processen at køre i baggrunden, så du kan fortsætte med at bruge konsollen uden at afbryde udsendelsen.

Følgende bonusser blev opnået fra bonusserne:

  • Du kan manuelt skifte afspilning af filer. For at gøre dette skal du "dræbe" den aktuelt kørende ffmpeg-proces. Derefter starter afspilningen af ​​den næste fil fra listen automatisk.
  • Nye videoer kan tilføjes til udsendelsen uden at stoppe udsendelsen. Bare upload videoen til serveren, tilføj kommandoen for at køre denne fil i scriptet og gem den. Og det er det. På den næste afspilningscirkel vil den nye fil allerede blive udsendt på niveau med de gamle filer.

Trin 5 - Tilpas ffmpeg

På dette var det i princippet muligt at stoppe. Men jeg ville gerne gøre udsendelsen lidt mere seervenlig.

Lad os sige, at en person gik til udsendelsen, begyndte at se, kunne lide det og ønskede at se dette foredrag fra begyndelsen, men udsendelsen giver ikke mulighed for tilbagespoling. For at se foredraget fra begyndelsen, skal en person gå ind på min hjemmeside og få en optagelse af foredraget af interesse. Og hvordan forstår man, hvilket foredrag han er interesseret i? Der er allerede 16 foredrag på siden og hver uge er der kun flere af dem. Jeg tror, ​​at selv jeg, der har filmet og redigeret alle disse forelæsninger, ikke vil være i stand til ud fra et tilfældigt fragment, hvad det er for et foredrag. Derfor er det nødvendigt, at hver forelæsning på en eller anden måde er markeret.

Muligheden for at tilføje billedtekster til kildevideofilerne i redigeringsprogrammet passede ikke mig. Det var nødvendigt at sikre sig, at de originale filer blev brugt. For at understøtte udsendelsen krævede jeg så få kropsbevægelser som muligt fra mig.

Det viste sig, at ffmpeg også kan hjælpe mig med dette. Det har en særlig egenskab -vf, som giver dig mulighed for at lægge tekst oven på videoen. For at tilføje tekst til videoen skal du tilføje følgende fragment til kommandoen:

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

Dekryptering af parametrefontfile= – link til skrifttypefilen. Uden dette er inskriptionen på videoen ikke tilføjet. Den nemmeste måde er at lægge skrifttypefilen i samme mappe med videoen. Eller du bliver nødt til at angive den fulde sti til filen.

text= - faktisk selve teksten, som skal placeres over videoen.

fontsize= – skriftstørrelse i pixels.

fontcolor= - skrift farve.

borderw= - tykkelsen af ​​omridset omkring teksten i pixels (jeg har hvid tekst med en sort kontur 1 pixel tyk).

bordercolor= - konturfarve.

x= и y= – tekstkoordinater. Prik 0;0 placeret i øverste venstre hjørne. Mine koordinater er valgt på den måde, at teksten placeres i nederste venstre hjørne med en videoopløsning på 1280x720 pixels.

Det ser sådan ud:

Stream dine videoer XNUMX/XNUMX på YouTube

Trin 6 - bestemme kvaliteten af ​​udsendelsen

Alt, udsendelsen er klar. FFmpeg udsender, filer afspilles, min tilstedeværelse er ikke nødvendig for udsendelse. Selv hvert foredrag er underskrevet. Se ud som om det er det.

Men en anden nuance dukkede op - jeg valgte minimumsserverkonfigurationen, og den trak ikke udsendelsen. Serverkonfiguration: 1 kerne (som 2.2 GHz), 1 gigabyte RAM, 25 GB SSD. Der var nok RAM, men processoren gik næsten helt i load med 100% (og nogle gange endda med 102-103% 🙂 Det førte til, at udsendelsen fryser med få sekunders mellemrum. Grim.

Du kunne bare tage en dyrere konfiguration med to kerner, heldigvis, med cloud-teknologier, sker ændring af serverkonfigurationen ved at trykke på et par knapper. Men jeg ønskede at passe ind i minimumskonfigurationens kapacitet. Jeg begyndte at studere ffmpeg-dokumentationen, og ja, der er også indstillinger, der giver dig mulighed for at justere belastningen på systemet.

Høj billedkvalitet kan opnås på to måder: enten ved høj processorbelastning eller ved høj udgående trafik. Det viser sig, at jo mere belastning processoren kan påtage sig, jo mindre båndbredde bliver der brug for. Eller du kan ikke belaste processoren tungt, men så skal du bruge en bred kanal med en stor trafikmargin. Hvis der er begrænsninger på både processor og størrelsen af ​​den udgående kanal/trafik, så bliver du nødt til at reducere billedkvaliteten, så udsendelsen forløber problemfrit.

Min server har en 10 Mbps kanal tilgængelig. Denne bredde er lige med en margin. Men der er en trafikgrænse - 1 TB om måneden. For at overholde trafikbegrænsningerne bør min udgående stream derfor ikke overstige ~300 Kb pr. sekund, dvs. bithastigheden af ​​den udgående stream må ikke være mere end 2,5 Mbps. YouTube anbefaler i øvrigt bare at sende med denne bitrate.

For at regulere belastningen på systemet bruger ffmpeg forskellige tilgange. Godt skrevet om det her. Jeg endte med at bruge to attributter: -crf и -preset.

Konstant Rate Factor (CRF) - Dette er den koefficient, som du kan justere billedkvaliteten med. CRF kan have værdier fra 0 til 51, hvor 0 er kvaliteten af ​​kildefilen, 51 er den dårligst mulige kvalitet. Det anbefales at bruge værdier fra 17 til 28, standard er 23. Ved en faktor på 17 vil videoen være visuelt identisk med originalen, men teknisk set vil den ikke være det. I dokumentationen fremgår det også, at størrelsen af ​​den endelige video, afhængig af den angivne CRF, ændres eksponentielt, dvs. forøgelse af forholdet med 6 point vil fordoble bithastigheden af ​​den udgående video.

Hvis du bruger CRF kan du afhente "vægten" af det udgående billede, og derefter bruge forudindstillinger (-forudindstillet) du kan bestemme, hvor meget processoren skal belastes. Denne attribut har følgende parametre:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - standard værdi
  • slow
  • slower
  • veryslow

Den "hurtigere" parameter er angivet, jo højere vil belastningen være på processoren.

Jeg hentede først en forudindstilling, der i princippet var "for hård" til min processor, og tog derefter mere fint op på belastningen ved hjælp af CRF. I mit tilfælde kom forudindstillingen op fast, og for crf slog jeg mig til en værdi på 24.

Konklusion

Det er alt. Den sidste kommando til at starte udsendelsen, jeg fik denne:

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

Der er kun to ubeskrevne øjeblikke tilbage her:

1) -c:v libx264 – angivelse af et specifikt codec til at arbejde med kildefilen.
2) -g 3 – eksplicit angivelse af antallet af keyframes. I dette tilfælde er det specificeret, at hver tredje frame skal være en nøgleramme. Standardværdien er enten 5 eller 8, men YouTube bander og beder om mindst 3.

Hvad er kvaliteten af ​​den udsendelse, du kan se her.

Belastningen på serveren er som følger:

Stream dine videoer XNUMX/XNUMX på YouTube

Stream dine videoer XNUMX/XNUMX på YouTube

Baseret på overvågningsdataene kan det ses, at belastningen på processoren varierer fra 70 % til 95 %, og i en uge har udsendelsen aldrig nået 100 %. Så med sådanne indstillinger er processoren nok.

Ved at indlæse disken kan jeg sige, at den næsten ikke er indlæst, og en almindelig HDD burde være nok til udsendelse.

Men mængden af ​​udgående trafik bekymrer mig. Det viser sig, at min udgående stream spænder fra 450 til 650 KB per sekund. I en måned vil det være omkring 1,8 terabyte. Du skal muligvis købe mere trafik eller stadig skifte til en konfiguration med to kerner. Jeg vil ikke sænke billedkvaliteten.

***

Som et resultat vil jeg sige, at opsætning af sådan en udsendelse fra bunden tager omkring 1-2 timer. Og det meste af tiden vil tage at uploade videoen til serveren.

Som markedsføringsværktøj retfærdiggjorde lanceringen af ​​en sådan udsendelse ikke sig selv. Måske hvis du øger visningerne, så YouTube-algoritmer opfanger denne udsendelse og begynder at vise den aktivt i anbefalinger, så ville noget fungere. I mit tilfælde, i 16 dages kontinuerlig udsendelse, blev den set 58 gange.

Det er ok. Send harmonisk tilpas på hovedsiden på mit websted. Jeg fik en slags mulighed for hurtigt at danne mig min mening om underviseren og selve forelæsningerne.

Og et øjeblik. Det er vigtigt, at udsendelsen ikke krænker nogens ophavsret, ellers bliver den blokeret. Jeg er rolig til min udsendelse. Jeg valgte specifikt musikindlæg med fri brug, og forfatteren til indholdet sidder ved en computer i nærheden og har ikke noget imod, at jeg bruger hendes indhold 🙂

Men hvis du har en radio, der spiller et sted i baggrunden i din udsendelse, eller du brugte dit yndlingsnummer under redigering eller tog en videosekvens fra en populær musikvideo, serie eller film, så er din udsendelse i fare. Det er også vigtigt, at udsendelsen har mindst en minimal semantisk belastning, ellers kan den blive blokeret som spam.

***

Det var alt for mig. Jeg håber, at denne manual vil tjene nogen godt. Nå, hvis du har noget at tilføje - skriv, så læser jeg gerne tilføjelser og præciseringer til artiklen.

Kilde: www.habr.com

Tilføj en kommentar