Transmite tus vídeos en YouTube XNUMX/XNUMX

Últimamente, como hobby, he estado filmando conferencias de un psicólogo que conozco. Edito el metraje y lo publico en mi sitio web. Hace un mes se me ocurrió la idea de organizar una transmisión 24 horas al día, 7 días a la semana de estas conferencias en YouTube. Una especie de “canal de televisión” temático dedicado al crecimiento personal.

Sé cómo hacer una transmisión regular. ¿Pero cómo hacer para que sea una transmisión de archivos de vídeo? Para que funcione 24 horas al día, 7 días a la semana, sea flexible, lo más autónomo posible y al mismo tiempo no dependa en modo alguno del ordenador de mi casa. Esto es lo que tenía que descubrir.

Transmite tus vídeos en YouTube XNUMX/XNUMX

Fueron necesarios varios días para encontrar una solución. Estudié muchos foros y varios manuales sin los cuales mi transmisión simplemente no habría funcionado. Y ahora que la broma es un éxito, siento la necesidad de compartir mi solución. Así apareció este artículo.

En resumen, la solución final fue la siguiente: VPS + ffmeg + script bash. Debajo del corte, describo los pasos dados y hablo de los errores que se descubrieron al organizar la transmisión.

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

Al principio era necesario decidir de dónde sería la transmisión y dónde sería su fuente. Lo primero que me vino a la mente fue desde la computadora de tu casa. Recopile videos en una lista de reproducción y comience a reproducirlos en cualquier reproductor de video. Luego capture la imagen de la pantalla y transmítala a YouTube. Pero casi de inmediato rechacé esta opción porque... Para implementarlo, es necesario mantener el ordenador de casa encendido constantemente, lo que significa ruido de las neveras portátiles incluso por la noche y un mayor consumo de electricidad (+100-150 kWh cada mes). Y resulta que no podrás utilizar la computadora de tu casa durante la transmisión. cualquier movimiento del mouse será visible en la transmisión.

Entonces comencé a mirar hacia un lado servicios en la nube. Estaba buscando un servicio listo para usar donde pudiera subir mis videos o, por ejemplo, insertar enlaces a videos de YouTube y todo estaría empaquetado en una transmisión continua. Pero no encontré nada adecuado. Quizás no busqué bien. Lo único que se ajusta a la funcionalidad es restream.io, un servicio que ayuda a transmitir simultáneamente a varias plataformas. Parece que te permiten subir tus propios vídeos. 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 fuera posible organizar una transmisión las XNUMX horas del día, entonces se dispararía a decenas o incluso cientos de dólares por mes. Pero todavía quería organizar la transmisión de forma gratuita o con una mínima inversión financiera.

Quedó claro que para la transmisión era necesario o dispositivo separado o incluso una computadora separada. Estaba pensando en algo como Raspberri Pi. ¿Y qué? No tiene hielera. Grabé el video en una unidad flash, conecté el cable Ethernet, lo dejé en algún lugar apartado y lo transmití. Opción. Pero no tenía la placa en sí ni experiencia con ella, así que también rechacé esta opción.

Como resultado, me encontré con cierta discusión donde discutían la creación servidor propio transmisiones. No era exactamente lo que estaba buscando, pero entendí la idea principal: ¡puedes usar un servidor! En esa discusión, se sugirió utilizar una combinación de VPS + nginx + OBS. Quedó claro que esta combinación también podría ser adecuada para mí. Lo único que me confundió fue que nunca había administrado un servidor y me parecía que tener mi propio servidor dedicado era confuso y costoso. Decidí averiguar cuánto costaría alquilar un servidor con una configuración mínima y quedé gratamente sorprendido.

Transmite tus vídeos en YouTube XNUMX/XNUMX

Los precios están indicados en rublos bielorrusos y son sólo migajas. Para entenderlo, 8 rublos bielorrusos equivalen a unos 3.5 dólares o 240 rublos rusos. Durante un mes de uso de una computadora completa que esté encendida las 24 horas del día, los 7 días de la semana y que tenga acceso rápido a Internet. Por alguna razón, este descubrimiento me hizo muy feliz y durante varios días caminé terriblemente feliz, como un niño que descubre los cohetes espaciales :)

Por cierto, aproveché la oferta del primer sitio que me dio Google para la consulta “alquiler de VPS”. Quizás haya soluciones aún más económicas, pero este precio me convenía y no busqué más.

