Trasmetti i tuoi video su YouTube XNUMX ore su XNUMX, XNUMX giorni su XNUMX

Ultimamente, per hobby, ho filmato le lezioni di uno psicologo che conosco. Modifico il filmato e lo pubblico sul mio sito web. Un mese fa mi è venuta l'idea di organizzare una trasmissione di queste conferenze 24 ore su 7, XNUMX giorni su XNUMX su YouTube. Una sorta di “canale televisivo” tematico dedicato alla crescita personale.

So come fare una trasmissione regolare. Ma come fare in modo che si tratti di una trasmissione di file video? In modo che funzioni 24 ore su 7, XNUMX giorni su XNUMX, sia flessibile, il più autonomo possibile e allo stesso tempo non dipenda in alcun modo dal mio computer di casa. Questo è quello che dovevo scoprire.

Trasmetti i tuoi video su YouTube XNUMX ore su XNUMX, XNUMX giorni su XNUMX

Ci sono voluti diversi giorni per trovare una soluzione. Ho studiato molti forum e vari manuali senza i quali la mia trasmissione semplicemente non avrebbe funzionato. E ora che lo scherzo è riuscito, sento il bisogno di condividere la mia soluzione. Ecco come è apparso questo articolo.

In breve, la soluzione finale era la seguente: VPS + ffmeg + script bash. Sotto il taglio descrivo i passi compiuti e parlo delle insidie ​​​​scoperte durante l'organizzazione della trasmissione.

Passaggio 1: da dove verrà la trasmissione?

All'inizio era necessario decidere da dove sarebbe arrivata la trasmissione e quale sarebbe stata la sua fonte. La prima cosa che mi è venuta in mente è stata dal tuo computer di casa. Raccogli i video in una playlist e inizia a riprodurli su qualsiasi lettore video. Quindi acquisisci l'immagine sullo schermo e trasmettila su YouTube. Ma ho rifiutato quasi subito questa opzione perché... Per attuarla è necessario tenere il computer di casa costantemente acceso, il che significa rumore dei frigoriferi anche di notte e aumento del consumo di elettricità (+100-150 kWh ogni mese). E si scopre che non potrai utilizzare il tuo computer di casa durante la trasmissione. qualsiasi movimento del mouse sarà visibile nella trasmissione.

Poi ho iniziato a guardare di lato servizi cloud. Cercavo un servizio già pronto in cui avrei potuto caricare i miei video o, ad esempio, inserire collegamenti a video da YouTube e tutto sarebbe stato racchiuso in un'unica trasmissione non-stop. Ma non ho trovato nulla di adatto. Forse non ho cercato bene. L'unica cosa che soddisfa questa funzionalità è restream.io, un servizio che aiuta a trasmettere simultaneamente su più piattaforme. Sembra che ti permettano di caricare i tuoi video. Ma questo servizio è stato creato per scopi completamente diversi e si prevede che la trasmissione durerà solo un paio d'ore. Penso che se attraverso questo servizio fosse possibile organizzare una trasmissione XNUMX ore su XNUMX, si trasformerebbe in decine o addirittura centinaia di dollari al mese. Ma volevo comunque organizzare la trasmissione gratuitamente o con un investimento finanziario minimo.

È diventato chiaro che per la trasmissione era necessario o dispositivo separato o anche un computer separato. Stavo pensando a qualcosa come Raspberri Pi. E cosa? Non ha un frigorifero. Ho registrato il video su una chiavetta USB, ho collegato il cavo Ethernet, l'ho lasciato riposare da qualche parte in un luogo appartato e l'ho trasmesso. Opzione. Ma non avevo né la scheda in sé né esperienza di lavoro con essa, quindi ho rifiutato anche questa opzione.

Di conseguenza, mi sono imbattuto in una certa discussione in cui discutevano della creazione proprio server trasmissioni. Non era esattamente quello che stavo cercando, ma ho avuto l'idea principale: puoi usare un server! In quella discussione è stato suggerito di utilizzare una combinazione di VPS + nginx + OBS. È diventato chiaro che questa combinazione poteva essere adatta anche a me. L'unica cosa che mi confondeva era che non avevo mai amministrato un server e mi sembrava che avere un server dedicato fosse complicato e costoso. Ho deciso di scoprire quanto costerebbe noleggiare un server con una configurazione minima e sono rimasto piacevolmente sorpreso.

