Übertragen Sie Ihre Videos rund um die Uhr auf YouTube

Als Hobby filme ich kürzlich Vorträge eines bekannten Psychologen auf Video. Ich mounte und veröffentliche das Filmmaterial auf meiner Website. Vor einem Monat hatte ich die Idee, diese Vorträge rund um die Uhr auf YouTube rund um die Uhr zu übertragen. Eine Art thematischer „Kanal“, der sich dem persönlichen Wachstum widmet.

Ich weiß, wie man eine normale Sendung macht. Aber wie macht man daraus eine Sendung von Videodateien? Dass sie rund um die Uhr lief, flexibel und so autonom wie möglich war und gleichzeitig nicht von meinem Heimcomputer abhing. Das musste ich herausfinden.



Es dauerte mehrere Tage, um eine Lösung zu finden. Ich habe viele Foren und verschiedene Handbücher studiert, ohne die meine Sendung einfach nicht ausgefallen wäre. Und jetzt, wenn der Streich ein Erfolg ist, habe ich das Bedürfnis, meine Entscheidung zu teilen. Also erschien dieser Artikel.

Kurz gesagt, die endgültige Lösung war wie folgt: VPS + ffmeg + Bash-Skript . Unter dem Schnitt beschreibe ich die Schritte und spreche über die "Fallstricke", die während der Sendung entdeckt wurden.

Schritt 1 - Wohin geht die Sendung?


Ganz am Anfang musste festgelegt werden, wo die Sendung durchgeführt wird und wo ihre Quelle sein wird. Das allererste, was mir in den Sinn kam, war von einem Heimcomputer . Sammeln Sie Videos in einer Wiedergabeliste und spielen Sie sie in einem beliebigen Videoplayer ab. Nehmen Sie dann das Bildschirmbild auf und senden Sie es an YouTube. Aber ich habe diese Option fast sofort abgelehnt. Um es zu implementieren, müssen Sie Ihren Heimcomputer ständig eingeschaltet lassen. Dies ist das Geräusch der Kühler auch nachts und der erhöhte Energieverbrauch (+ 100-150 kWh pro Monat). Und es stellt sich heraus, dass Sie Ihren Heimcomputer für die Dauer der Übertragung nicht verwenden können. Jede Bewegung der Maus ist in der Sendung sichtbar.

Dann begann ich mich mit Cloud-Diensten zu befassen. Ich suchte nach einem vorgefertigten Dienst, mit dem Sie Ihre Videos hochladen oder beispielsweise Links zu Videos von YouTube einfügen können, und alles wird in einer Non-Stop-Sendung zusammengefasst. Aber ich fand nichts passendes. Vielleicht sah ich schlecht aus. Das einzige, was für die Funktionalität geeignet ist, ist restream.io, ein Dienst, mit dem gleichzeitig auf mehreren Plattformen gesendet werden kann. Sie scheinen in der Lage zu sein, ihre Videos hochzuladen. Dieser Dienst wurde jedoch für ganz andere Zwecke entwickelt und sie erwarten, dass die Sendung nur ein paar Stunden dauern wird. Ich denke, wenn es über diesen Dienst möglich gewesen wäre, eine Rund-um-die-Uhr-Sendung zu organisieren, hätte dies auf zehn oder sogar Hunderte von Dollar pro Monat geschossen. Trotzdem wollte ich die Sendung entweder kostenlos oder mit minimalen finanziellen Investitionen organisieren.

Es wurde klar, dass Sie senden müssenein separates Gerät oder sogar einen separaten Computer. Ich denke an etwas wie den Raspberri Pi. Und was? Er hat keinen Kühler. Ich habe das Video auf einem USB-Stick aufgenommen, ein Ethernet-Kabel angeschlossen und es an einem abgelegenen Ort liegen lassen. Es wird gesendet. Möglichkeit. Aber ich hatte weder das Board selbst noch die Erfahrung damit, also lehnte ich diese Option auch ab.

Am Ende stieß ich auf eine Diskussion, in der es darum ging, einen eigenen Server zu erstellenSendungen. Dies war nicht genau das, wonach ich gesucht habe, aber ich habe die Hauptidee verstanden - Sie können den Server verwenden! In dieser Diskussion schlugen sie vor, eine Reihe von VPS + Nginx + OBS zu verwenden. Es wurde klar, dass dieser Haufen zu mir passen könnte. Das einzige, was mich verwirrte, war, dass ich den Server nie verwaltet habe und es schien mir, dass mein dedizierter Server verwirrt und teuer war. Ich beschloss herauszufinden, wie viel es kosten würde, einen Server in der Mindestkonfiguration zu mieten, und war angenehm überrascht.