Al crear un servidor, puede seleccionar el sistema operativo bajo el cual se ejecutará. Puede organizar una transmisión en cualquiera de los sistemas enumerados y elegir según sus preferencias y capacidades financieras (para un servidor con Windows solicitan una tarifa adicional). Elegí CentOS. Simplemente porque antes tenía poca experiencia con eso.

Transmite tus vídeos en YouTube XNUMX/XNUMX

Paso 2: configuración del servidor

Lo primero que necesita después de crear un 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. Resultó más conveniente para mí.

Luego cambié el nombre del host, configuré la sincronización horaria en el servidor, actualicé el sistema, modifiqué iptables... e hice un montón de cosas más, pero no porque fuera necesario. Solo estaba interesado en configurar el servidor y funcionó para mí. Me encanta cuando funciona :)

Estos son los pasos que debe seguir:

  1. Conecte el repositorio EPEL.
  2. Configure un servidor FTP (elegí vsftp).
  3. Instale ffmpeg.

No daré las órdenes en detalle; estas instrucciones son más bien conceptuales para transmitir el plan general de acción. Si tiene alguna dificultad con alguno de los pasos, puede resolverla rápidamente utilizando una consulta en un motor de búsqueda como “CentOS connect EPEL” o “CentOS install FTP server”. Y en los primeros enlaces puedes encontrar instrucciones detalladas paso a paso.

Entonces, como escribí antes, necesitaba una combinación de VPS + nginx + OBS. VPS – listo. Pero empezaron a surgir preguntas sobre otros puntos. OBS es un programa de radiodifusión, Open Broadcaster Software. Y solo funciona con transmisiones, es decir. por ejemplo, toma una imagen de una cámara web y la transmite. O grabación de pantalla. O una transmisión que ya está en curso se redirige a otro sitio. Pero no tengo una transmisión, solo tengo un conjunto de archivos de video que deben convertirse en una transmisión.

Empecé a investigar en esta dirección y encontré ffmpeg. FFmpeg es un conjunto de bibliotecas gratuitas y de código abierto que le permiten grabar, convertir y transmitir audio y vídeo digital en una variedad de formatos.

Y me sorprendió mucho lo mucho que puede hacer ffmpeg. Si lo deseas, extraerá el sonido del vídeo. Si lo deseas, recortará un fragmento del vídeo sin grabarlo. Si lo desea, convertirá de un formato a otro. Y mucho, mucho más. Hasta el punto de que puedes especificarle un archivo, lo convertirá en una secuencia y la transmitirá al propio YouTube. Eso es todo, la cadena está montada. Sólo queda ultimar los matices.

Paso 3: configuración de transmisión

Creamos una transmisión en YouTube. En esta etapa sólo necesitamos el enlace y la clave de transmisión. En la captura de pantalla siguiente, están resaltados en rojo.

Transmite tus vídeos en YouTube XNUMX/XNUMX

Siguiente subir archivos de vídeo al servidor, que planeamos transmitir. En realidad, FTP sólo es necesario para esta etapa. Si tiene otra forma conveniente de cargar archivos al servidor, entonces no es necesario configurar un servidor FTP.

Transmitimos la transmisión a YouTube. Para comenzar a transmitir, necesitas ejecutar ffmpeg con varios atributos. Así es como se ve el comando más corto que recibí:

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

Decodificación de atributos-re – indica que el archivo debe convertirse en una secuencia.

-i – indica qué archivo se debe reproducir. Es importante que el comando se ejecute desde el mismo directorio donde se encuentra el archivo de vídeo. De lo contrario, debe especificar un enlace absoluto al archivo, como /usr/media/lecture1.mp4.

-f – establece el formato del archivo de salida. En mi caso, resulta que ffmpeg convierte mi archivo de mp4 a flv sobre la marcha.

Y al final indicamos los datos que tomamos de YouTube en la página de configuración de transmisión, es decir la dirección a la que necesita transferir datos y la clave de transmisión, para que la transmisión se muestre específicamente en su canal.

Si hizo todo correctamente, después de ejecutar este comando, YouTube verá la transmisión transmitida. Para iniciar la transmisión, solo necesita hacer clic en el botón "Iniciar transmisión" en el propio YouTube.

Paso 4: agregue autonomía