Trasmetti i tuoi video su YouTube XNUMX ore su XNUMX, XNUMX giorni su XNUMX

I prezzi sono indicati in rubli bielorussi e queste sono solo briciole. Per capirci, 8 rubli bielorussi equivalgono a circa 3.5 dollari ovvero 240 rubli russi. Per un mese di utilizzo di un computer a tutti gli effetti acceso 24 ore su 7, XNUMX giorni su XNUMX e con accesso veloce a Internet. Per qualche ragione, questa scoperta è diventata molto gioiosa per me e per diversi giorni ho camminato terribilmente felice, come un bambino che ha scoperto i razzi spaziali :)

A proposito, ho approfittato dell'offerta del primo sito che Google mi ha proposto per la query “noleggio VPS”. Forse ci sono anche più soluzioni economiche, ma questo prezzo mi andava bene e non ho guardato oltre.

Quando crei un server, puoi selezionare il sistema operativo con cui verrà eseguito. Puoi organizzare una trasmissione su uno qualsiasi dei sistemi elencati e fare una scelta in base alle tue preferenze e capacità finanziarie (per un server con Windows chiedono un costo aggiuntivo). Ho scelto CentOS. Semplicemente perché prima ne avevo poca esperienza.

Trasmetti i tuoi video su YouTube XNUMX ore su XNUMX, XNUMX giorni su XNUMX

Passaggio 2: configurazione del server

La prima cosa di cui hai bisogno dopo aver creato un server è connetterti ad esso tramite SSH. All'inizio ho usato PuTTy, ma poi ho iniziato a usare l'app Secure Shell, che funziona in Google Chrome. Si è rivelato più conveniente per me.

Poi ho cambiato il nome host, ho impostato la sincronizzazione dell'ora sul server, ho aggiornato il sistema, ho armeggiato con iptables... e ho fatto un sacco di altre cose, ma non perché fosse necessario. Ero solo interessato a configurare il server e ha funzionato per me. Adoro quando funziona :)

Ecco i passaggi che devi eseguire:

  1. Connetti l'archivio EPEL.
  2. Configura un server FTP (ho scelto vsftp).
  3. Installa ffmpeg.

Non fornirò i comandi in dettaglio; queste istruzioni sono piuttosto concettuali per trasmettere il piano d’azione generale. Se riscontri difficoltà con uno qualsiasi dei passaggi, puoi risolverli rapidamente utilizzando una query del motore di ricerca come "CentOS connect EPEL" o "CentOS install FTP server". E sui primi collegamenti puoi trovare istruzioni dettagliate passo dopo passo.

Quindi, come ho scritto prima, avevo bisogno di una combinazione di VPS + nginx + OBS. VPS – pronto. Ma cominciarono a sorgere interrogativi anche su altri punti. OBS è un programma di trasmissione, Open Broadcaster Software. E funziona solo con i flussi, ad es. ad esempio, prende un'immagine da una webcam e la trasmette. O la registrazione dello schermo. Oppure una trasmissione già in corso viene reindirizzata su un altro sito. Ma non ho uno stream, ho solo una serie di file video che devono essere trasformati in uno stream.

Ho iniziato a scavare in questa direzione e mi sono imbattuto in ffmpeg. FFmpeg è un insieme di librerie gratuite e open source che ti consentono di registrare, convertire e trasmettere in streaming audio e video digitali in una varietà di formati.

E sono rimasto molto sorpreso di quanto possa fare ffmpeg. Se lo desideri, estrarrà l'audio dal video. Se lo desideri, taglierà un frammento del video senza ricodificarlo. Se lo desideri, convertirà da un formato all'altro. E molto, molto altro ancora. Al punto che puoi specificarci un file, lo convertirà in uno stream e lo trasmetterà a YouTube stesso. Questo è tutto, la catena è assemblata. Non resta che finalizzare le sfumature.

Passaggio 3: configurazione della trasmissione

Creiamo una trasmissione su YouTube. In questa fase abbiamo solo bisogno del link e della chiave di trasmissione. Nello screenshot qui sotto sono evidenziati in rosso.

