Reprodueix els teus vídeos les XNUMX hores del dia a YouTube

Recentment, com a hobby, he estat filmant conferències d'un amic psicòleg. Munto el metratge i el publico al meu lloc web. Fa un mes, em vaig plantejar la idea d'organitzar una emissió les 24 hores del dia d'aquestes conferències a YouTube les 7 hores del dia. Una mena de "canal de televisió" temàtic dedicat al creixement personal.

Sé com fer una emissió normal. Però, com fer-ho perquè fos una emissió d'arxius de vídeo? Perquè funcioni les 24 hores del dia, els 7 dies del dia, sigui flexible, el més autònom possible i, alhora, no depèn de cap manera de l'ordinador de casa. Això és el que vaig haver d'esbrinar.

Reprodueix els teus vídeos les XNUMX hores del dia a YouTube

Van trigar diversos dies a trobar una solució. Vaig estudiar molts fòrums i diversos manuals, sense els quals la meva emissió simplement no hauria passat. I ara que la broma ha funcionat, sento la necessitat de compartir la meva solució. Així va sorgir aquest article.

En resum, la solució final és la següent: VPS + ffmeg + script bash. Sota el tall, descriu els passos fets i parlo de les “trampalles” que es van descobrir durant l'organització de l'emissió.

Pas 1: d'on anirà l'emissió?

Al principi, calia decidir d'on seria l'emissió, on seria la seva font. El primer que em va venir al cap - des de l'ordinador de casa. Recull vídeos en una llista de reproducció i comença a reproduir-los en qualsevol reproductor de vídeo. A continuació, captureu la imatge de la pantalla i transmeteu-la a YouTube. Però gairebé immediatament vaig descartar aquesta opció. per implementar-lo, cal mantenir l'ordinador de casa constantment encès, i això és el soroll dels refrigeradors fins i tot a la nit i un augment del consum d'electricitat (+ 100-150 kWh cada mes). I resulta que serà impossible utilitzar l'ordinador de casa durant l'emissió. qualsevol moviment del ratolí serà visible a l'emissió.

Llavors vaig començar a apartar la mirada serveis al núvol. Estava buscant un servei ja fet on pogués pujar els meus vídeos o, per exemple, inserir enllaços a vídeos de YouTube i tot s'agruparia en una emissió sense parar. Però no vaig trobar res adequat. Potser no he buscat bé. L'únic que s'ajusta a la factura és restream.io, un servei que us ajuda a reproduir a diverses plataformes alhora. Sembla que poden pujar els seus vídeos. Però aquest servei es va crear amb una finalitat completament diferent i esperen que l'emissió duri només un parell d'hores. Crec que si a través d'aquest servei fos possible organitzar una emissió les XNUMX hores del dia, es dispararia a desenes o fins i tot centenars de dòlars al mes. Però encara volia organitzar l'emissió de forma gratuïta o amb una inversió econòmica mínima.

Va quedar clar que sota l'emissió cal o dispositiu separat O fins i tot un ordinador separat. Vaig pensar en la direcció d'alguna cosa com el Raspberry Pi. I què? No té nevera. Vaig gravar el vídeo en una unitat flash USB, vaig connectar un cable Ethernet i el vaig deixar en algun lloc aïllat, emet. Opció. Però no tenia la junta en si, ni l'experiència de treballar-hi, així que també vaig rebutjar aquesta opció.

Com a resultat, em vaig trobar amb una certa discussió on van parlar de la creació servidor propi emissions. No era exactament el que buscava, però vaig tenir la idea principal: podeu utilitzar el servidor! En aquesta discussió, es va suggerir utilitzar un munt de VPS + nginx + OBS. Va quedar clar que aquest paquet em podia convenir. L'única cosa vergonyosa era que mai havia administrat un servidor i em va semblar que el meu propi servidor dedicat era confús i car. Vaig decidir esbrinar quant costaria llogar un servidor amb la configuració mínima i em vaig sorprendre gratament.

Reprodueix els teus vídeos les XNUMX hores del dia a YouTube