Bild

Die Preise sind in belarussischen Rubel und sie sind nur Krümel. Zum Verständnis sind 8 belarussische Rubel ungefähr 3,5 Dollar oder 240 russische Rubel. Verwenden Sie einen Monat lang einen vollwertigen Computer, der rund um die Uhr eingeschaltet ist und über einen schnellen Internetzugang verfügt. Aus irgendeinem Grund war diese Entdeckung für mich sehr erfreulich und ich ging mehrere Tage lang furchtbar glücklich wie ein Kind, das Weltraumraketen entdeckte :)

Übrigens nutzte ich das Angebot der allerersten Website, die Google mir auf Anfrage „VPS-Verleih“ gab. Vielleicht gibt es noch mehr Budgetlösungen, aber dieser Preis passte zu mir und ich suchte nicht weiter.

Beim Erstellen eines Servers können Sie das Betriebssystem auswählen, unter dem er ausgeführt werden soll. Auf jedem der aufgelisteten Systeme können Sie die Übertragung organisieren und eine Auswahl treffen, die auf Ihren Vorlieben und finanziellen Möglichkeiten basiert (für einen Server mit Windows wird eine zusätzliche Gebühr erhoben). Ich habe mich für CentOS entschieden. Nur weil ich ein bisschen Erfahrung mit ihr hatte.

Bild

Schritt 2 - Server-Setup


Nach dem Erstellen des Servers müssen Sie zunächst eine Verbindung über SSH herstellen. Zuerst habe ich PuTTy verwendet, dann aber die Secure Shell App, die auf Google Chrome ausgeführt wird. Es stellte sich also als bequemer für mich heraus.

Dann habe ich den Hostnamen geändert, die Zeitsynchronisation auf dem Server eingerichtet, das System aktualisiert, mit iptables herumgespielt ... und ein paar Dinge getan, aber nicht, weil es notwendig war. Es war nur interessant für mich, den Server einzurichten, und es hat bei mir funktioniert. Ich liebe es, wenn sich herausstellt :)

Aber die Schritte, die getan werden müssen:

  1. Verbinden Sie das EPEL-Repository.
  2. Erhöhen Sie den FTP-Server (ich habe vsftp gewählt).
  3. Installieren Sie ffmpeg.

Ich werde keine Details des Teams nennen, diese Anweisung ist eher konzeptionell, um einen allgemeinen Aktionsplan zu vermitteln. Wenn Sie Probleme mit einem der Schritte haben, werden diese schnell durch eine Abfrage in einer Suchmaschine wie "CentOS Connect EPEL" oder "CentOS FTP Server Installation" behoben. Unter den ersten Links finden Sie detaillierte Schritt-für-Schritt-Anleitungen.

Wie ich bereits schrieb, brauchte ich ein paar VPS + Nginx + OBS. VPS - bereit. Aber hier zu den verbleibenden Punkten tauchten Fragen auf. OBS ist ein Broadcast-Programm, Open Broadcaster Software. Und es funktioniert nur mit Threads, d.h. Beispielsweise wird ein Bild von einer Webcam aufgenommen und gesendet. Oder Bildschirmaufnahme. Oder eine bereits laufende Sendung leitet zu einer anderen Site weiter. Und ich habe keinen Stream, ich habe nur eine Reihe von Videodateien, die ich zum Erstellen eines Streams benötige.

Er begann in diese Richtung zu graben und stieß auf ffmpeg. FFmpeg ist eine Reihe kostenloser Open Source-Bibliotheken, mit denen Sie digitale Audio- und Videoaufnahmen in verschiedenen Formaten aufnehmen, konvertieren und übertragen können.

Und ich war sehr überrascht, wie viel ffmpeg kann. Wenn Sie möchten, wird der Ton aus dem Video gezogen. Wenn Sie möchten, wird ein Fragment des Videos ohne Transcodierung ausgeschnitten. Wenn Sie möchten, wird es von einem Format in ein anderes konvertiert. Und sehr viel mehr. Bis zu dem Punkt, an dem Sie eine Datei für ihn angeben können, konvertiert er sie in einen Stream und überträgt sie selbst auf YouTube. Alles, die Kette ist zusammengebaut. Es bleibt nur die Nuancen zu verfeinern.

Schritt 3 - Broadcast-Setup