Trasmetti i tuoi video su YouTube XNUMX ore su XNUMX, XNUMX giorni su XNUMX

Avanti caricare file video sul server, che intendiamo trasmettere. In realtà, l'FTP è necessario solo per questa fase. Se disponi di un altro modo conveniente per caricare file sul server, non è necessario configurare un server FTP.

Trasmettiamo lo streaming su YouTube. Per iniziare a trasmettere, devi eseguire ffmpeg con diversi attributi. Questo è l'aspetto del comando più breve che ho ricevuto:

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

Decodificazione degli attributi-re – indica che il file deve essere convertito in uno stream.

-i – indica quale file deve essere riprodotto. È importante che il comando venga avviato dalla stessa directory in cui si trova il file video stesso. Altrimenti, dovresti specificare un collegamento assoluto al file, come /usr/media/lecture1.mp4.

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

E alla fine indichiamo i dati che abbiamo preso da YouTube nella pagina delle impostazioni di trasmissione, ad es. l'indirizzo a cui devi trasferire i dati e la chiave di trasmissione, in modo che la trasmissione venga visualizzata specificamente sul tuo canale.

Se hai fatto tutto correttamente, dopo aver eseguito questo comando, YouTube vedrà il flusso trasmesso. Per avviare la trasmissione, devi solo fare clic sul pulsante "Avvia trasmissione" su YouTube stesso.

Passaggio 4: aggiungi autonomia

Congratulazioni! Ora sai come avviare la trasmissione da un file video. Ma questo non basta per la trasmissione XNUMX ore su XNUMX, XNUMX giorni su XNUMX. È importante che al termine della riproduzione del primo video, venga avviato immediatamente quello successivo e, una volta visualizzati tutti i video, la riproduzione ricominci.

Mi è venuta in mente la seguente opzione: creare un file .sh in cui ho scritto un comando per ogni file video e alla fine ho indicato un comando per eseguire nuovamente lo stesso script. Il risultato è una ricorsione come questa:

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

E sì, ha funzionato. Soddisfatto di me stesso, ho lanciato una trasmissione di prova e sono andato a letto.

Al mattino mi aspettava una spiacevole sorpresa. Si è scoperto che la trasmissione è durata solo un paio di minuti ed è terminata quasi immediatamente quando ho spento il computer. Dall'indagine è emerso che i comandi lanciati in questo modo vengono eseguiti mentre l'utente è connesso al server. Non appena mi sono disconnesso, i comandi che stavo eseguendo sono stati interrotti. Per evitare che ciò accada, è sufficiente davanti alla squadra bash aggiungi il comando nohup. Ciò consentirà al processo in esecuzione di essere eseguito indipendentemente dalla tua presenza.

La versione minima finale dello script è simile alla seguente:

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 $

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

L'aggiunta del simbolo del dollaro alla fine consente l'esecuzione del processo in background in modo da poter continuare a utilizzare la console senza interrompere la trasmissione.

I bonus includevano i seguenti gadget:

  • È possibile cambiare manualmente la riproduzione del file. Per fare ciò, è necessario "uccidere" il processo ffmpeg attualmente in esecuzione. Successivamente, verrà avviata automaticamente la riproduzione del file successivo dall'elenco.
  • È possibile aggiungere nuovi video alla trasmissione senza interrompere la trasmissione. Basta caricare il video sul server, aggiungere un comando per eseguire questo file nello script e salvarlo. È tutto. Al successivo ciclo di riproduzione, il nuovo file verrà trasmesso insieme ai vecchi file.

Passaggio 5: personalizzare ffmpeg

In linea di principio avremmo potuto fermarci lì. Ma volevo rendere la trasmissione un po’ più amichevole per gli spettatori.

Diciamo che una persona è andata alla trasmissione, ha iniziato a guardarla, le è piaciuta e ha voluto guardare questa conferenza dall'inizio, ma la trasmissione non consente il riavvolgimento. Per guardare una conferenza dall'inizio, una persona dovrà visitare il mio sito Web e ottenere una registrazione della conferenza di interesse. Come puoi sapere quale conferenza gli interessa? Ci sono già 16 lezioni sul sito e se ne aggiungono sempre di più ogni settimana. Penso che nemmeno io, che ho filmato e montato tutte queste conferenze, non sarò in grado di determinare da un frammento casuale di quale conferenza si tratti. Pertanto è necessario che ogni lezione sia in qualche modo designata.

