Trasmissione continua dei propri video su YouTube

Di recente ho iniziato a registrare le lezioni di un amico psicologo come hobby. Montaggio il materiale ripreso e lo pubblico sul mio sito. Un mese fa, ho avuto l'idea di organizzare una trasmissione continua di queste lezioni su YouTube, in un formato 24/7. Una sorta di "canale televisivo" dedicato alla crescita personale.

So come realizzare una trasmissione normale. Ma come posso fare in modo che si tratti di una trasmissione di file video? Deve funzionare 24/7, essere flessibile, il più autonoma possibile e non dipendere affatto dal mio computer domestico. Questo dovevo scoprire.

Trasmissione continua dei propri video su YouTube

Ho impiegato diversi giorni per trovare la soluzione. Ho studiato molti forum e vari manuali, senza i quali la mia trasmissione non sarebbe stata possibile. E ora, quando la "marachella" è riuscita, sento la necessità di condividere la mia soluzione. Da qui è nata quest'articolo.

In breve, la soluzione finale è stata la seguente: VPS + ffmpeg + script bash. Di seguito descrivo i passaggi effettuati e parlo delle "insidie" che ho incontrato durante l'organizzazione della trasmissione.

Passo 1 – da dove arriverà la trasmissione?

All'inizio era necessario decidere da dove sarebbe avvenuta la trasmissione, qual era la sua origine. La prima cosa che mi è venuta in mente è stata dal computer di casa. Raccogliere i video in un elenco di riproduzione e avviarne la visione in qualsiasi lettore video. Poi catturare l'immagine dallo schermo e trasmetterla su YouTube. Ma ho quasi subito scartato questa opzione perché per realizzarla sarebbe stato necessario tenere acceso il computer di casa continuamente, il che avrebbe comportato il rumore delle ventole anche di notte e un aumento del consumo di energia elettrica (+100-150 kWh ogni mese). Risultando in un definitivo divieto di utilizzo del computer di casa durante la trasmissione, dato che qualsiasi movimento del mouse sarebbe stato visibile nella trasmissione.

Poi ho iniziato a guardare verso servizi cloud. Ho cercato un servizio pronto in cui poter caricare i miei video o, ad esempio, inserire link ai video di YouTube e che tutto questo fosse confezionato in un'unica trasmissione non-stop. Ma non ho trovato nulla di adatto. Forse ho cercato male. L'unico servizio che sembra ± avere una funzionalità simile è restream.io, un servizio che aiuta a trasmettere simultaneamente su più piattaforme. Sembra che si possano caricare i propri video. Ma questo servizio è stato creato per scopi completamente diversi e si prevede che la trasmissione duri solo un paio d'ore. Penso che se riuscissi a organizzare una trasmissione 24 ore su 24 tramite questo servizio, potrebbe diventare un'opzione molto richiesta, anche a decine, se non centinaia di dollari al mese. Tuttavia, mi piacerebbe organizzare la trasmissione gratuitamente o con investimenti finanziari minimi.

È diventato chiaro che per la trasmissione serve o un dispositivo separato o addirittura un computer dedicato. Pensavo a qualcosa come un Raspberry Pi. E perché no? Non ha ventole. Ho registrato un video su una chiavetta USB, collegato un cavo Ethernet e può stare tranquillamente in un luogo appartato a trasmettere. Un'opzione. Ma non avevo né la scheda né esperienza con essa, quindi ho scartato anche questa possibilità.

Alla fine, mi sono imbattuto in una discussione dove si parlava della creazione di un server per la trasmissione. Non era esattamente ciò che cercavo, ma ho colto l'idea principale: si può usare un server! In quella discussione suggerivano di utilizzare una combinazione di VPS + nginx + OBS. È diventato chiaro che questa combinazione potesse andar bene anche per me. L'unico dubbio era che non avevo mai amministrato server e pensavo che avere un server dedicato fosse complicato e costoso. Ho deciso di scoprire quanto costasse affittare un server nella configurazione minima e sono rimasto piacevolmente sorpreso.

Trasmissione continua dei propri video su YouTube

