Diffusez vos vidéos sur YouTube XNUMXh/XNUMX et XNUMXj/XNUMX

Dernièrement, comme passe-temps, j'ai filmé les conférences d'un psychologue que je connais. Je monte les images et les publie sur mon site Web. Il y a un mois, j'ai eu l'idée d'organiser une diffusion 24h/7 et XNUMXj/XNUMX de ces conférences sur YouTube. Une sorte de « chaîne TV » thématique dédiée au développement personnel.

Je sais comment faire une diffusion régulière. Mais comment faire en sorte qu'il s'agisse d'une diffusion de fichiers vidéo ? Pour qu'il fonctionne 24h/7 et XNUMXj/XNUMX, qu'il soit flexible, aussi autonome que possible, et en même temps ne dépend en aucun cas de mon ordinateur personnel. C'est ce que je devais découvrir.

Diffusez vos vidéos sur YouTube XNUMXh/XNUMX et XNUMXj/XNUMX

Il a fallu plusieurs jours pour trouver une solution. J'ai étudié de nombreux forums et divers manuels sans lesquels ma diffusion n'aurait tout simplement pas fonctionné. Et maintenant que la farce est réussie, je ressens le besoin de partager ma solution. C’est ainsi qu’est apparu cet article.

Bref, la solution finale était la suivante : VPS + ffmeg + script bash. Sous le montage, je décris les démarches entreprises et parle des pièges qui ont été découverts lors de l'organisation de la diffusion.

Étape 1 – d’où viendra la diffusion ?

Au tout début, il fallait décider d’où proviendrait l’émission et où serait sa source. La toute première chose qui m'est venue à l'esprit était depuis votre ordinateur personnel. Rassemblez des vidéos dans une liste de lecture et commencez à les lire dans n'importe quel lecteur vidéo. Capturez ensuite l’image de l’écran et diffusez-la sur YouTube. Mais j'ai presque immédiatement rejeté cette option parce que... Pour le mettre en œuvre, vous devez garder votre ordinateur personnel allumé en permanence, ce qui signifie du bruit des glacières même la nuit et une consommation électrique accrue (+100-150 kWh chaque mois). Et il s’avère que vous ne pourrez pas utiliser votre ordinateur personnel pendant la diffusion. tout mouvement de la souris sera visible dans la diffusion.

Puis j'ai commencé à regarder sur le côté services cloud. Je cherchais un service prêt à l'emploi où je pourrais télécharger mes vidéos ou, par exemple, insérer des liens vers des vidéos de YouTube et tout cela serait regroupé dans une seule diffusion non-stop. Mais je n'ai rien trouvé de convenable. Peut-être que je n'ai pas bien cherché. La seule chose qui correspond à la fonctionnalité est restream.io, un service qui permet de diffuser simultanément sur plusieurs plateformes. Ils semblent vous permettre de télécharger vos propres vidéos. Mais ce service a été créé dans un but complètement différent et ils s'attendent à ce que la diffusion ne dure que quelques heures. Je pense que si grâce à ce service il était possible d'organiser une diffusion XNUMX heures sur XNUMX, cela rapporterait des dizaines, voire des centaines de dollars par mois. Mais je voulais quand même organiser la diffusion soit gratuitement, soit avec un investissement financier minimal.

Il est devenu clair que pour la diffusion il fallait ou appareil séparé ou même un ordinateur séparé. Je pensais à quelque chose comme Raspberri Pi. Et quoi? Il n'a pas de glacière. J'ai enregistré la vidéo sur une clé USB, branché le câble Ethernet, je l'ai laissée quelque part dans un endroit isolé et je l'ai diffusée. Option. Mais je n'avais ni la planche elle-même ni l'expérience de travailler avec elle, j'ai donc également refusé cette option.

En conséquence, je suis tombé sur une certaine discussion où ils discutaient de la création propre serveur émissions. Ce n’était pas exactement ce que je cherchais, mais j’ai eu l’idée principale : vous pouvez utiliser un serveur ! Dans cette discussion, il a été suggéré d'utiliser une combinaison de VPS + nginx + OBS. Il est devenu clair que cette combinaison pouvait aussi me convenir. La seule chose qui m'a dérouté, c'est que je n'avais jamais administré de serveur et il me semblait qu'avoir mon propre serveur dédié était déroutant et coûteux. J'ai décidé de savoir combien coûterait la location d'un serveur avec une configuration minimale et j'ai été agréablement surpris.