¡Felicidades! Ahora ya sabes cómo empezar a transmitir desde un archivo de vídeo. Pero esto no es suficiente para una transmisión XNUMX horas al día, XNUMX días a la semana. Es importante que una vez que termine de reproducirse el primer vídeo, inmediatamente comience el siguiente, y cuando se muestren todos los vídeos, se reinicie la reproducción.

Se me ocurrió la siguiente opción: crear un archivo .sh en el que escribí un comando para cada archivo de video y al final indiqué un comando para ejecutar el mismo script nuevamente. El resultado es una recursividad como esta:

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

Y sí, funcionó. Satisfecho conmigo mismo, lancé una transmisión de prueba y me fui a la cama.

Por la mañana me esperaba una desagradable sorpresa. Resultó que la transmisión duró sólo un par de minutos y terminó casi inmediatamente cuando apagué mi computadora. La investigación mostró que los comandos lanzados de esta manera se ejecutan mientras el usuario inicia sesión en el servidor. Tan pronto como me desconecté, los comandos que estaba ejecutando se interrumpieron. Para evitar que esto suceda, basta delante del equipo. bash agrega el comando nohup. Esto permitirá que el proceso en 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 está escrito este script. Y este archivo debe estar ubicado en el mismo directorio que los archivos de video.

Agregar un signo de dólar al final permite que el proceso se ejecute en segundo plano para que puedas continuar usando la consola sin interrumpir la transmisión.

Los bonos incluyeron los siguientes obsequios:

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

Paso 5: personaliza ffmpeg

En principio, podríamos habernos quedado ahí. Pero quería que la transmisión fuera un poco más amigable para los espectadores.

Digamos que una persona fue a la transmisión, comenzó a mirarla, le gustó y quiso ver esta conferencia desde el principio, pero la transmisión no permite rebobinar. Para ver una conferencia desde el principio, una persona deberá ir a mi sitio web y obtener una grabación de la conferencia de su interés. ¿Cómo puedes saber qué conferencia le interesa? Ya hay 16 conferencias en el sitio y cada semana hay más. Creo que ni siquiera yo, que filmé y edité todas estas conferencias, podré determinar a partir de un fragmento aleatorio de qué conferencia se trata. Por lo tanto, es necesario que cada conferencia esté designada de alguna manera.

La opción de agregar subtítulos a los archivos de video fuente en el programa de edición no me convenía. Era necesario asegurarse de que se utilizaran los archivos originales. De modo que apoyar la transmisión requiere de mi parte la menor cantidad de movimientos corporales posibles.

Resultó que ffmpeg también podría ayudarme con esto. Tiene un atributo especial -vf, que permite colocar texto sobre vídeo. Para agregar texto a un 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"

Explicación de parámetros.fontfile= – enlace al archivo de fuente. Sin esto, el título no se agregará al video. La forma más sencilla es colocar el archivo de fuente en la misma carpeta que el vídeo. O deberá especificar la ruta completa al archivo.

text= – en realidad, el texto en sí que debe colocarse encima del vídeo.

fontsize= – tamaño de fuente en píxeles.

fontcolor= - color de fuente.

borderw= – el grosor del contorno alrededor del texto en píxeles (tengo texto blanco con un contorno negro de 1 píxel de grosor).

bordercolor= – color de contorno.

x= и y= – coordenadas de texto. Punto 0;0 se encuentra en la esquina superior izquierda. Mis coordenadas se seleccionan de tal manera que el texto se coloca en la esquina inferior izquierda con una resolución de video de 1280x720 píxeles.

Se parece a esto:

Transmite tus vídeos en YouTube XNUMX/XNUMX

Paso 6: determine la calidad de la transmisión

Eso es todo, la transmisión está lista. Transmisiones FFmpeg, se reproducen archivos, no se necesita mi presencia para la transmisión. Incluso cada conferencia está firmada. Parece que eso es todo.

Pero surgió un matiz más: elegí la configuración mínima del servidor y no inició la transmisión. Configuración del servidor: 1 núcleo (como 2.2 GHz), 1 gigabyte de RAM, 25 GB SSD. Había suficiente RAM, pero el procesador estaba casi completamente cargado al 100% (y a veces incluso al 102-103% :) Esto provocó que la transmisión se congelara cada pocos segundos.