I prezzi sono espressi in rubli bielorussi e si tratta di cifre irrisorie. Per fare un confronto, 8 rubli bielorussi equivalgono a circa 3,5 dollari o 240 rubli russi. Per un mese di utilizzo di un computer completo, che è acceso 24/7 e ha accesso rapido a Internet. In qualche modo, questa scoperta mi ha reso molto felice e sono andato in giro per alcuni giorni incredibilmente soddisfatto, come un bambino che scopre i razzi spaziali 🙂

A proposito, ho usufruito dell'offerta del primo sito che Google mi ha mostrato cercando "noleggio VPS". Potrebbero esserci soluzioni ancora più economiche, ma questo prezzo mi ha soddisfatto e non ho cercato oltre.

Quando si crea un server, è possibile scegliere il sistema operativo sotto il quale funzionerà. Su ciascuno dei sistemi elencati è possibile organizzare una trasmissione, e la scelta deve essere fatta in base alle proprie preferenze e possibilità economiche (per un server con Windows si richiede un costo aggiuntivo). Ho scelto CentOS. Semplicemente perché avevo già avuto una piccola esperienza con esso.

Trasmissione continua dei propri video su YouTube

Passo 2 – configurazione del server

La prima cosa da fare dopo aver creato un server è connettersi ad esso via SSH. All'inizio ho utilizzato PuTTy, ma poi ho iniziato ad usare l'app Secure Shell App, che si avvia in Google Chrome. È stato più comodo per me.

Successivamente ho cambiato il nome host, impostato la sincronizzazione del tempo sul server, aggiornato il sistema, lavorato con iptables... e ho fatto un sacco di altre cose, non perché fosse strettamente necessario. Semplicemente ero interessato alla configurazione del server e mi veniva bene. Mi piace quando riesco 🙂

Ecco i passaggi che è necessario seguire:

  1. Collegare il repository EPEL.
  2. Avviare il server FTP (ho scelto vsftp).
  3. Installare ffmpeg.

Non fornirò i comandi in dettaglio, questa guida è più concettuale, per trasmettere il piano d'azione generale. Se hai difficoltà con uno qualsiasi dei passaggi, è facile trovare soluzioni cercando su Google con frasi come 'CentOS collegare EPEL' o 'CentOS installazione server FTP'. E nei primi risultati troverai istruzioni dettagliate passo dopo passo.

Quindi, come ho già scritto in precedenza, avevo bisogno di una combinazione VPS + nginx + OBS. VPS – fatto. Ma per quanto riguarda gli altri punti, sono sorti alcuni dubbi. OBS – è un programma per le trasmissioni, Open Broadcaster Software. E funziona solo con i flussi, cioè ad esempio, prende l'immagine dalla webcam e la trasmette. O registra lo schermo. O reindirizza una trasmissione in corso su un altro sito. Ma io non ho un flusso, ho solo un insieme di file video che devono essere trasformati in un flusso.

Ho iniziato a cercare in questa direzione e mi sono imbattuto in ffmpeg. FFmpeg – è un insieme di librerie gratuite con codice sorgente aperto, che consentono di registrare, convertire e trasmettere registrazioni audio e video digitali in vari formati.

E sono rimasto molto sorpreso di quanto possa fare ffmpeg. Vuoi - estrae l'audio dal video. Vuoi - ritaglia un frammento video senza ricodifica. Vuoi - converte da un formato all'altro. E molto, molto di più. Fino al punto che puoi indicargli un file, lui lo trasforma in un flusso e lo trasmette direttamente su YouTube. Ecco, la catena è completa. Resta solo da perfezionare i dettagli.

Passo 3 – configurazione della trasmissione

Creiamo una trasmissione su YouTube. A questo punto ci serve solo il link e la chiave di trasmissione. Nello screenshot qui sotto sono evidenziati in rosso.

Trasmissione continua dei propri video su YouTube

Avanti carichiamo sul server i file video che intendiamo trasmettere. In effetti, l'FTP è necessario solo per questo passaggio. Se hai un altro metodo comodo per caricare file sul server, allora non è necessario avviare il server FTP.

Trasmettiamo il flusso su YouTube. Per avviare la trasmissione è necessario eseguire ffmpeg con alcuni attributi. Ecco come appare il comando più breve che sono riuscito a ottenere:

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

Descrizione degli attributi-re – indica che il file deve essere convertito in flusso.