Diffusez vos vidéos sur YouTube XNUMXh/XNUMX et XNUMXj/XNUMX

Les prix sont indiqués en roubles biélorusses et ce ne sont que des miettes. Pour comprendre, 8 roubles biélorusses équivalent à environ 3.5 dollars ou 240 roubles russes. Pendant un mois d'utilisation d'un ordinateur à part entière, allumé 24h/7 et XNUMXj/XNUMX et doté d'un accès Internet rapide. Pour une raison quelconque, cette découverte est devenue très joyeuse pour moi et pendant plusieurs jours je me suis promené terriblement heureux, comme un enfant qui a découvert des fusées spatiales :)

D’ailleurs, j’ai profité de l’offre du premier site que Google m’a proposé pour la requête « Location VPS ». Il existe peut-être des solutions encore plus économiques, mais ce prix me convenait et je n'ai pas cherché plus loin.

Lors de la création d'un serveur, vous pouvez sélectionner le système d'exploitation sous lequel il fonctionnera. Vous pouvez organiser une diffusion sur n'importe lequel des systèmes répertoriés et faire un choix en fonction de vos préférences et de vos capacités financières (pour un serveur avec Windows, ils demandent des frais supplémentaires). J'ai choisi CentOS. Tout simplement parce que j'en avais peu d'expérience auparavant.

Diffusez vos vidéos sur YouTube XNUMXh/XNUMX et XNUMXj/XNUMX

Étape 2 – configuration du serveur

La première chose dont vous avez besoin après avoir créé un serveur est de vous y connecter via SSH. Au début, j'ai utilisé PuTTy, puis j'ai commencé à utiliser l'application Secure Shell, qui fonctionne dans Google Chrome. Cela s'est avéré plus pratique pour moi.

Ensuite, j'ai changé le nom d'hôte, configuré la synchronisation de l'heure sur le serveur, mis à jour le système, bricolé iptables... et fait plein d'autres choses, mais pas parce que c'était nécessaire. J'étais juste intéressé par la configuration du serveur et cela a fonctionné pour moi. J'adore quand ça marche :)