Simplemente podría elegir una configuración más cara con dos núcleos; afortunadamente, con las tecnologías en la nube, el cambio en la configuración del servidor se realiza presionando un par de botones. Pero quería encajar en la capacidad mínima de configuración. Comencé a estudiar la documentación de ffmpeg y sí, también hay configuraciones que te permiten regular la carga en el sistema.

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

Mi servidor tiene acceso a un canal de 10 Mbit/s de ancho. Este ancho es perfecto. Pero existe un límite de tráfico: 1 TB por mes. Por lo tanto, para cumplir con las restricciones de tráfico, mi flujo saliente no debe exceder ~300 KB por segundo, es decir, La tasa de bits del flujo saliente no debe ser superior a 2,5 Mbit/s. YouTube, por cierto, recomienda transmitir a esta tasa de bits.

Para regular la carga en el sistema, ffmpeg utiliza diferentes enfoques. Bien escrito sobre esto aquí. Terminé usando dos atributos: -crf и -preset.

Factor de tasa constante (CRF) – este es un coeficiente gracias al cual puedes ajustar la calidad de la imagen. CRF puede tener valores 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 un coeficiente de 17, el vídeo será visualmente idéntico al original, pero técnicamente no será el mismo. La documentación también indica que el tamaño del vídeo 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 seleccionar el "peso" de la imagen saliente y luego usar ajustes preestablecidos (-preestablecido) puede determinar cuánto se cargará el procesador. Este atributo tiene los siguientes parámetros:

  • 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 seleccioné un ajuste preestablecido que era básicamente demasiado difícil para mi procesador, y luego seleccioné la carga con mayor precisión usando CRF. En mi caso, el preset funcionó. fast, y para crf me decidí por el valor 24.

Conclusión

Eso es todo. El comando final para iniciar la transmisión fue 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/%КЛЮЧ_ТРАНСЛЯЦИИ%

Aquí solo quedan dos puntos no descritos:

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

Puedes ver qué calidad resultó ser la transmisión. aquí.

La carga en el servidor fue la siguiente:

Transmite tus vídeos en YouTube XNUMX/XNUMX

Transmite tus vídeos en YouTube XNUMX/XNUMX

Según los datos de seguimiento, queda claro que la carga del procesador oscila entre el 70% y el 95% y durante la semana la transmisión nunca llegó al 100%. Esto significa que con esta configuración el procesador es suficiente.

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

Pero me preocupa la cantidad de tráfico saliente. Resulta que mi flujo saliente oscila entre 450 y 650 KB por segundo. En un mes esto será alrededor de 1,8 terabytes. Quizás tengas que comprar tráfico adicional o cambiar a una configuración con dos núcleos porque... No me gustaría reducir la calidad de la imagen.

***

Como resultado, diré que configurar una transmisión de este tipo desde cero lleva entre 1 y 2 horas. Además, cargar el vídeo en el servidor llevará la mayor parte del tiempo.

El lanzamiento de dicha transmisión no se justificaba como herramienta de marketing. Quizás, si aumentamos las vistas para que los algoritmos de YouTube capten esta transmisión y comiencen a mostrarla activamente en las recomendaciones, entonces algo funcionará. En mi caso, en 16 días de emisión continua fue visto 58 veces.

Es correcto. La transmisión encaja armoniosamente en la página principal de mi sitio web. Esto me dio la oportunidad de formarme rápidamente mi propia opinión sobre el conferenciante y las conferencias en sí.

Y un momento. Es importante que la transmisión no viole los derechos de autor de nadie, de lo contrario será bloqueada. Estoy tranquilo con mi transmisión porque... Elegí específicamente inserciones de música de uso gratuito, y la autora del contenido se sienta frente a una computadora cercana y no se opone en absoluto a que use su contenido :)

Pero si tienes una radio sonando de fondo en algún lugar de tu transmisión, o usaste tu pista favorita durante la edición, o tomaste una secuencia de video de un video musical, serie de televisión o película popular, entonces tu transmisión está en riesgo. También es importante que la transmisión tenga al menos una carga semántica mínima, de lo contrario puede ser bloqueada como spam.

***

Eso es todo lo que tengo. Espero que este manual le sirva a alguien. Bueno, si tienes algo que añadir, escribe, estaré encantado de leer los añadidos y aclaraciones al artículo.

Fuente: habr.com

Añadir un comentario