Transmite tus videos en YouTube las 24 horas

Recientemente, como hobby, estoy filmando las conferencias de un psicólogo familiar en video. Monto y publico las imágenes en mi sitio web. Hace un mes, tuve la idea de organizar una transmisión las 24 horas del día de estas conferencias en YouTube 24/7. Una especie de "canal" temático dedicado al crecimiento personal.

Cómo hacer una transmisión normal, lo sé. Pero, ¿cómo convertirlo en una transmisión de archivos de video? Que caminaba las 24 horas, los 7 días de la semana, era flexible, lo más autónoma posible y, al mismo tiempo, no dependía de la computadora de mi casa. Esto fue lo que tuve que averiguar.



Tardó varios días en encontrar una solución. Estudié muchos foros y varios manuales sin los cuales mi transmisión simplemente no hubiera resultado. Y ahora, cuando la broma es un éxito, siento la necesidad de compartir mi decisión. Entonces apareció este artículo.

En resumen, la solución final fue la siguiente: VPS + ffmeg + bash script . Debajo del corte, describo los pasos dados y hablo sobre los "escollos" que se descubrieron durante la transmisión.

Paso 1: ¿de dónde irá la transmisión?


Al principio, era necesario determinar dónde se llevará a cabo la transmisión, dónde estará su fuente. Lo primero que me vino a la mente fue desde una computadora en casa . Recopile videos en una lista de reproducción y reprodúzcalos en cualquier reproductor de video. Luego captura la imagen de la pantalla y transmítela a YouTube. Pero casi inmediatamente descarté esta opción. Para implementarlo, debe mantener la computadora de su hogar constantemente encendida, y este es el ruido de los refrigeradores incluso de noche y el aumento del consumo de energía (+ 100-150 kWh cada mes). Y resulta que no podrá usar la computadora de su hogar durante la transmisión. cualquier movimiento del mouse será visible en la transmisión.

Entonces comencé a mirar hacia los servicios en la nube. Estaba buscando un servicio listo para usar en el que pudiera subir sus videos o, por ejemplo, insertar enlaces a videos de YouTube y todo se incluiría en una transmisión continua. Pero no encontré nada adecuado. Quizás me estaba mirando mal. Lo único adecuado para la funcionalidad es restream.io, un servicio que ayuda a transmitir simultáneamente en múltiples plataformas. Parece que pueden subir sus videos. Pero este servicio fue creado para propósitos completamente diferentes y esperan que la transmisión dure solo un par de horas. Creo que si a través de este servicio hubiera sido posible organizar una transmisión las 24 horas del día, esto habría disparado a decenas, o incluso a cientos de dólares al mes. Pero todavía quería organizar la transmisión de forma gratuita o con una inversión financiera mínima.

Quedó claro que necesitas transmitirun dispositivo separado o incluso una computadora separada. Pensando en algo como el Raspberri Pi. ¿Y qué? No tiene enfriador. Grabé el video en una unidad flash USB, conecté un cable Ethernet y lo dejé en un lugar apartado, se está transmitiendo. Opción. Pero no tenía ni el tablero en sí ni la experiencia con él, así que también rechacé esta opción.

Al final, me encontré con una discusión en la que discutieron la creación de su propio servidortransmisiones Esto no era exactamente lo que estaba buscando, pero capté la idea principal: ¡puede usar el servidor! En esa discusión, sugirieron usar un montón de VPS + nginx + OBS. Quedó claro que este grupo podría ser adecuado para mí. Lo único que me confundió fue que nunca administré el servidor y me pareció que mi servidor dedicado era confuso y costoso. Decidí averiguar cuánto costaría alquilar un servidor en la configuración mínima y me sorprendió gratamente.

imagen

Los precios están en rublos bielorrusos y son solo migajas. Para comprenderlo, 8 rublos bielorrusos cuestan alrededor de 3,5 dólares o 240 rublos rusos. Durante un mes usando una computadora completa que está encendida las 24 horas, los 7 días de la semana y tiene acceso rápido a Internet. Por alguna razón, este descubrimiento fue muy alegre para mí, y durante varios días caminé terriblemente feliz como un niño que descubrió cohetes espaciales :)

Por cierto, aproveché la oferta del primer sitio que Google me dio a pedido "Alquiler de VPS". Quizás haya aún más soluciones de presupuesto, pero este precio me convenía y no busqué más.