L'opzione per aggiungere didascalie ai file video sorgente nel programma di editing non mi andava bene. Era necessario garantire che fossero utilizzati i file originali. In modo che sostenere la trasmissione richieda da parte mia il minor numero possibile di movimenti del corpo.

Si è scoperto che ffmpeg poteva aiutarmi anche in questo. Ha un attributo speciale -vf, che consente di posizionare il testo sul video. Per aggiungere testo a un video, devi aggiungere il seguente frammento al comando:

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

Spiegazione dei parametrifontfile= – collegamento al file del carattere. Senza questo, la didascalia non verrà aggiunta al video. Il modo più semplice è inserire il file del carattere nella stessa cartella del video. Oppure dovrai specificare il percorso completo del file.

text= – in realtà, il testo stesso che deve essere posizionato sopra il video.

fontsize= – dimensione del carattere in pixel.

fontcolor= - colore del carattere.

borderw= – lo spessore del contorno attorno al testo in pixel (ho un testo bianco con un contorno nero spesso 1 pixel).

bordercolor= – colore del contorno.

x= и y= – coordinate del testo. Punto 0;0 si trova nell'angolo in alto a sinistra. Le mie coordinate sono selezionate in modo tale che il testo sia posizionato nell'angolo in basso a sinistra con una risoluzione video di 1280x720 pixel.

Sembra questo:

Trasmetti i tuoi video su YouTube XNUMX ore su XNUMX, XNUMX giorni su XNUMX

Passaggio 6: determinare la qualità della trasmissione

Questo è tutto, la trasmissione è pronta. FFmpeg trasmette, i file vengono riprodotti, la mia presenza non è necessaria per la trasmissione. Anche ogni conferenza è firmata. Sembra che sia tutto.

Ma è emersa un'altra sfumatura: ho scelto la configurazione minima del server e non ha attivato la trasmissione. Configurazione server: 1 core (come 2.2 GHz), 1 gigabyte di RAM, SSD da 25 GB. C'era abbastanza RAM, ma il processore era quasi completamente caricato al 100% (e talvolta anche al 102-103% :) Ciò portava al blocco della trasmissione ogni pochi secondi.

Potresti semplicemente prendere una configurazione più costosa con due core, fortunatamente, con le tecnologie cloud, la modifica della configurazione del server avviene premendo un paio di pulsanti. Ma volevo rientrare nella capacità minima di configurazione. Ho iniziato a studiare la documentazione di ffmpeg e sì, ci sono anche delle impostazioni che ti permettono di regolare il carico del sistema.

È possibile ottenere un'elevata qualità dell'immagine in due modi: elevato carico della CPU o elevato traffico in uscita. Si scopre che maggiore è il carico che il processore può sopportare, minore sarà la larghezza di banda del canale. Oppure non puoi caricare troppo il processore, ma avrai bisogno di un canale ampio con un ampio margine di traffico. Se sono presenti restrizioni sia sul processore che sulla dimensione del canale/traffico in uscita, sarà necessario ridurre la qualità dell'immagine in modo che la trasmissione proceda senza intoppi.

Il mio server ha accesso a un canale largo 10 Mbit/s. Questa larghezza è giusta. Ma esiste un limite di traffico: 1 TB al mese. Pertanto, per rispettare le limitazioni del traffico, il mio flusso in uscita non dovrebbe superare i ~300 KB al secondo, ovvero Il bitrate del flusso in uscita non deve essere superiore a 2,5 Mbit/s. YouTube, a proposito, consiglia di trasmettere con questo bitrate.

Per regolare il carico sul sistema, ffmpeg utilizza diversi approcci. Ben scritto su questo qui. Alla fine ho utilizzato due attributi: -crf и -preset.

Fattore di tasso costante (CRF) – questo è un coefficiente grazie al quale è possibile regolare la qualità dell'immagine. CRF può avere valori da 0 a 51, dove 0 è la qualità del file sorgente, 51 è la peggiore qualità possibile. Si consiglia di utilizzare valori da 17 a 28, il valore predefinito è 23. Con un coefficiente di 17, il video sarà visivamente identico all'originale, ma tecnicamente non sarà lo stesso. La documentazione afferma inoltre che la dimensione del video finale, a seconda del CRF specificato, cambia in modo esponenziale, ad es. aumentando il coefficiente di 6 punti si raddoppierà il bitrate del video in uscita.

