Emite os teus vídeos en YouTube as XNUMX horas do día

Ultimamente, por afección, estou filmando conferencias dun psicólogo que coñezo. Edito a imaxe e publícoa no meu sitio web. Hai un mes xurdínme a idea de organizar unha emisión 24/7 destas conferencias en YouTube. Unha especie de “canle de televisión” temática dedicada ao crecemento persoal.

Sei facer unha emisión regular. Pero como facelo para que sexa unha emisión de ficheiros de vídeo? Para que funcione 24/7, sexa flexible, o máis autónomo posible e, ao mesmo tempo, non dependa de ningún xeito do meu ordenador doméstico. Isto é o que tiña que descubrir.

Emite os teus vídeos en YouTube as XNUMX horas do día

Tardaron varios días en atopar unha solución. Estudei moitos foros e varios manuais sen os cales a miña emisión simplemente non tería funcionado. E agora que a broma é un éxito, sinto a necesidade de compartir a miña solución. Así apareceu este artigo.

En resumo, a solución final foi a seguinte: VPS + ffmeg + script bash. Baixo o corte, describo os pasos dados e falo das trampas que se descubriron á hora de organizar a emisión.

Paso 1: de onde sairá a emisión?

Nun primeiro momento houbo que decidir de onde sería a emisión e onde sería a súa orixe. O primeiro que se me ocorreu foi desde o seu ordenador doméstico. Recolle vídeos nunha lista de reprodución e comeza a reproducilos en calquera reprodutor de vídeo. A continuación, captura a imaxe da pantalla e emítea a YouTube. Pero case de inmediato rexeitei esta opción porque... Para implementalo, cómpre manter o ordenador doméstico aceso constantemente, o que supón ruído dos refrixeradores incluso pola noite e aumento do consumo de electricidade (+100-150 kWh cada mes). E resulta que non poderás usar o teu ordenador doméstico durante a emisión. calquera movemento do rato será visible na emisión.

Entón comecei a mirar para o lado servizos na nube. Buscaba un servizo preparado no que puidese cargar os meus vídeos ou, por exemplo, inserir ligazóns a vídeos de YouTube e todo sería empaquetado nunha soa emisión sen parar. Pero non atopei nada axeitado. Quizais non busquei ben. O único que se adapta á funcionalidade é restream.io, un servizo que axuda a emitir simultaneamente a varias plataformas. Parece que che permiten cargar os teus propios vídeos. Pero este servizo foi creado para propósitos completamente diferentes e agardan que a emisión dure só un par de horas. Creo que se a través deste servizo fose posible organizar unha emisión as XNUMX horas do día, entón dispararíase a decenas, ou mesmo centos de dólares ao mes. Pero aínda quería organizar a emisión ben de balde ou cun mínimo investimento económico.

Quedou claro que para a emisión era necesario ou dispositivo separado ou incluso un ordenador separado. Estaba pensando en algo como Raspberri Pi. E que? Non ten frigorífico. Gravei o vídeo nunha unidade flash, enchufei o cable Ethernet e deixeino nalgún lugar illado e transmitín. Opción. Pero non tiña nin a propia directiva nin experiencia traballando con ela, polo que tamén rexeitei esta opción.

Como resultado, atopeime cunha certa discusión onde discutían a creación servidor propio emisións. Non era exactamente o que buscaba, pero teño a idea principal: podes usar un servidor! Nesa discusión, suxeriuse usar unha combinación de VPS + nginx + OBS. Quedou claro que esta combinación tamén me podía adaptar. O único que me confundiu foi que nunca administrara un servidor e pareceume que ter o meu propio servidor dedicado era confuso e caro. Decidín descubrir canto custaría alugar un servidor cunha configuración mínima e quedei gratamente sorprendido.

Emite os teus vídeos en YouTube as XNUMX horas do día