Els preus són en rubles bielorussos i només són molles. Per entendre's, 8 rubles bielorussos són uns 3.5 dòlars o 240 rubles russos. Durant un mes d'utilitzar un ordinador complet que estigui encès les 24 hores del dia i que tingui accés ràpid a Internet. Per alguna raó, aquest descobriment es va fer molt alegre per a mi, i durant uns quants dies vaig caminar molt content com un nen que va descobrir coets espacials 🙂

Per cert, vaig aprofitar l'oferta del primer lloc que em va donar Google per a la consulta "llogar un VPS". Potser encara hi ha més solucions pressupostàries, però aquest preu em va bé i no vaig buscar més enllà.

Quan creeu un servidor, podeu triar el sistema operatiu amb el qual s'executarà. En qualsevol dels sistemes enumerats, podeu organitzar una emissió i fer una elecció en funció de les vostres preferències i capacitats financeres (per a un servidor amb Windows, demanen una tarifa addicional). Vaig triar CentOS. Només perquè abans tenia poca experiència amb ella.

Reprodueix els teus vídeos les XNUMX hores del dia a YouTube

Pas 2: Configuració del servidor

El primer després de crear un servidor és connectar-s'hi mitjançant SSH. Al principi vaig utilitzar PuTTy, però després vaig començar a utilitzar l'aplicació Secure Shell, que s'executa a Google Chrome. Això em va fer sentir més còmode.

Després vaig canviar el nom de l'amfitrió, vaig configurar la sincronització de l'hora al servidor, vaig actualitzar el sistema, vaig jugar amb iptables... i vaig fer un munt de coses més, però no perquè fos necessari. Només estava interessat a configurar el servidor i ho vaig fer. M'encanta quan funciona 🙂

Aquests són els passos a seguir:

  1. Connecteu el repositori EPEL.
  2. Configureu un servidor FTP (jo vaig triar vsftp).
  3. Instal·leu ffmpeg.

No donaré les ordres en detall, aquesta instrucció és més aviat conceptual per tal de transmetre el pla general d'acció. Si teniu problemes amb algun dels passos, es resolen ràpidament mitjançant una consulta al cercador com "CentOS connect EPEL" o "CentOS FTP server installation". I als primers enllaços podeu trobar instruccions detallades pas a pas.

Per tant, com he escrit abans, necessitava un munt de VPS + nginx + OBS. VPS - fet. Però en altres punts, van començar a sorgir preguntes. OBS és un programa per a la difusió, Open Broadcaster Software. I només funciona amb fluxos, és a dir. per exemple, agafa una imatge d'una càmera web i l'emet. O gravació de pantalla. O redirigeix ​​una emissió ja en curs a un altre lloc. I no tinc un flux, només tinc un conjunt de fitxers de vídeo que necessito per fer un flux.

Vaig començar a cavar en aquesta direcció i vaig trobar ffmpeg. FFmpeg és un conjunt de biblioteques gratuïtes i de codi obert que us permeten gravar, convertir i reproduir enregistraments digitals d'àudio i vídeo en diversos formats.

I em va sorprendre molt de quant pot fer ffmpeg. Si voleu, traieu el so del vídeo. Si voleu, retallarà un fragment del vídeo sense transcodificar. Si voleu, es convertirà d'un format a un altre. I molts, molts més. Fins al punt que pugui especificar un fitxer, el convertirà en un flux i el transferirà a YouTube ell mateix. Tot, la cadena està muntada. Només queda per afinar els matisos.

Pas 3: Configuració de la difusió

Creem una emissió a YouTube. En aquesta fase, només necessitem un enllaç i una clau de difusió. Es destaquen en vermell a la captura de pantalla següent.

Reprodueix els teus vídeos les XNUMX hores del dia a YouTube

Addicional penjar fitxers de vídeo al servidor, que tenim previst emetre. De fet, només es necessita FTP per a aquesta etapa. Si teniu una altra manera convenient de carregar fitxers al servidor, no es pot activar el servidor FTP.