Voici les étapes à suivre :

  1. Connectez le référentiel EPEL.
  2. Configurez un serveur FTP (j'ai choisi vsftp).
  3. Installez ffmpeg.

Je ne détaillerai pas les commandes ; ces instructions sont plutôt conceptuelles afin de transmettre le plan général d’action. Si vous rencontrez des difficultés avec l'une des étapes, elles peuvent être rapidement résolues en utilisant une requête de moteur de recherche telle que « CentOS connect EPEL » ou « CentOS install FTP server ». Et sur les premiers liens, vous trouverez des instructions détaillées étape par étape.

Donc, comme je l'ai écrit plus tôt, j'avais besoin d'une combinaison de VPS + nginx + OBS. VPS – prêt. Mais des questions ont commencé à se poser sur d’autres points. OBS est un programme de diffusion, Open Broadcaster Software. Et cela ne fonctionne qu'avec les flux, c'est-à-dire par exemple, il prend une image d'une webcam et la diffuse. Ou un enregistrement d'écran. Ou bien une diffusion déjà en cours est redirigée vers un autre site. Mais je n’ai pas de flux, je n’ai qu’un ensemble de fichiers vidéo qui doivent être transformés en flux.

J'ai commencé à creuser dans cette direction et je suis tombé sur ffmpeg. FFmpeg est un ensemble de bibliothèques gratuites et open source qui vous permettent d'enregistrer, de convertir et de diffuser de l'audio et de la vidéo numériques dans une variété de formats.

Et j'ai été très surpris de tout ce que ffmpeg peut faire. Si vous le souhaitez, il extraira le son de la vidéo. Si vous le souhaitez, il coupera un fragment de la vidéo sans recodage. Si vous le souhaitez, il sera converti d'un format à un autre. Et bien plus encore. Au point que vous puissiez lui spécifier un fichier, il le convertira en flux et le transmettra lui-même à YouTube. Ça y est, la chaîne est assemblée. Il ne reste plus qu’à finaliser les nuances.

Étape 3 – configuration de la diffusion

Nous créons une diffusion sur YouTube. A ce stade, nous n'avons besoin que du lien et de la clé de diffusion. Dans la capture d'écran ci-dessous, ils sont surlignés en rouge.

Diffusez vos vidéos sur YouTube XNUMXh/XNUMX et XNUMXj/XNUMX

Suivant télécharger des fichiers vidéo sur le serveur, que nous prévoyons de diffuser. En fait, FTP n'est nécessaire que pour cette étape. Si vous disposez d’un autre moyen pratique de télécharger des fichiers sur le serveur, vous n’avez pas besoin de configurer un serveur FTP.

Nous transmettons le flux sur YouTube. Pour démarrer la diffusion, vous devez exécuter ffmpeg avec plusieurs attributs. Voici à quoi ressemble la commande la plus courte que j'ai reçue :

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

Décodage d'attribut-re – indique que le fichier doit être converti en flux.

-i – indique quel fichier doit être lu. Il est important que la commande soit lancée à partir du même répertoire où se trouve le fichier vidéo lui-même. Sinon, vous devez spécifier un lien absolu vers le fichier, comme /usr/media/lecture1.mp4.

-f – définit le format du fichier de sortie. Dans mon cas, il s'avère que ffmpeg convertit mon fichier de mp4 en flv à la volée.

Et à la fin, nous indiquons les données que nous avons extraites de YouTube sur la page des paramètres de diffusion, c'est-à-dire l'adresse à laquelle vous devez transférer les données et la clé de diffusion, afin que la diffusion soit affichée spécifiquement sur votre chaîne.

Si vous avez tout fait correctement, après avoir exécuté cette commande, YouTube verra le flux transmis. Pour démarrer la diffusion, il vous suffit de cliquer sur le bouton « Démarrer la diffusion » dans YouTube lui-même.

Étape 4 – ajouter de l'autonomie

Toutes nos félicitations! Vous savez maintenant comment démarrer la diffusion à partir d'un fichier vidéo. Mais cela ne suffit pas pour une diffusion XNUMXh/XNUMX et XNUMXj/XNUMX. Il est important qu'une fois la lecture de la première vidéo terminée, la suivante démarre immédiatement et lorsque toutes les vidéos sont affichées, la lecture recommence.

J'ai proposé l'option suivante : créer un fichier .sh dans lequel j'ai écrit une commande pour chaque fichier vidéo et à la toute fin j'ai indiqué une commande pour exécuter à nouveau le même script. Le résultat est une récursion comme celle-ci :

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

Et oui, cela a fonctionné. Satisfait de moi, j'ai lancé une diffusion test et je me suis couché.

Le matin, une mauvaise surprise m'attendait. Il s’est avéré que la diffusion n’a duré que quelques minutes et s’est terminée presque immédiatement lorsque j’ai éteint mon ordinateur. L'enquête a montré que les commandes ainsi lancées sont exécutées pendant que l'utilisateur est connecté au serveur. Dès que je me suis déconnecté, les commandes que j'exécutais ont été interrompues. Pour éviter que cela n'arrive, il suffit devant l'équipe bash ajouter la commande nohup. Cela permettra au processus en cours de s’exécuter quelle que soit votre présence.

La version minimale finale du script ressemble à ceci :

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 $

Où start.sh est le fichier dans lequel ce script est écrit. Et ce fichier doit se trouver dans le même répertoire que les fichiers vidéo.

L'ajout d'un signe dollar à la fin permet au processus de s'exécuter en arrière-plan afin que vous puissiez continuer à utiliser la console sans interrompre la diffusion.

Les bonus comprenaient les goodies suivants :

  • Vous pouvez changer manuellement la lecture du fichier. Pour ce faire, vous devez « tuer » le processus ffmpeg en cours d'exécution. Après cela, la lecture du fichier suivant de la liste démarrera automatiquement.
  • De nouvelles vidéos peuvent être ajoutées à la diffusion sans arrêter la diffusion. Téléchargez simplement la vidéo sur le serveur, ajoutez une commande pour exécuter ce fichier dans le script et enregistrez-le. C'est tout. Lors du prochain cycle de lecture, le nouveau fichier sera diffusé avec les anciens fichiers.

Étape 5 – personnaliser ffmpeg

En principe, nous aurions pu nous arrêter là. Mais je voulais rendre la diffusion un peu plus conviviale pour les téléspectateurs.

Disons qu'une personne est allée à l'émission, a commencé à la regarder, l'a aimé et a voulu regarder cette conférence depuis le début, mais l'émission ne permet pas de rembobiner. Pour regarder une conférence depuis le début, une personne devra se rendre sur mon site Web et obtenir un enregistrement de la conférence qui l'intéresse. Comment savoir quelle conférence l’intéresse ? Il y a déjà 16 conférences sur le site et il y en a de plus en plus chaque semaine. Je pense que même moi, qui ai filmé et monté toutes ces conférences, je ne pourrai pas déterminer à partir d'un fragment aléatoire de quelle conférence il s'agit. Il est donc nécessaire que chaque cours soit désigné d’une manière ou d’une autre.

L'option permettant d'ajouter des sous-titres aux fichiers vidéo sources dans le programme de montage ne me convenait pas. Il fallait s'assurer que les fichiers originaux étaient utilisés. Pour que soutenir l’émission me demande le moins de mouvements corporels possible.

Il s'est avéré que ffmpeg pouvait également m'aider. Il a un attribut spécial -vf, qui permet de placer du texte sur la vidéo. Pour ajouter du texte à une vidéo, vous devez ajouter le fragment suivant à la commande :

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

Explication des paramètresfontfile= – lien vers le fichier de police. Sans cela, la légende ne sera pas ajoutée à la vidéo. Le moyen le plus simple consiste à placer le fichier de police dans le même dossier que la vidéo. Ou vous devrez spécifier le chemin complet du fichier.

text= – en fait, le texte lui-même qui doit être placé au-dessus de la vidéo.

fontsize= – taille de la police en pixels.

fontcolor= - couleur de la police.

borderw= – l'épaisseur du contour autour du texte en pixels (j'ai du texte blanc avec un contour noir de 1 pixel d'épaisseur).

bordercolor= – couleur du contour.

x= и y= – les coordonnées du texte. Point 0;0 est situé dans le coin supérieur gauche. Mes coordonnées sont sélectionnées de telle manière que le texte soit placé dans le coin inférieur gauche avec une résolution vidéo de 1280x720 pixels.

Cela ressemble à ceci :

Diffusez vos vidéos sur YouTube XNUMXh/XNUMX et XNUMXj/XNUMX

Étape 6 – déterminer la qualité de la diffusion

Ça y est, la diffusion est prête. FFmpeg diffuse, les fichiers sont lus, ma présence n'est pas nécessaire pour la diffusion. Même chaque conférence est signée. On dirait que c'est ça.

Mais une autre nuance est apparue : j'ai choisi la configuration minimale du serveur et la diffusion n'a pas été diffusée. Configuration du serveur : 1 cœur (genre 2.2 GHz), 1 Go de RAM, 25 Go SSD. Il y avait suffisamment de RAM, mais le processeur était presque complètement chargé à 100 % (et parfois même à 102-103 % :) Cela entraînait un gel de la diffusion toutes les quelques secondes.

Vous pourriez simplement prendre une configuration plus coûteuse avec deux cœurs, heureusement, avec les technologies cloud, la modification de la configuration du serveur se fait en appuyant sur quelques boutons. Mais je voulais respecter la capacité de configuration minimale. J'ai commencé à étudier la documentation ffmpeg et oui, il y a aussi des paramètres qui permettent de réguler la charge sur le système.

Une qualité d'image élevée peut être obtenue de deux manières : soit une charge CPU élevée, soit un trafic sortant élevé. Il s'avère que plus le processeur peut supporter de charge, moins la bande passante du canal sera nécessaire. Ou vous ne pouvez pas trop charger le processeur, mais vous aurez alors besoin d'un canal large avec une grande marge de trafic. S'il existe des restrictions à la fois sur le processeur et sur la taille du canal/trafic sortant, vous devrez alors réduire la qualité de l'image pour que la diffusion se déroule sans problème.

Mon serveur a accès à un canal large de 10 Mbit/s. Cette largeur est parfaite. Mais il existe une limite de trafic - 1 To par mois. Par conséquent, afin de respecter les restrictions de trafic, mon flux sortant ne doit pas dépasser ~ 300 Ko par seconde, c'est-à-dire Le débit du flux sortant ne doit pas dépasser 2,5 Mbit/s. Soit dit en passant, YouTube recommande de diffuser à ce débit.

Pour réguler la charge sur le système, ffmpeg utilise différentes approches. Bien écrit à ce sujet ici. J'ai fini par utiliser deux attributs : -crf и -preset.

Facteur de taux constant (CRF) – c'est un coefficient grâce auquel vous pouvez ajuster la qualité de l'image. CRF peut avoir des valeurs de 0 à 51, où 0 est la qualité du fichier source, 51 est la pire qualité possible. Il est recommandé d'utiliser des valeurs de 17 à 28, la valeur par défaut est 23. Avec un coefficient de 17, la vidéo sera visuellement identique à l'originale, mais techniquement ce ne sera pas la même. La documentation indique également que la taille de la vidéo finale, en fonction du CRF spécifié, change de façon exponentielle, c'est-à-dire augmenter le coefficient de 6 points doublera le débit de la vidéo sortante.

Si vous utilisez CRF, vous pouvez sélectionner le « poids » de l’image sortante, puis en utilisant préréglages (-preset) vous pouvez déterminer la charge du processeur. Cet attribut a les paramètres suivants :

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - valeur par défaut
  • slow
  • slower
  • veryslow

Plus le paramètre est spécifié « rapide », plus la charge sur le processeur sera élevée.

J'ai d'abord sélectionné un préréglage qui était fondamentalement trop résistant pour mon processeur, puis j'ai sélectionné plus finement la charge à l'aide de CRF. Dans mon cas, le préréglage a fonctionné fast, et pour crf j'ai opté pour la valeur 24.

Conclusion

C'est tout. La commande finale pour démarrer la diffusion était la suivante :

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

Il ne reste ici que deux points non décrits :

1) -c:v libx264 – spécifier un codec spécifique pour travailler avec le fichier source.
2) -g 3 – indication explicite du nombre d'images clés. Dans ce cas, il est précisé qu’une image sur trois doit être une image clé. La valeur standard est de 5 ou 8, mais YouTube jure et en demande au moins 3.