Os prezos están indicados en rublos bielorrusos e son só migas. Para entender, 8 rublos bielorrusos son uns 3.5 dólares ou 240 rublos rusos. Durante un mes usando un ordenador completo que está acendido as 24 horas do día, os 7 días da semana e que ten acceso rápido a Internet. Por algún motivo, este descubrimento fíxoseme moi alegre e durante varios días andei terriblemente feliz, coma un neno que descubriu foguetes espaciais :)

Por certo, aproveitei a oferta do primeiro sitio que me deu Google para a consulta "aluguer de VPS". Quizais aínda haxa máis solucións orzamentarias, pero este prezo axeitoume e non busquei máis lonxe.

Ao crear un servidor, pode seleccionar o sistema operativo no que se executará. Podes organizar unha emisión en calquera dos sistemas enumerados e facer unha elección en función das túas preferencias e capacidades financeiras (para un servidor con Windows solicitan unha tarifa adicional). Eu escollín CentOS. Simplemente porque tiña pouca experiencia con iso antes.

Emite os teus vídeos en YouTube as XNUMX horas do día

Paso 2: configuración do servidor

O primeiro que precisa despois de crear un servidor é conectarse a el mediante SSH. Ao principio usei PuTTy, pero despois comecei a usar a aplicación Secure Shell, que se executa en Google Chrome. Resultoume máis cómodo.

Despois cambiei o nome do host, configurei a sincronización horaria no servidor, actualicei o sistema, fixen os iptables... e fixen un montón de cousas máis, pero non porque fose necesario. Só estaba interesado en configurar o servidor e funcionou para min. Encántame cando funciona :)

Aquí tes os pasos que debes seguir:

  1. Conecta o repositorio de EPEL.
  2. Configura un servidor FTP (escollín vsftp).
  3. Instalar ffmpeg.

Non vou dar os comandos en detalle; estas instrucións son máis ben conceptuais para transmitir o plan xeral de acción. Se tes algunha dificultade con algún dos pasos, pódense resolver rapidamente mediante unha consulta do motor de busca como "CentOS conectar EPEL" ou "CentOS instalar servidor FTP". E nas primeiras ligazóns podes atopar instrucións detalladas paso a paso.

Entón, como escribín anteriormente, necesitaba unha combinación de VPS + nginx + OBS. VPS: listo. Pero comezaron a xurdir preguntas noutros puntos. OBS é un programa de radiodifusión, Open Broadcaster Software. E só funciona con fluxos, i.e. por exemplo, toma unha imaxe dunha cámara web e emítea. Ou gravación de pantalla. Ou unha emisión xa en curso é redirixida a outro sitio. Pero non teño un fluxo, só teño un conxunto de ficheiros de vídeo que hai que converter nun fluxo.

Comecei a cavar nesta dirección e atopei ffmpeg. FFmpeg é un conxunto de bibliotecas gratuítas e de código aberto que che permiten gravar, converter e transmitir audio e vídeo dixital en varios formatos.

E sorprendeume moito o que pode facer ffmpeg. Se queres, extraerá o son do vídeo. Se queres, cortará un fragmento do vídeo sen recodificar. Se queres, converterase dun formato a outro. E moito, moito máis. Ata o punto de que lle podes especificar un ficheiro, converterao nun fluxo e transmitirao ao propio YouTube. Xa está, a cadea está montada. Só queda ultimar os matices.

Paso 3: configuración da transmisión

Creamos unha emisión en YouTube. Nesta fase só necesitamos a ligazón e a clave de transmisión. Na captura de pantalla de abaixo están resaltados en vermello.

Emite os teus vídeos en YouTube as XNUMX horas do día

Máis cargar ficheiros de vídeo ao servidor, que pensamos transmitir. En realidade, o FTP só é necesario para esta etapa. Se tes outro xeito cómodo de cargar ficheiros ao servidor, non tes que configurar un servidor FTP.