Al crear un servidor, puede seleccionar el sistema operativo en el que operará. En cualquiera de los sistemas enumerados, puede organizar la transmisión y elegir según sus preferencias y capacidades financieras (solicitan una tarifa adicional para un servidor con Windows). Elegí CentOS. Solo porque solía tener un poco de experiencia con ella.

imagen

Paso 2 - configuración del servidor


Lo primero que necesita después de crear el servidor es conectarse a él a través de SSH. Al principio usé PuTTy, pero luego comencé a usar la aplicación Secure Shell, que se ejecuta en Google Chrome. Entonces resultó ser más conveniente para mí.

Luego cambié el nombre del host, configuré la sincronización de hora en el servidor, actualicé el sistema, me metí con iptables ... e hice un montón de cosas, pero no porque fuera necesario. Fue interesante para mí configurar el servidor y funcionó para mí. Me encanta cuando resulta :)

Pero esos pasos que hay que hacer:

  1. Conecte el repositorio EPEL.
  2. Levantar servidor FTP (elegí vsftp).
  3. Instalar ffmpeg.

No daré detalles del equipo, esta instrucción es más bien conceptual para transmitir un plan de acción general. Si tiene alguna dificultad con alguno de los pasos, se resuelven rápidamente mediante una consulta en un motor de búsqueda como "CentOS connect EPEL" o "Instalación del servidor FTP CentOS". Y en los primeros enlaces puede encontrar instrucciones detalladas paso a paso.

Entonces, como escribí antes, necesitaba un montón de VPS + nginx + OBS. VPS: listo. Pero aquí, sobre los puntos restantes, comenzaron a surgir preguntas. OBS es un programa de difusión, Open Broadcaster Software. Y solo funciona con hilos, es decir por ejemplo, toma una imagen de una cámara web y la transmite. O la grabación de pantalla. O una transmisión ya en curso redirige a otro sitio. Y no tengo una transmisión, solo tengo un conjunto de archivos de video que necesito para hacer una transmisión.

Comenzó a cavar en esta dirección y se encontró con ffmpeg. FFmpeg es un conjunto de bibliotecas gratuitas de código abierto que le permiten grabar, convertir y transferir grabaciones digitales de audio y video en varios formatos.

Y me sorprendió mucho lo que puede hacer ffmpeg. Si lo desea, extraerá el sonido del video. Si lo desea, cortará un fragmento del video sin transcodificarlo. Si lo desea, se convertirá de un formato a otro. Y mucho, mucho más. Hasta el punto de que puede especificar un archivo para él, lo convertirá en una transmisión y lo transferirá a YouTube él mismo. Todo, la cadena está ensamblada. Solo queda refinar los matices.

Paso 3 - configuración de transmisión


Creamos una transmisión en YouTube. En esta etapa, solo necesitamos un enlace y una clave de traducción. En la captura de pantalla a continuación, se resaltan en rojo.

imagen

Luego, suba los archivos de video al servidor que planeamos transmitir. En realidad, FTP solo es necesario para esta etapa. Si tiene otra forma conveniente de cargar archivos al servidor, entonces el servidor FTP se puede omitir.

Transmitimos a YouTube. Para comenzar a transmitir, debe ejecutar ffmpeg con varios atributos. Aquí está el comando más corto que obtuve:

ffmpeg -re -i lecture1.mp4 -f flv rtmp://a.rtmp.youtube.com/live2/%_%

Descifrado de atributos
-re – , .

-i – , . , , -. , /usr/media/lecture1.mp4.

-f – . , ffmpeg « » mp4 flv.

, YouTube .. , , , .

Si hizo todo correctamente, luego de ejecutar este comando, YouTube verá la transmisión transmitida. Para comenzar la transmisión, solo tiene que hacer clic en el botón "Iniciar transmisión" en YouTube.

Paso 4: agrega autonomía


¡Felicidades! Ahora ya sabe cómo comenzar a transmitir desde un archivo de video. Pero esto no es suficiente para la transmisión las 24 horas. Es importante que después de que el primer video termine de reproducirse, el siguiente comenzará de inmediato, y cuando se muestren todos los videos, la reproducción comenzará nuevamente.

Se me ocurrió la siguiente opción: crear un archivo .sh en el que registré un comando para cada archivo de video y al final indiqué un comando para reiniciar el mismo script. Resultó una especie de recursión:

 1... (   lecture1.mp4)
 2... (   lecture2.mp4)
 3... (   lecture3.mp4)
bash start.sh

Y sí, funcionó. Yo, satisfecho de mí mismo, comencé una transmisión de prueba y me fui a dormir.

Una sorpresa desagradable me esperaba en la mañana. Resultó que la transmisión se prolongó solo un par de minutos y terminó casi de inmediato cuando apagué mi computadora. La investigación mostró que los comandos lanzados de esta manera se ejecutan mientras el usuario está autorizado en el servidor. Tan pronto como me desconecté, se interrumpió la ejecución de los comandos que comencé. Para evitar que esto suceda, es suficiente bashagregar el equipo antes que el equipo nohup. Esto permitirá que el proceso de ejecución se ejecute independientemente de su presencia.

La versión mínima final del script se ve así:

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 $

Donde start.sh es el archivo en el que se escribe este script. Y este archivo debe ubicarse en el mismo directorio que los archivos de video.

Agregar un signo de dólar al final le permite iniciar el proceso en segundo plano para que pueda seguir usando la consola sin interrumpir la transmisión.

De las bonificaciones resultaron los siguientes bollos:

  • Puede cambiar manualmente la reproducción de archivos. Para hacer esto, debe "matar" el proceso ffmpeg que se está ejecutando actualmente. Después de eso, la reproducción del siguiente archivo de la lista comenzará automáticamente.
  • Se pueden agregar nuevos videos a la transmisión sin detener la transmisión. Simplemente suba el video al servidor, agregue el comando para ejecutar este archivo en el script, guárdelo. Y eso es. En la siguiente ronda de reproducción, el nuevo archivo ya se transmitirá junto con los archivos antiguos.

Paso 5 - configura ffmpeg


Sobre esto, en principio, uno podría detenerse. Pero quería que la transmisión fuera un poco más amigable para la audiencia.

Supongamos que una persona fue a la transmisión, comenzó a mirar, le gustó y quería ver esta conferencia desde el principio, y la transmisión no incluye rebobinar. Para ver una conferencia desde el principio, una persona deberá ir a mi sitio web y obtener un registro de la conferencia de interés. ¿Y cómo entender qué conferencia le interesa? El sitio tiene 16 conferencias y cada semana solo hay más. Creo que incluso yo, que filmé y edité todas estas conferencias, no podré determinar de qué fragmento se trata. Por lo tanto, es necesario que cada clase sea designada de alguna manera.

La opción de agregar subtítulos a los archivos de video de origen en el programa de edición no me convenía. Era necesario asegurarse de que se utilizaran los archivos originales. Para apoyar la transmisión, requería de mí la menor cantidad posible de movimientos corporales.

Resultó que ffmpeg también me puede ayudar con esto. Tiene un atributo especial -vfque le permite poner texto encima del video. Para agregar texto al video, debe agregar el siguiente fragmento al comando:

-vf drawtext="fontfile=OpenSans.ttf:text=' 13\:  .   ?':fontsize=26:fontcolor=white:borderw=1:bordercolor=black:x=40:y=670"

Decodificación de parámetros
fontfile= – . . . .

text= – , , .

fontsize= – .

fontcolor= – .

borderw= – ( 1 ).

bordercolor= – .

x= y= – . 0;0 . , 1280720 .


Se parece a esto:

imagen

Paso 6: determine la calidad de transmisión


Todo, la transmisión está lista. Transmisiones FFmpeg, reproducción de archivos, mi presencia no es necesaria para la transmisión. Incluso cada conferencia está firmada. Parece que eso es todo.

Pero surgió otro matiz: elegí la configuración mínima del servidor y no retiró la transmisión. Configuración del servidor: 1 núcleo (como 2.2 GHz), 1 gigabyte de RAM, SSD de 25 GB. Había suficiente RAM, pero el procesador se cargó casi por completo al 100% (y, a veces, incluso al 102-103% :) Esto provocó que la transmisión se congelara una vez cada pocos segundos. Feo.

Podría tomar una configuración más costosa con dos núcleos, el beneficio es que con las tecnologías en la nube, la configuración del servidor se cambia presionando un par de botones. Pero quería encajar en la potencia de la configuración mínima. Comencé a estudiar la documentación de ffmpeg y sí, también hay configuraciones allí que le permiten ajustar la carga en el sistema.

La alta calidad de imagen se puede lograr de dos maneras: ya sea con una alta carga del procesador o un gran tráfico saliente. Resulta que cuanto más pueda soportar la carga el procesador, menos ancho de banda necesitará el canal. O no puede cargar mucho el procesador, pero necesitará un canal amplio con un gran margen de tráfico. Si existen restricciones tanto en el procesador como en el tamaño del canal / tráfico saliente, deberá reducir la calidad de la imagen para que la transmisión se realice sin problemas.

Mi servidor tiene un canal de 10 Mbps. Este ancho es recto con un margen. Pero hay un límite de tráfico: 1 TB por mes. Por lo tanto, para cumplir con las restricciones de tráfico, mi transmisión saliente no debe exceder ~ 300 Kb por segundo, es decir la tasa de bits de la transmisión saliente no debe ser superior a 2.5 Mbps. YouTube, por cierto, solo recomienda transmitir en una tasa de bits tan alta.

Ffmpeg utiliza diferentes enfoques para regular la carga en el sistema. Bien escrito sobre esto aquí . Terminé usando dos atributos: -crfy -preset.

Factor de tasa constante (CRF)- este es un coeficiente debido al cual puede ajustar la calidad de la imagen. CRF puede variar de 0 a 51, donde 0 es la calidad del archivo fuente, 51 es la peor calidad posible. Se recomienda utilizar valores del 17 al 28, el valor predeterminado es 23. Con una relación de 17, el video será visualmente idéntico al original, pero técnicamente no lo será. La documentación también establece que el tamaño del video final, dependiendo del CRF especificado, cambia exponencialmente, es decir. aumentar el coeficiente en 6 puntos duplicará la tasa de bits del video saliente.

Si usa CRF puede elegir el "peso" de la imagen saliente, luego, usando los preajustes (-preset) puede determinar cuánto se cargará el procesador. Los parámetros para este atributo tienen lo siguiente:

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

Cuanto más rápido se especifique el parámetro, mayor será la carga en el procesador.

Primero tomé el preajuste, que era básicamente "difícil" para mi procesador, y luego ajusté más finamente la carga usando CRF. En mi caso, apareció el preset fast, y por crf me decidí por un valor de 24.

Conclusión


Eso es todo. El comando final para comenzar la transmisión me dio esto:

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/%_%

Aquí solo hay dos momentos no descritos:

1) -c:v libx264: una indicación de un códec específico para trabajar con el archivo fuente.
2) -g 3- una indicación explícita del número de cuadros clave. En este caso, se indica que cada tercer cuadro debe ser clave. El valor estándar es 5 u 8, pero YouTube jura, pregunta al menos 3.

¿Qué calidad de la transmisión se puede ver aquí ?

La carga del servidor fue la siguiente:

imagen

imagen

según los datos de monitoreo, está claro que la carga del procesador varía del 70% al 95% y la transmisión nunca ha descansado al 100% en una semana. Entonces, con esta configuración, el procesador es suficiente.

Al cargar un disco, puedo decir que casi no está cargado y que un HDD normal debería ser suficiente para transmitir.

Pero la cantidad de tráfico saliente me molesta. Resulta que mi flujo saliente varía de 450 a 650 KB por segundo. Durante un mes será de aproximadamente 1,8 terabytes. Puede que tenga que comprar tráfico o aún cambiar a una configuración de doble núcleo porque No me gustaría reducir la calidad de la imagen.

***

Como resultado, diré que configurar una transmisión de este tipo desde cero toma aproximadamente 1-2 horas. Además, la mayor parte del tiempo llevará subir el video al servidor.

Como herramienta de marketing, el lanzamiento de dicha transmisión no valió la pena. Quizás si termina las vistas para que los algoritmos de YouTube capten esta transmisión y la muestren activamente en las recomendaciones, entonces algo funcionaría. En mi caso, durante 16 días de transmisión continua, fue visto 58 veces.

Es correcto. La transmisión encaja armoniosamente en la página principal de mi sitio. Resultó una especie de oportunidad para decidir rápidamente sobre el profesor y las conferencias en sí.

Y un momento Es importante que la transmisión no viole los derechos de autor de otra persona, de lo contrario se bloqueará. Estoy tranquilo para mi transmisión. Seleccioné especialmente inserciones musicales con uso gratuito, y el autor del contenido se sienta en una computadora vecina y no está en contra de que yo use su contenido :)

Pero si tiene una radio sonando en el fondo en algún lugar del fondo, o usó su pista favorita durante la edición, o tomó un video de un popular video musical, serie o película, entonces su transmisión está en riesgo. También es importante que la transmisión lleve al menos una carga semántica mínima, de lo contrario puede bloquearse como spam.

***

Eso es todo para mí. Espero que este manual sirva bien a alguien. Bueno, si tiene algo que agregar, escriba, con gusto leeré adiciones y aclaraciones al artículo.

All Articles