Wir erstellen eine Sendung auf YouTube. Zu diesem Zeitpunkt benötigen wir nur einen Link und einen Übersetzungsschlüssel. Im folgenden Screenshot sind sie rot hervorgehoben. Laden Sie als

Bild

Nächstes die Videodateien auf den Server hoch , den wir senden möchten. Tatsächlich wird FTP nur für diese Phase benötigt. Wenn Sie eine andere bequeme Möglichkeit zum Hochladen von Dateien auf den Server haben, kann der FTP-Server weggelassen werden.

Wir streamen auf YouTube. Um die Übertragung zu starten, müssen Sie ffmpeg mit mehreren Attributen ausführen. Hier ist der kürzeste Befehl, den ich bekommen habe:

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

Attributentschlüsselung
-re – , .

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

-f – . , ffmpeg « » mp4 flv.

, YouTube .. , , , .

Wenn du alles richtig gemacht hast, sieht YouTube nach dem Ausführen dieses Befehls den übertragenen Stream. Um die Sendung zu starten, musst du nur auf YouTube selbst auf die Schaltfläche "Sendung starten" klicken.

Schritt 4 - Autonomie hinzufügen


Herzliche Glückwünsche! Jetzt wissen Sie, wie Sie mit dem Senden aus einer Videodatei beginnen können. Für Rund-um-die-Uhr-Sendungen reicht dies jedoch nicht aus. Es ist wichtig, dass nach Beendigung der Wiedergabe des ersten Videos das nächste sofort gestartet wird. Wenn alle Videos angezeigt werden, beginnt die Wiedergabe von vorne.

Ich habe mir die folgende Option ausgedacht: Erstellen Sie eine .sh-Datei, in der ich einen Befehl für jede Videodatei registriert und ganz am Ende einen Befehl zum Neustarten desselben Skripts angegeben habe. Es stellte sich als eine Art Rekursion heraus:

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

Und ja, es hat funktioniert. Ich war mit mir zufrieden, startete eine Testsendung und ging schlafen.

Am Morgen erwartete mich eine unangenehme Überraschung. Es stellte sich heraus, dass die Sendung nur ein paar Minuten dauerte und fast sofort endete, als ich meinen Computer ausschaltete. Die Untersuchung ergab, dass die auf diese Weise gestarteten Befehle ausgeführt werden, während der Benutzer auf dem Server autorisiert ist. Sobald ich die Verbindung getrennt hatte, wurde die Ausführung der von mir gestarteten Befehle unterbrochen. Um dies zu verhindern, reicht es aus, bashdas Team vor dem Team hinzuzufügen nohup. Auf diese Weise kann der laufende Prozess unabhängig von Ihrer Anwesenheit ausgeführt werden.

Die endgültige Mindestversion des Skripts sieht folgendermaßen aus:

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 $

Wobei start.sh die Datei ist, in die dieses Skript geschrieben ist. Diese Datei sollte sich im selben Verzeichnis wie die Videodateien befinden.

Durch Hinzufügen eines Dollarzeichens am Ende können Sie den Vorgang im Hintergrund starten, sodass Sie die Konsole weiterhin verwenden können, ohne die Übertragung zu unterbrechen.

Aus Boni ergaben sich folgende Brötchen:

  • Sie können die Wiedergabe von Dateien manuell umschalten. Dazu müssen Sie den aktuell ausgeführten ffmpeg-Prozess "beenden". Danach startet automatisch die Wiedergabe der nächsten Datei aus der Liste.
  • Neue Videos können zur Sendung hinzugefügt werden, ohne die Sendung anzuhalten. Laden Sie das Video einfach auf den Server hoch, fügen Sie den Befehl zum Ausführen dieser Datei im Skript hinzu und speichern Sie es. Und alle. In der nächsten Wiedergaberunde wird die neue Datei bereits zusammen mit den alten Dateien gesendet.

Schritt 5 - ffmpeg konfigurieren


Damit könnte man grundsätzlich aufhören. Aber ich wollte die Sendung ein wenig freundlicher für das Publikum machen.

Angenommen, eine Person ist zur Sendung gegangen, hat angefangen zu schauen, sie hat es gemocht und wollte diesen Vortrag von Anfang an sehen, und die Sendung beinhaltet kein Zurückspulen. Um eine Vorlesung von Anfang an anzusehen, muss eine Person auf meine Website gehen und eine Aufzeichnung der Vorlesung von Interesse erhalten. Und wie kann man verstehen, welcher Vortrag ihn interessiert? Die Seite hat 16 Vorträge und jede Woche gibt es nur mehr. Ich denke, dass selbst ich, der all diese Vorlesungen gedreht und bearbeitet hat, nicht in der Lage sein werde, anhand eines zufälligen Fragments festzustellen, um welche Vorlesung es sich handelt. Daher ist es notwendig, dass jede Vorlesung irgendwie bezeichnet wird.