Transmet a YouTube. Per començar a emetre, heu d'executar ffmpeg amb diversos atributs. Aquest és el que sembla l'ordre més curt que he rebut:

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

Interpretació d'atributs-re - indica que el fitxer s'ha de convertir en un flux.

-i – indica quin fitxer s'ha de reproduir. És important que l'ordre s'executi des del mateix directori on es troba el fitxer de vídeo. En cas contrari, hauríeu d'especificar un enllaç absolut al fitxer, com ara /usr/media/lecture1.mp4.

-f – estableix el format del fitxer de sortida. En el meu cas, resulta que ffmpeg converteix el meu fitxer de mp4 a flv sobre la marxa.

I al final, indiquem les dades que hem extret de YouTube a la pàgina de configuració d'emissió, és a dir. l'adreça a la qual voleu enviar les dades i la clau d'emissió perquè l'emissió es mostri al vostre canal.

Si ho heu fet tot correctament, després d'executar aquesta ordre, YouTube veurà el flux transmès. Per iniciar l'emissió, només heu de fer clic al botó "Iniciar emissió" del mateix YouTube.

Pas 4: afegiu autonomia

Felicitats! Ara ja saps com començar a emetre des d'un fitxer de vídeo. Però això no és suficient per a una emissió durant les XNUMX hores del dia. És important que un cop finalitzada la reproducció del primer vídeo, s'iniciï immediatament el següent i, quan es mostrin tots els vídeos, la reproducció torni a començar.

Vaig trobar la següent opció: crear un fitxer .sh, en el qual vaig escriure una ordre per a cada fitxer de vídeo i al final vaig indicar l'ordre per reiniciar el mateix script. Això va donar lloc a una recursivitat com aquesta:

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

I sí, va funcionar. Jo, satisfet amb mi mateix, vaig llançar una emissió de prova i vaig anar al llit.

Al matí vaig tenir una desagradable sorpresa. Va resultar que l'emissió va durar només un parell de minuts i va acabar gairebé immediatament després que vaig apagar l'ordinador. La investigació va demostrar que les ordres llançades d'aquesta manera s'executen mentre l'usuari està autoritzat al servidor. Tan bon punt em vaig desconnectar, l'execució de les ordres que vaig començar es va interrompre. Per evitar que això passi, n'hi ha prou davant de l'equip bash afegir comanda nohup. Això permetrà que el procés en execució s'executi independentment de la vostra presència.

La versió mínima final de l'script té aquest aspecte:

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 $

On start.sh és el fitxer on s'escriu aquest script. I aquest fitxer s'ha d'ubicar al mateix directori que els fitxers de vídeo.

Afegir un signe de dòlar al final permet que el procés s'executi en segon pla perquè pugueu continuar utilitzant la consola sense interrompre l'emissió.

De les bonificacions es van obtenir les següents bonificacions:

  • Podeu canviar manualment la reproducció dels fitxers. Per fer-ho, heu de "matar" el procés ffmpeg que s'executa actualment. Després d'això, s'iniciarà automàticament la reproducció del següent fitxer de la llista.
  • Es poden afegir vídeos nous a l'emissió sense aturar l'emissió. Només cal que carregueu el vídeo al servidor, afegiu l'ordre per executar aquest fitxer a l'script i deseu-lo. I ja està. En el següent cercle de reproducció, el nou fitxer ja s'emetrà a l'igual dels fitxers antics.

Pas 5: personalitzeu ffmpeg

Sobre això, en principi, era possible aturar-se. Però volia que l'emissió fos una mica més amigable per als espectadors.

Suposem que una persona va anar a l'emissió, va començar a mirar, li va agradar i va voler veure aquesta conferència des del principi, però l'emissió no preveu rebobinar. Per veure la conferència des del principi, una persona haurà d'anar al meu lloc web i obtenir una gravació de la conferència d'interès. I com entendre quina conferència li interessa? Ja hi ha 16 conferències al lloc i cada setmana només n'hi ha més. Crec que fins i tot jo, que he filmat i editat totes aquestes conferències, no podré determinar a partir d'un fragment a l'atzar quin tipus de conferència es tracta. Per tant, cal que cada conferència estigui d'alguna manera marcada.

L'opció d'afegir subtítols als fitxers de vídeo font al programa d'edició no em va bé. Calia assegurar-se que s'utilitzaven els fitxers originals. Per donar suport a l'emissió em va requerir els mínims moviments corporals possibles.

Va resultar que ffmpeg també em pot ajudar amb això. Té un atribut especial -vf, que us permet posar text a sobre del vídeo. Per afegir text al vídeo, heu d'afegir el fragment següent a l'ordre:

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

Desxifrat de paràmetresfontfile= - enllaç al fitxer de la font. Sense això, la inscripció al vídeo no s'afegeix. La manera més senzilla és posar el fitxer de tipus de lletra a la mateixa carpeta amb el vídeo. O haureu d'especificar el camí complet al fitxer.

text= - de fet, el propi text, que s'ha de col·locar sobre el vídeo.

fontsize= - mida de la lletra en píxels.

fontcolor= - color de la lletra.

borderw= - el gruix del contorn al voltant del text en píxels (tinc text blanc amb un contorn negre d'1 píxel de gruix).

bordercolor= - color del contorn.

x= и y= - coordenades del text. Punt 0;0 situat a la cantonada superior esquerra. Les meves coordenades es trien de tal manera que el text es col·loqui a la cantonada inferior esquerra amb una resolució de vídeo de 1280x720 píxels.

Es veu així:

Reprodueix els teus vídeos les XNUMX hores del dia a YouTube

Pas 6: determineu la qualitat de l'emissió

Tot, l'emissió està llesta. FFmpeg emet, es reprodueixen arxius, la meva presència no és necessària per a la difusió. Fins i tot cada conferència està signada. Sembla que això és tot.

Però va sorgir un altre matís: vaig triar la configuració mínima del servidor i no va treure l'emissió. Configuració del servidor: 1 nucli (com 2.2 GHz), 1 gigabyte de RAM, 25 GB SSD. Hi havia prou memòria RAM, però el processador es va carregar gairebé completament al 100% (i de vegades fins i tot al 102-103% 🙂 Això va provocar que l'emissió es congelava cada pocs segons. Lleig.

Només podríeu prendre una configuració més cara amb dos nuclis, afortunadament, amb les tecnologies al núvol, el canvi de configuració del servidor es produeix prement un parell de botons. Però volia encaixar en la capacitat de la configuració mínima. Vaig començar a estudiar la documentació de ffmpeg i sí, també hi ha configuracions que permeten ajustar la càrrega del sistema.

Es pot aconseguir una alta qualitat d'imatge de dues maneres: ja sigui amb una càrrega elevada del processador o amb un alt trànsit de sortida. Resulta que com més càrrega pugui assumir el processador, menys amplada de banda es necessitarà. O no podeu carregar molt el processador, però llavors necessitareu un canal ampli amb un gran marge de trànsit. Si hi ha restriccions tant en el processador com en la mida del canal/trànsit de sortida, haureu de reduir la qualitat de la imatge perquè l'emissió vagi sense problemes.

El meu servidor té un canal de 10 Mbps disponible. Aquesta amplada és recta amb un marge. Però hi ha un límit de trànsit: 1 TB al mes. Per tant, per complir amb les restriccions de trànsit, el meu flux de sortida no hauria de superar ~ 300 Kb per segon, és a dir. la taxa de bits del flux de sortida no ha de ser superior a 2,5 Mbps. YouTube, per cert, només recomana emetre a aquesta taxa de bits.

Per regular la càrrega del sistema, ffmpeg utilitza diferents enfocaments. Ben escrit sobre això aquí. Vaig acabar utilitzant dos atributs: -crf и -preset.

Factor de taxa constant (CRF) - Aquest és el coeficient pel qual podeu ajustar la qualitat de la imatge. CRF pot tenir valors de 0 a 51, on 0 és la qualitat del fitxer font, 51 és la pitjor qualitat possible. Es recomana utilitzar valors de 17 a 28, el valor predeterminat és 23. Amb un factor de 17, el vídeo serà visualment idèntic a l'original, però tècnicament no ho serà. La documentació també estableix que la mida del vídeo final, en funció del CRF especificat, canvia de manera exponencial, és a dir. augmentar la proporció en 6 punts duplicarà la taxa de bits del vídeo sortint.

Si utilitzeu CRF, podeu recollir el "pes" de la imatge de sortida i després utilitzar-lo presets (-preset) podeu determinar quant es carregarà el processador. Aquest atribut té els paràmetres següents:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - valor per defecte
  • slow
  • slower
  • veryslow

S'especifica el paràmetre "més ràpid", més gran serà la càrrega del processador.

Primer vaig agafar un valor predefinit que, en principi, era "massa dur" per al meu processador, i després vaig agafar la càrrega amb més precisió mitjançant CRF. En el meu cas, va sorgir el preajust fast, i per crf em vaig conformar amb un valor de 24.

Conclusió

Això és tot. L'ordre final per iniciar l'emissió, tinc això:

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

Només queden dos moments no descrits aquí:

1) -c:v libx264 – especificar un còdec específic per treballar amb el fitxer font.
2) -g 3 – indicació explícita del nombre de fotogrames clau. En aquest cas, s'especifica que cada tercer fotograma ha de ser un fotograma clau. El valor estàndard és 5 o 8, però YouTube ho jura, demanant almenys 3.

Quina és la qualitat de l'emissió que podeu veure aquí.

La càrrega al servidor és la següent:

Reprodueix els teus vídeos les XNUMX hores del dia a YouTube

Reprodueix els teus vídeos les XNUMX hores del dia a YouTube

A partir de les dades de seguiment, es pot veure que la càrrega del processador oscil·la entre el 70% i el 95%, i durant una setmana l'emissió mai ha arribat al 100%. Per tant, amb aquests paràmetres, el processador és suficient.

En carregar el disc, puc dir que gairebé no està carregat, i un HDD normal hauria de ser suficient per a la difusió.

Però la quantitat de trànsit que surt em preocupa. Resulta que el meu flux de sortida oscil·la entre 450 i 650 KB per segon. Durant un mes serà d'uns 1,8 terabytes. És possible que hàgiu de comprar més trànsit o canviar a una configuració amb dos nuclis. No vull baixar la qualitat de la imatge.

***

Com a resultat, diré que la creació d'aquesta emissió des de zero triga unes 1-2 hores. I la majoria de les vegades es necessitarà pujar el vídeo al servidor.

Com a eina de màrqueting, el llançament d'aquesta emissió no es va justificar. Potser si augmenteu les visualitzacions perquè els algorismes de YouTube recullin aquesta emissió i comencen a mostrar-la activament en recomanacions, alguna cosa sortiria bé. En el meu cas, en 16 dies d'emissió continuada, s'ha vist 58 vegades.

Està bé. La transmissió s'ajusta harmònicament a la pàgina principal del meu lloc. Vaig tenir una mena d'oportunitat per formar-me ràpidament la meva opinió sobre el professor i les mateixes conferències.

I un moment. És important que l'emissió no vulneri els drets d'autor de ningú, en cas contrari quedarà bloquejada. Estic tranquil per a la meva emissió. He escollit específicament insercions de música amb ús gratuït, i l'autora del contingut està asseguda a un ordinador proper i no m'importa que utilitzi el seu contingut 🙂

Però si tens una ràdio sonant en algun lloc de la teva emissió, o has fet servir la teva pista preferida durant l'edició o has fet una seqüència de vídeo d'un vídeo musical, sèrie o pel·lícula popular, la teva emissió està en perill. També és important que l'emissió porti almenys una càrrega semàntica mínima, en cas contrari es pot bloquejar com a correu brossa.

***

Això és tot per a mi. Espero que aquest manual serveixi a algú. Bé, si teniu alguna cosa a afegir - escriviu, estaré encantat de llegir addicions i aclariments a l'article.

Font: www.habr.com

Afegeix comentari