Transmitimos a transmisión a YouTube. Para comezar a transmitir, cómpre executar ffmpeg con varios atributos. Así é o comando máis curto que recibín:

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

Decodificación de atributos-re – indica que o ficheiro debe converterse nun fluxo.

-i – indica que ficheiro debe reproducirse. É importante que o comando se inicie dende o mesmo directorio onde se atopa o propio ficheiro de vídeo. En caso contrario, debes especificar unha ligazón absoluta ao ficheiro, como /usr/media/lecture1.mp4.

-f – establece o formato do ficheiro de saída. No meu caso, resulta que ffmpeg converte o meu ficheiro de mp4 a flv sobre a marcha.

E ao final indicamos os datos que tomamos de YouTube na páxina de configuración de emisión, é dicir. o enderezo ao que necesitas transferir os datos e a clave de transmisión, para que a emisión se mostre especificamente na túa canle.

Se fixeches todo correctamente, despois de executar este comando, YouTube verá o fluxo transmitido. Para comezar a emisión, só tes que facer clic no botón "Iniciar emisión" no propio YouTube.

Paso 4: engadir autonomía

Parabéns! Agora xa sabes como comezar a transmitir desde un ficheiro de vídeo. Pero isto non é suficiente para a transmisión XNUMX/XNUMX. É importante que despois de que remate o primeiro vídeo, o seguinte comece inmediatamente e, cando se mostren todos os vídeos, a reprodución se inicie de novo.

Ocorréuseme a seguinte opción: crear un ficheiro .sh no que escribín un comando para cada ficheiro de vídeo e ao final indiquei un comando para executar de novo o mesmo script. O resultado é unha recursividade como esta:

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

E, si, funcionou. Satisfeito comigo mesmo, lancei unha emisión de proba e fun para a cama.

Pola mañá agardábame unha desagradable sorpresa. Resultou que a emisión durou só un par de minutos e rematou case inmediatamente cando apaguei o ordenador. A investigación mostrou que os comandos lanzados deste xeito execútanse mentres o usuario está conectado ao servidor. En canto desconectei, interrompéronse os comandos que estaba a executar. Para evitar que isto suceda, abonda diante do equipo bash engade o comando nohup. Isto permitirá que o proceso en execución se execute independentemente da túa presenza.

A versión mínima final do guión ten o seguinte aspecto:

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 $

Onde start.sh é o ficheiro no que está escrito este script. E este ficheiro debe estar situado no mesmo directorio que os ficheiros de vídeo.

Engadir un sinal de dólar ao final permite que o proceso se execute en segundo plano para que poidas seguir usando a consola sen interromper a emisión.

Os bonos incluíron os seguintes beneficios:

  • Pode cambiar manualmente a reprodución de ficheiros. Para iso, cómpre "matar" o proceso ffmpeg en execución. Despois diso, comezará automaticamente a reprodución do seguinte ficheiro da lista.
  • Pódense engadir novos vídeos á emisión sen deter a emisión. Só ten que cargar o vídeo ao servidor, engadir un comando para executar este ficheiro no script e gárdao. Iso é todo. Na seguinte rolda de reprodución, o ficheiro novo emitirase xunto cos ficheiros antigos.

Paso 5: personalizar ffmpeg

En principio, poderiamos parar aí. Pero quería facer a emisión un pouco máis amigable para os espectadores.

Digamos que unha persoa foi á emisión, comezou a vela, gustoulle e quixo ver esta charla dende o principio, pero a emisión non permite rebobinar. Para ver unha conferencia desde o principio, unha persoa terá que ir ao meu sitio web e obter unha gravación da conferencia de interese. Como podes saber que conferencia lle interesa? Xa hai 16 conferencias no sitio e só hai máis cada semana. Penso que nin eu, que filmei e montei todas estas conferencias, non poderei determinar a partir dun fragmento aleatorio de que conferencia se trata. Polo tanto, é necesario que cada conferencia estea designada dalgún xeito.

A opción de engadir subtítulos aos ficheiros de vídeo fonte no programa de edición non me convenía. Era necesario asegurarse de que se utilizaban os ficheiros orixinais. Para que apoiar a emisión require de min os mínimos movementos corporais posibles.

Resultou que ffmpeg tamén podería axudarme con isto. Ten un atributo especial -vf, que permite colocar texto sobre o vídeo. Para engadir texto a un vídeo, cómpre engadir o seguinte fragmento ao comando:

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

Explicación dos parámetrosfontfile= - ligazón ao ficheiro de fonte. Sen isto, o subtítulo non se engadirá ao vídeo. O xeito máis sinxelo é poñer o ficheiro de fonte no mesmo cartafol que o vídeo. Ou terá que especificar a ruta completa ao ficheiro.

text= – en realidade, o propio texto que hai que colocar enriba do vídeo.

fontsize= - tamaño da fonte en píxeles.

fontcolor= - cor da letra.

borderw= – o grosor do contorno ao redor do texto en píxeles (teño texto branco cun contorno negro de 1 píxel de grosor).

bordercolor= - cor do contorno.

x= и y= - Coordenadas do texto. Punto 0;0 está situado na esquina superior esquerda. As miñas coordenadas están seleccionadas de tal xeito que o texto se coloque na esquina inferior esquerda cunha resolución de vídeo de 1280x720 píxeles.

Parece así:

Emite os teus vídeos en YouTube as XNUMX horas do día

Paso 6: determina a calidade da emisión

Xa está, a emisión está lista. Emisións FFmpeg, reprodúcense ficheiros, a miña presenza non é necesaria para emitir. Incluso cada conferencia está asinada. Parece que é iso.

Pero xurdiu un matiz máis: escollín a configuración mínima do servidor e non puxo en marcha a emisión. Configuración do servidor: 1 núcleo (como 2.2 GHz), 1 gigabyte de RAM, 25 GB SSD. Había RAM suficiente, pero o procesador estaba case completamente cargado ao 100% (e ás veces ata ao 102-103% :) Isto levou a que a transmisión se conxelase cada poucos segundos. Non é agradable.

Poderías simplemente tomar unha configuración máis cara con dous núcleos, afortunadamente, coas tecnoloxías da nube, o cambio da configuración do servidor prodúcese premendo un par de botóns. Pero quería encaixar na capacidade de configuración mínima. Comecei a estudar a documentación de ffmpeg e si, tamén hai axustes alí que permiten regular a carga do sistema.

Pódese conseguir unha alta calidade de imaxe de dous xeitos: carga elevada da CPU ou tráfico de saída elevado. Resulta que canto máis carga poida asumir o procesador, menos ancho de banda da canle será necesario. Ou non pode cargar demasiado o procesador, pero entón necesitará unha canle ampla cun gran espazo de tráfico. Se hai restricións tanto no procesador como no tamaño da canle/tráfico de saída, terás que reducir a calidade da imaxe para que a transmisión transcorra sen problemas.

O meu servidor ten acceso a unha canle de 10 Mbit/s de ancho. Este ancho é o correcto. Pero hai un límite de tráfico: 1 TB ao mes. Polo tanto, para cumprir coas restricións de tráfico, o meu fluxo de saída non debería superar ~300 KB por segundo, é dicir. A taxa de bits do fluxo de saída non debe ser superior a 2,5 Mbit/s. YouTube, por certo, recomenda emitir a esta taxa de bits.

Para regular a carga do sistema, ffmpeg usa diferentes enfoques. Ben escrito sobre isto aquí. Acabei usando dous atributos: -crf и -preset.