-i – indica quale file deve essere riprodotto. È importante che il comando venga eseguito dalla stessa directory in cui si trova il file video. Altrimenti, bisogna specificare il percorso assoluto del file, come /usr/media/lecture1.mp4.

-f – imposta il formato del file di output. Nel mio caso, ffmpeg converte "al volo" il mio file da mp4 a flv.

E alla fine indichiamo i dati che abbiamo preso su YouTube nella pagina di impostazione della trasmissione, cioè l'indirizzo a cui inviare i dati e la chiave di trasmissione, affinché la trasmissione appaia proprio sul tuo canale.

Se hai fatto tutto correttamente, dopo aver avviato questo comando, YouTube vedrà il flusso trasmesso. Per avviare la trasmissione, ti basterà premere il pulsante «Inizia trasmissione» su YouTube.

Passo 4 – aggiungiamo l'autonomia

Congratulazioni! Ora sai come avviare una trasmissione da un file video. Ma non è sufficiente per una trasmissione continua. È importante che, dopo la fine della riproduzione del primo video, parta immediatamente il successivo, e quando tutti i video sono stati mostrati, la riproduzione ricominci da capo.

Ho pensato alla seguente opzione: creare un file .sh in cui ho scritto un comando per ogni file video e alla fine ho indicato il comando per il riavvio di questo stesso script. È venuta fuori una sorta di ricorsione:

Comando 1... (avvio trasmissione del file lecture1.mp4)
Comando 2... (avvio trasmissione del file lecture2.mp4)
Comando 3... (avvio trasmissione del file lecture3.mp4)
bash start.sh

Sì, ha funzionato. Soddisfatto di me stesso, ho avviato una trasmissione di prova e sono andato a dormire.

Al mattino mi aspettava una sorpresa sgradevole. Si è scoperto che la trasmissione era durata solo un paio di minuti e si era interrotta praticamente subito dopo che ho spento il computer. L'inchiesta ha mostrato che i comandi avviati in quel modo vengono eseguiti finché l'utente è autenticato sul server. Non appena mi sono disconnesso, l'esecuzione dei comandi che avevo avviato è stata interrotta. Per evitare che ciò accada, basta anteporre al comando bash il comando nohup. Questo permetterà al processo avviato di continuare a funzionare indipendentemente dalla tua presenza.

La versione minima finale dello script appare così:

ffmpeg -re -i lecture1.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%CHIAVE_TRASMISSIONE%
ffmpeg -re -i lecture2.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%CHIAVE_TRASMISSIONE%
ffmpeg -re -i lecture3.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%CHIAVE_TRASMISSIONE%
nohup bash start.sh $

Dove start.sh è il file in cui è registrato questo script. E questo file deve trovarsi nella stessa directory dei file video.

Aggiungere il simbolo del dollaro alla fine permette di avviare il processo in background, in modo da poter continuare a utilizzare la console senza interrompere la trasmissione.

I vantaggi ottenuti dai bonus sono i seguenti:

  • È possibile passare manualmente alla riproduzione dei file. Per questo è necessario "terminare" il processo ffmpeg attualmente in esecuzione. Dopodiché, la riproduzione del file successivo nella lista partirà automaticamente.
  • Nuovi video possono essere aggiunti alla trasmissione senza interrompere il flusso. Basta caricare il video sul server, aggiungere il comando per l'avvio di questo file nello script e salvare. E tutto. Al prossimo ciclo di riproduzione, il nuovo file sarà trasmesso insieme ai file già esistenti.

Passo 5 – ottimizziamo ffmpeg

In effetti, qui si potrebbe anche fermarsi. Ma volevo rendere la trasmissione un po' più accogliente per gli spettatori.

Immagina che una persona acceda a una diretta, inizi a guardare, le piaccia e voglia rivedere la lezione dall'inizio, ma la trasmissione non prevede il riavvolgimento. Per vedere la lezione dall'inizio, dovrà andare sul mio sito e ottenere la registrazione della lezione desiderata. E come può capire quale lezione lo interessa? Sul sito ci sono già 16 lezioni e ogni settimana ce ne sono sempre di più. Penso che anche io, che ho registrato e montato tutte queste lezioni, non potrei determinare quale sia una specifica lezione solo da un frammento casuale. Perciò è necessario che ogni lezione abbia una qualche forma di identificazione.