Se si utilizza CRF è possibile selezionare il “peso” dell'immagine in uscita, quindi utilizzando preimpostazioni (-preset) puoi determinare quanto pesantemente verrà caricato il processore. Questo attributo ha i seguenti parametri:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - valore di default
  • slow
  • slower
  • veryslow

Più "veloce" viene specificato il parametro, maggiore sarà il carico sul processore.

Per prima cosa ho selezionato un preset che era fondamentalmente troppo difficile per il mio processore, quindi ho selezionato più accuratamente il carico utilizzando CRF. Nel mio caso, il preset ha funzionato fast, e per crf ho optato per il valore 24.

conclusione

È tutto. Il comando finale per avviare la trasmissione era questo:

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

Rimangono solo due punti non descritti:

1) -c:v libx264 – specificando un codec specifico per lavorare con il file sorgente.
2) -g 3 – indicazione esplicita del numero di fotogrammi chiave. In questo caso viene specificato che ogni terzo fotogramma deve essere un fotogramma chiave. Il valore standard è 5 o 8, ma YouTube giura e chiede almeno 3.

Puoi vedere quale qualità è risultata la trasmissione qui.

Il carico sul server era il seguente:

Trasmetti i tuoi video su YouTube XNUMX ore su XNUMX, XNUMX giorni su XNUMX

Trasmetti i tuoi video su YouTube XNUMX ore su XNUMX, XNUMX giorni su XNUMX

In base ai dati di monitoraggio si evince che il carico del processore varia dal 70% al 95% e durante la settimana la trasmissione non ha mai raggiunto il 100%. Ciò significa che con queste impostazioni è sufficiente il processore.

Caricando il disco, posso dire che non è quasi caricato e per la trasmissione dovrebbe essere sufficiente un normale HDD.

Ma la quantità di traffico in uscita mi preoccupa. Risulta che il mio flusso in uscita varia da 450 a 650 KB al secondo. In un mese saranno circa 1,8 terabyte. Potrebbe essere necessario acquistare traffico aggiuntivo o passare a una configurazione con due core perché... Non vorrei ridurre la qualità dell'immagine.

***

Di conseguenza, dirò che l'impostazione di una trasmissione del genere da zero richiede circa 1-2 ore. Inoltre, il caricamento del video sul server richiederà la maggior parte del tempo.

Il lancio di una trasmissione del genere non si giustificava come strumento di marketing. Forse, se aumentassimo le visualizzazioni in modo che gli algoritmi di YouTube rilevassero questa trasmissione e iniziassero a mostrarla attivamente nei consigli, allora qualcosa funzionerebbe. Nel mio caso, in 16 giorni di trasmissione continua è stato visto 58 volte.

Va bene. La trasmissione si inserisce armoniosamente nella pagina principale del mio sito web. Ciò mi ha dato l'opportunità di formarmi rapidamente la mia opinione sul docente e sulle lezioni stesse.

E un momento. È importante che la trasmissione non violi i diritti d’autore di nessuno, altrimenti verrà bloccata. Sono tranquillo riguardo alla mia trasmissione perché... Ho scelto appositamente inserti musicali con utilizzo gratuito e l'autore del contenuto si siede davanti a un computer vicino e non è affatto contrario al fatto che io utilizzi il suo contenuto :)

Ma se hai una radio in sottofondo da qualche parte durante la tua trasmissione, o hai utilizzato la tua traccia preferita durante il montaggio, o hai preso una sequenza video da un video musicale, una serie TV o un film popolare, allora la tua trasmissione è a rischio. È anche importante che la trasmissione porti almeno un carico semantico minimo, altrimenti potrebbe essere bloccata come spam.

***

Questo è tutto quello che ho. Spero che questo manuale possa servire bene a qualcuno. Ebbene, se hai qualcosa da aggiungere, scrivi, sarò felice di leggere le integrazioni e i chiarimenti all'articolo.

Fonte: habr.com

Aggiungi un commento