Vous pouvez voir quelle est la qualité de la diffusion ici.

La charge sur le serveur était la suivante :

Diffusez vos vidéos sur YouTube XNUMXh/XNUMX et XNUMXj/XNUMX

Diffusez vos vidéos sur YouTube XNUMXh/XNUMX et XNUMXj/XNUMX

Sur la base des données de surveillance, il est clair que la charge du processeur varie de 70 % à 95 % et qu'au cours de la semaine, la diffusion n'a jamais atteint 100 %. Cela signifie qu'avec ces paramètres, le processeur suffit.

En chargeant le disque, je peux dire qu'il n'est quasiment pas chargé et qu'un disque dur ordinaire devrait suffire pour la diffusion.

Mais la quantité de trafic sortant m'inquiète. Il s'avère que mon flux sortant varie de 450 à 650 Ko par seconde. Dans un mois, cela représentera environ 1,8 téraoctets. Vous devrez peut-être acheter du trafic supplémentaire ou passer à une configuration à deux cœurs car... Je ne voudrais pas réduire la qualité de l'image.

***

En conséquence, je dirai que la mise en place d'une telle diffusion à partir de zéro prend environ 1 à 2 heures. De plus, le téléchargement de la vidéo sur le serveur prendra la plupart du temps.

Le lancement d'une telle émission ne se justifiait pas comme outil marketing. Peut-être que si nous augmentons les vues afin que les algorithmes de YouTube captent cette diffusion et commencent à la montrer activement dans les recommandations, alors quelque chose s'arrangera. Dans mon cas, en 16 jours de diffusion continue, l'émission a été regardée 58 fois.

C'est OK. La diffusion s'intègre harmonieusement sur la page principale de mon site internet. Cela m'a donné l'occasion de me faire rapidement ma propre opinion sur le conférencier et les conférences elles-mêmes.

Et un instant. Il est important que la diffusion ne viole les droits d’auteur de personne, sinon elle sera bloquée. Je suis calme à propos de ma diffusion parce que... J'ai spécifiquement choisi des inserts musicaux à utilisation gratuite, et l'auteur du contenu est assis devant un ordinateur à proximité et ne s'oppose pas du tout à ce que j'utilise son contenu :)

Mais si vous avez une radio en arrière-plan quelque part dans votre diffusion, ou si vous avez utilisé votre morceau préféré pendant le montage, ou si vous avez pris une séquence vidéo d'un clip vidéo, d'une série télévisée ou d'un film populaire, alors votre diffusion est en danger. Il est également important que la diffusion comporte au moins une charge sémantique minimale, sinon elle pourrait être bloquée comme spam.

***

C'est tout ce que j'ai. J'espère que ce manuel servira bien à quelqu'un. Eh bien, si vous avez quelque chose à ajouter, écrivez, je serai heureux de lire les ajouts et les clarifications de l'article.

Source: habr.com

Ajouter un commentaire