L'opzione di aggiungere scritte nei file video originali utilizzando un programma di montaggio non mi convinceva. Doveva essere fatto in modo che si utilizzassero i file originali. Affinché la trasmissione richiedesse il minor numero possibile di movimenti da parte mia.

Ho scoperto che anche in questo ffmpeg può aiutarmi. Ha un attributo speciale -vf, che consente di sovrapporre del testo al video. Per aggiungere testo al video, è necessario aggiungere il seguente frammento al comando:

-vf drawtext="fontfile=OpenSans.ttf:text='Lezione 13: Psicologia delle emozioni. Come creare gioia?':fontsize=26:fontcolor=white:borderw=1:bordercolor=black:x=40:y=670"

Descrizione dei parametrifontfile= – link al file del carattere. Senza questo, il testo non verrà aggiunto al video. È più semplice mettere il file del carattere nella stessa cartella del video. Oppure sarà necessario specificare il percorso completo al file.

text= – il testo che deve essere sovrapposto al video.

fontsize= – dimensione del carattere in pixel.

fontcolor= – colore del carattere.

borderw= – spessore del contorno attorno al testo in pixel (io ho del testo bianco con contorno nero di 1 pixel di spessore).

bordercolor= – colore del contorno.

x= e y= – coordinate del testo. Il punto 0;0 si trova nell'angolo in alto a sinistra. Ho selezionato le coordinate in modo che il testo fosse posizionato nell'angolo in basso a sinistra con una risoluzione video di 1280x720 pixel.

Ecco come appare:

Trasmissione continua dei propri video su YouTube

Passo 6 – definiamo la qualità della trasmissione

Tutto pronto, la trasmissione è impostata. FFmpeg trasmette, i file vengono riprodotti, la mia presenza non è necessaria per la trasmissione. Anche ogni lezione è denominata. Sembra tutto.

È emerso un ulteriore dettaglio: ho scelto la configurazione minima del server e non riusciva a gestire la trasmissione. Configurazione del server: 1 core (circa 2.2 GHz), 1 gigabyte di RAM, SSD da 25 GB. La RAM era sufficiente, ma la CPU andava praticamente a carico massimo al 100% (a volte persino al 102-103% 🙂). Questo portava a delle interruzioni nella trasmissione ogni pochi secondi. Non è gradevole.

Avrei potuto semplicemente optare per una configurazione più costosa con due core, considerando che con le tecnologie cloud cambiare la configurazione del server richiede solo un paio di clic. Tuttavia, volevo operare con la potenza della configurazione minima. Ho iniziato a studiare la documentazione di ffmpeg e sì, ci sono anche impostazioni che consentono di regolare il carico sul sistema.

Un'alta qualità dell'immagine può essere raggiunta in due modi: o con un carico elevato sulla CPU, o con un'ampia larghezza di banda in uscita. Più il processore riesce a gestire carichi, meno sarà necessaria la capacità del canale. Oppure, si può mantenere un carico basso sulla CPU, ma in questo caso sarà necessaria una larga banda con un'ampia riserva di traffico. Se ci sono limitazioni sia sulla CPU che sulla larghezza del canale/traffico in uscita, sarà necessario ridurre la qualità dell'immagine affinché la trasmissione avvenga senza interruzioni.

Il mio server ha a disposizione un canale di 10 Mbps. Questa larghezza è già oltre le necessità. Tuttavia, esiste un limite di traffico – 1 TB al mese. Pertanto, per rispettare il limite di traffico, il mio flusso in uscita non deve superare ~300 Kbps, cioè il bitrate del flusso in uscita deve essere non superiore a 2,5 Mbps. YouTube, tra l'altro, raccomanda di trasmettere a questo bitrate.

Per regolare il carico sul sistema, ffmpeg utilizza vari approcci. Ne parla bene. quiAlla fine, ho utilizzato due attributi: -crf e -preset.

Constant Rate Factor (CRF) – è un coefficiente che consente di regolare la qualità dell'immagine. Il CRF può assumere valori da 0 a 51, dove 0 indica la qualità del file originale e 51 la qualità peggiore possibile. Si consiglia di utilizzare valori compresi tra 17 e 28, con un valore predefinito di 23. Con un coefficiente di 17, il video sarà visivamente identico all'originale, ma tecnicamente non lo sarà. Inoltre, nella documentazione è specificato che la dimensione del video finale cambia esponenzialmente in base al CRF specificato, cioè un aumento del coefficiente di 6 punti porterà a un raddoppio del bitrate del video in uscita.