Die Option, den Quellvideodateien im Bearbeitungsprogramm Untertitel hinzuzufügen, passte nicht zu mir. Es musste sichergestellt werden, dass die Originaldateien verwendet wurden. Um die von mir geforderte Sendung zu unterstützen, sind so wenig Körperbewegungen wie möglich erforderlich.

Es stellte sich heraus, dass ffmpeg mir auch dabei helfen kann. Es verfügt über ein spezielles Attribut -vf, mit dem Sie Text über das Video setzen können. Um dem Video Text hinzuzufügen, müssen Sie dem Befehl das folgende Fragment hinzufügen:

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

Dekodierung von Parametern
fontfile= – . . . .

text= – , , .

fontsize= – .

fontcolor= – .

borderw= – ( 1 ).

bordercolor= – .

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


Es sieht aus wie das:

Bild

Schritt 6 - Bestimmen Sie die Sendequalität


Alles, die Sendung ist fertig. FFmpeg sendet, Dateien spielen, meine Anwesenheit wird für die Übertragung nicht benötigt. Auch jede Vorlesung ist unterschrieben. Sieh so aus.

Aber eine andere Nuance tauchte auf - ich habe die minimale Serverkonfiguration gewählt und sie hat die Sendung nicht abgerufen. Serverkonfiguration: 1 Kern (wie 2,2 GHz), 1 Gigabyte RAM, 25 GB SSD. Es gab genügend RAM, aber der Prozessor wurde fast vollständig zu 100% geladen (und manchmal sogar zu 102-103% :) Dies führte dazu, dass die Sendung alle paar Sekunden einmal einfriert. Hässlich.

Sie könnten einfach eine teurere Konfiguration mit zwei Kernen vornehmen. Der Vorteil besteht darin, dass bei Cloud-Technologien die Serverkonfiguration durch Drücken einiger Tasten geändert wird. Aber ich wollte in die Leistung der minimalen Konfiguration passen. Ich habe angefangen, die ffmpeg-Dokumentation zu studieren, und ja, dort gibt es auch Einstellungen, mit denen Sie die Belastung des Systems anpassen können.

Eine hohe Bildqualität kann auf zwei Arten erreicht werden: entweder durch eine hohe Prozessorlast oder durch einen großen ausgehenden Datenverkehr. Es stellt sich heraus, dass der Kanal umso weniger Bandbreite benötigt, je mehr der Prozessor die Last übernehmen kann. Oder Sie können den Prozessor nicht stark laden, benötigen dann aber einen breiten Kanal mit einem großen Verkehrsspielraum. Wenn sowohl der Prozessor als auch die Größe des ausgehenden Kanals / Datenverkehrs eingeschränkt sind, müssen Sie die Bildqualität reduzieren, damit die Übertragung reibungslos verläuft.

Mein Server hat einen 10-Mbit / s-Kanal. Diese Breite ist gerade mit einem Rand. Es gibt jedoch ein Verkehrslimit - 1 TB pro Monat. Um die Verkehrsbeschränkungen zu erfüllen, sollte mein ausgehender Stream daher ~ 300 Kb pro Sekunde nicht überschreiten, d.h. Die Bitrate des ausgehenden Streams sollte nicht mehr als 2,5 Mbit / s betragen. YouTube empfiehlt übrigens nur, mit einer solchen Bitrate zu senden.

Ffmpeg verwendet verschiedene Ansätze, um die Belastung des Systems zu regulieren. Gut geschrieben hier . Am Ende habe ich zwei Attribute verwendet: -crfund -preset.

Konstanter Ratenfaktor (CRF)- Dies ist ein Koeffizient, aufgrund dessen Sie die Bildqualität anpassen können. CRF kann zwischen 0 und 51 liegen, wobei 0 die Qualität der Quelldatei und 51 die schlechteste Qualität ist. Es wird empfohlen, Werte zwischen 17 und 28 zu verwenden. Der Standardwert ist 23. Bei einem Verhältnis von 17 ist das Video optisch identisch mit dem Original, technisch jedoch nicht. Die Dokumentation besagt auch, dass sich die Größe des endgültigen Videos in Abhängigkeit von der angegebenen CRF exponentiell ändert, d.h. Durch Erhöhen des Koeffizienten um 6 Punkte wird die Bitrate des ausgehenden Videos verdoppelt.

Wenn Sie CRF verwenden, können Sie das "Gewicht" des ausgehenden Bildes auswählen und dann mithilfe von Voreinstellungen (-preset) bestimmen, wie viel der Prozessor geladen wird. Die Parameter für dieses Attribut haben Folgendes:

  • ultrafast
  • superfast
  • veryfast
  • faster
  • fast
  • medium - Standardwert
  • slow
  • slower
  • veryslow

Je „schneller“ der Parameter angegeben wird, desto höher ist die Belastung des Prozessors.

Ich nahm zuerst die Voreinstellung auf, die für meinen Prozessor im Grunde genommen „hart“ war, und stellte dann die Last mithilfe von CRF feiner ein. In meinem Fall wurde die Voreinstellung fastangezeigt, und für crf habe ich mich auf einen Wert von 24 festgelegt.

Fazit


Das ist alles. Der letzte Befehl zum Starten der Sendung Ich habe Folgendes erhalten:

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

Hier gibt es nur zwei unbeschriebene Momente:

1) -c:v libx264- eine Angabe eines bestimmten Codecs für die Arbeit mit der Quelldatei.
2) -g 3- eine explizite Angabe der Anzahl der Keyframes. In diesem Fall wird angegeben, dass jeder dritte Frame der Schlüssel sein sollte. Der Standardwert ist entweder 5 oder 8, aber YouTube schwört, fragt mindestens 3.

Welche Qualität der Sendung stellte sich heraus , zu sehen ist hier .

Die Serverlast war wie folgt:

Bild

Bild

Basierend auf den Überwachungsdaten ist klar, dass die Prozessorlast zwischen 70% und 95% variiert und die Übertragung in einer Woche nie 100% erreicht hat. Mit diesen Einstellungen reicht der Prozessor also aus.

Beim Laden einer Festplatte kann ich sagen, dass sie fast nicht geladen ist und eine normale Festplatte für die Übertragung ausreichen sollte.

Aber die Menge des ausgehenden Verkehrs stört mich. Es stellt sich heraus, dass mein ausgehender Stream zwischen 450 und 650 KB pro Sekunde liegt. Für einen Monat werden es ungefähr 1,8 Terabyte sein. Möglicherweise müssen Sie Datenverkehr kaufen oder trotzdem zu einer Dual-Core-Konfiguration wechseln, weil Ich möchte die Bildqualität nicht reduzieren.

***

Daher kann ich sagen, dass das Einrichten einer solchen Sendung von Grund auf ungefähr 1-2 Stunden dauert. Darüber hinaus dauert es die meiste Zeit, bis das Video auf den Server hochgeladen ist.

Als Marketinginstrument hat sich der Start einer solchen Sendung nicht ausgezahlt. Wenn Sie die Ansichten so beenden, dass die YouTube-Algorithmen diese Sendung aufgreifen und aktiv in den Empfehlungen anzeigen, funktioniert möglicherweise etwas. In meinem Fall wurde es 16 Tage lang ununterbrochen ausgestrahlt.

Das ist ok. Die Sendung passt harmonisch auf die Hauptseite meiner Website. Es stellte sich als eine Art Gelegenheit heraus, sich schnell über den Dozenten und die Vorlesungen selbst zu entscheiden.

Und einen Moment. Es ist wichtig, dass die Sendung nicht das Urheberrecht anderer verletzt, da sie sonst blockiert wird. Ich bin ruhig für meine Sendung. Ich habe speziell musikalische Beilagen mit kostenlosem Gebrauch ausgewählt, und der Autor des Inhalts sitzt an einem benachbarten Computer und ist überhaupt nicht gegen mich, wenn ich seinen Inhalt verwende :)

Wenn jedoch irgendwo im Hintergrund ein Radio im Hintergrund abgespielt wird oder Sie während der Bearbeitung Ihren Lieblingstrack verwendet haben oder ein Video aus einem beliebten Musikvideo, einer Serie oder einem Film aufgenommen haben, ist Ihre Sendung gefährdet. Es ist auch wichtig, dass die Sendung mindestens eine minimale semantische Last trägt, da sie sonst als Spam blockiert werden kann.

***

Das ist alles für mich. Ich hoffe, dieses Handbuch wird jemandem gut dienen. Nun, wenn Sie etwas hinzuzufügen haben - schreiben Sie, ich werde gerne Ergänzungen und Erläuterungen zum Artikel lesen.

All Articles