Factor de taxa constante (CRF) – este é un coeficiente grazas ao cal podes axustar a calidade da imaxe. CRF pode ter valores de 0 a 51, onde 0 é a calidade do ficheiro fonte, 51 é a peor calidade posible. Recoméndase usar valores de 17 a 28, o predeterminado é 23. Cun coeficiente de 17, o vídeo será visualmente idéntico ao orixinal, pero tecnicamente non será o mesmo. A documentación tamén indica que o tamaño do vídeo final, dependendo do CRF especificado, cambia exponencialmente, é dicir. aumentar o coeficiente en 6 puntos duplicará a taxa de bits do vídeo saínte.

Se usa CRF pode seleccionar o "peso" da imaxe saínte e, a continuación, usar presets (-preset) pode determinar o intenso que se cargará o procesador. Este atributo ten os seguintes parámetros:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - valor por defecto
  • slow
  • slower
  • veryslow

Canto máis "rápido" se especifique o parámetro, maior será a carga do procesador.

Primeiro seleccionei un preselección que era basicamente demasiado duro para o meu procesador e despois seleccionei a carga con máis precisión usando CRF. No meu caso, o preselección funcionou fast, e para crf decidín co valor 24.

Conclusión

Iso é todo. O comando final para iniciar a emisión foi este:

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

Só quedan dous puntos non descritos aquí:

1) -c:v libx264 – especificando un códec específico para traballar co ficheiro fonte.
2) -g 3 – indicación explícita do número de fotogramas clave. Neste caso, especifícase que cada terceiro fotograma debe ser un fotograma clave. O valor estándar é 5 ou 8, pero YouTube xura e pide polo menos 3.

Podes ver que calidade resultou ser a emisión aquí.

A carga no servidor foi a seguinte:

Emite os teus vídeos en YouTube as XNUMX horas do día

Emite os teus vídeos en YouTube as XNUMX horas do día

Segundo os datos de seguimento, está claro que a carga do procesador oscila entre o 70% e o 95% e durante a semana a emisión nunca chegou ao 100%. Isto significa que con estas configuracións o procesador é suficiente.

Ao cargar o disco, podo dicir que case non está cargado e un disco duro normal debería ser suficiente para a transmisión.

Pero a cantidade de tráfico de saída preocúpame. Resulta que o meu fluxo de saída oscila entre 450 e 650 KB por segundo. Nun mes será duns 1,8 terabytes. Quizais teñas que comprar tráfico adicional ou cambiar a unha configuración con dous núcleos porque... Non me gustaría reducir a calidade da imaxe.

***

Como resultado, direi que a creación dunha emisión deste tipo desde cero leva unhas 1-2 horas. Ademais, cargar o vídeo ao servidor levará a maior parte do tempo.

O lanzamento de tal emisión non se xustificaba como ferramenta de mercadotecnia. Quizais, se aumentamos as visualizacións para que os algoritmos de YouTube recollen esta emisión e comezan a mostrala activamente en recomendacións, algo funcionaría. No meu caso, en 16 días de emisión continua foi visto 58 veces.

Iso está ben. A emisión encaixa harmoniosamente na páxina principal do meu sitio web. Isto deume a oportunidade de formar rapidamente a miña propia opinión sobre o profesor e as propias conferencias.

E un momento. É importante que a emisión non viole os dereitos de autor de ninguén, se non, bloquearase. Estou tranquilo coa miña emisión porque... Escollín especificamente insercións de música con uso gratuíto e a autora do contido está sentada nun ordenador próximo e non se opón en absoluto a que eu use o seu contido :)

Pero se tes unha radio soando en segundo plano nalgún lugar da túa emisión, ou usaches a túa canción favorita durante a edición ou tomaches unha secuencia de vídeo dun vídeo musical popular, unha serie de televisión ou unha película, entón a túa emisión está en perigo. Tamén é importante que a emisión leve polo menos unha carga semántica mínima, se non, pode bloquearse como spam.

***

Iso é todo o que teño. Espero que este manual lle sirva a alguén. Ben, se tes algo que engadir, escribe, estarei encantado de ler as adicións e aclaracións do artigo.

Fonte: www.habr.com

Engadir un comentario