Se con il CRF è possibile determinare il "peso" dell'immagine in uscita, con preset (-preset) si può definire quanto sarà intensivo il carico sulla CPU. Le opzioni di questo attributo sono le seguenti:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium – valore predefinito
  • slow
  • slower
  • veryslow

Maggiore è la velocità indicata dal parametro, maggiore sarà il carico sulla CPU.

Inizialmente ho scelto un preset che era sostanzialmente "alla portata" della mia CPU, e poi ho regolato più finemente il carico utilizzando il CRF. Nel mio caso, il preset fast, mentre per il crf mi sono fermato al valore 24.

Conclusione

Questo è tutto. Il comando finale per avviare la trasmissione è il seguente:

ffmpeg -re -i lecture1.mp4 -vf drawtext="fontfile=OpenSans.ttf:text='Lezione 1: Giocoleria delle immagini del mondo':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/%КЛЮЧ_ТРАНСЛЯЦИИ%

Rimangono solo due aspetti non descritti:

1) -c:v libx264 – specifica un codec particolare per lavorare con il file sorgente.
2) -g 3 – indica esplicitamente il numero di fotogrammi chiave. In questo caso, è stabilito che ogni terzo fotogramma deve essere chiave. Il valore standard è 5 o 8, ma YouTube avverte, richiedendo almeno 3.

Puoi vedere la qualità della trasmissione qui.

Il carico sul server è stato il seguente:

Trasmissione continua dei propri video su YouTube

Trasmissione continua dei propri video su YouTube

Dai dati di monitoraggio, si osserva che il carico sulla CPU varia tra il 70% e il 95% e nel corso della settimana la trasmissione non ha mai raggiunto il 100%. Quindi, con queste impostazioni, la CPU è sufficiente.

Per quanto riguarda il carico del disco, posso dire che è quasi non sfruttato e per la trasmissione dovrebbe bastare anche un normale HDD.

Ma la quantità di traffico in uscita mi preoccupa. Sembra che il mio flusso in uscita oscilli tra 450 e 650 KB al secondo. In un mese ciò ammonterebbe a circa 1,8 terabyte. Potrebbe essere necessario acquistare ulteriore traffico o passare a una configurazione con due core, poiché non vorrei ridurre la qualità dell'immagine.

***

In conclusione, dico che configurare una tale trasmissione da zero richiede circa 1-2 ore. Gran parte del tempo sarà occupata dal caricamento del video sul server.

Come strumento di marketing, il lancio di questa trasmissione non si è rivelato efficace. Forse, se aumentassi le visualizzazioni affinché gli algoritmi di YouTube captassero questa trasmissione e iniziassero a mostrarla attivamente nelle raccomandazioni, potrebbe funzionare. Nel mio caso, però, dopo 16 giorni di trasmissione continua, è stata vista solo 58 volte.

Niente di grave. La trasmissione si è integrata armoniosamente nella pagina principale del mio sito. È stata un'opportunità per formarsi rapidamente un'opinione sul relatore e sulle lezioni stesse.

E un'altra cosa. È importante che la trasmissione non violi i diritti d'autore di nessuno, altrimenti verrà bloccata. Sono tranquillo riguardo alla mia trasmissione poiché ho scelto appositamente frammenti musicali con utilizzo libero, e l'autore del contenuto è seduto al computer accanto e non ha affatto problemi con il fatto che io usi il suo contenuto 🙂

Ma se nella tua trasmissione suona in sottofondo una radio, oppure hai utilizzato il tuo brano preferito durante il montaggio, o hai preso delle riprese da un videoclip musicale popolare, da una serie TV o da un film – allora la tua trasmissione è a rischio. È anche importante che la trasmissione porti almeno un minimo di contenuto significativo, altrimenti potrebbe essere bloccata come spam.

***

Per ora è tutto. Spero che questo manuale possa essere d'aiuto a qualcuno. Se hai qualcosa da aggiungere, scrivimi, sarà un piacere leggere le aggiunte e le precisazioni all'articolo.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster